[MERGE] with trunk

bzr revid: fka@tinyerp.com-20121116050140-150glykrcbea561r
This commit is contained in:
Foram Katharotiya (OpenERP)
2012-11-16 10:31:40 +05:30
201 changed files with 4054 additions and 1539 deletions
+1 -1
View File
@@ -107,7 +107,7 @@ class account_analytic_line(osv.osv):
if journal_id:
journal = analytic_journal_obj.browse(cr, uid, journal_id, context=context)
if journal.type == 'sale':
product_price_type_ids = product_price_type_obj.search(cr, uid, [('field','=','list_price')], context)
product_price_type_ids = product_price_type_obj.search(cr, uid, [('field','=','list_price')], context=context)
if product_price_type_ids:
pricetype = product_price_type_obj.browse(cr, uid, product_price_type_ids, context=context)[0]
# Take the company currency as the reference one
+13
View File
@@ -486,6 +486,19 @@ class account_bank_statement(osv.osv):
default['move_line_ids'] = []
return super(account_bank_statement, self).copy(cr, uid, id, default, context=context)
def button_journal_entries(self, cr, uid, ids, context=None):
ctx = (context or {}).copy()
ctx['journal_id'] = self.browse(cr, uid, ids[0], context=context).journal_id.id
return {
'view_type':'form',
'view_mode':'tree',
'res_model':'account.move.line',
'view_id':False,
'type':'ir.actions.act_window',
'domain':[('statement_id','in',ids)],
'context':ctx,
}
account_bank_statement()
class account_bank_statement_line(osv.osv):
+3 -2
View File
@@ -402,6 +402,7 @@ class account_invoice(osv.osv):
'default_res_id': ids[0],
'default_use_template': True,
'default_template_id': template_id,
'default_composition_mode': 'comment',
})
return {
'view_type': 'form',
@@ -431,7 +432,7 @@ class account_invoice(osv.osv):
if t['state'] in ('draft', 'cancel') and t['internal_number']== False:
unlink_ids.append(t['id'])
else:
raise osv.except_osv(_('Invalid Action!'), _('You cannot delete an invoice which is open or paid. You should refund it instead.'))
raise osv.except_osv(_('Invalid Action!'), _('You can not delete an invoice which is not cancelled. You should refund it instead.'))
osv.osv.unlink(self, cr, uid, unlink_ids, context=context)
return True
@@ -983,13 +984,13 @@ class account_invoice(osv.osv):
for i in line:
i[2]['period_id'] = period_id
ctx.update(invoice=inv)
move_id = move_obj.create(cr, uid, move, context=ctx)
new_move_name = move_obj.browse(cr, uid, move_id, context=ctx).name
# make the invoice point to that move
self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name}, context=ctx)
# Pass invoice in context in method post: used if you want to get the same
# account move reference when creating the same invoice after a cancelled one:
ctx.update({'invoice':inv})
move_obj.post(cr, uid, [move_id], context=ctx)
self._log_event(cr, uid, ids)
return True
+1 -1
View File
@@ -436,7 +436,7 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
<field name="message_ids" widget="mail_thread" placeholder="Share a note..."/>
</div>
</form>
</field>
+2 -2
View File
@@ -208,7 +208,7 @@ class account_move_line(osv.osv):
if type(period_id) == str:
ids = period_obj.search(cr, uid, [('name', 'ilike', period_id)])
context.update({
'period_id': ids[0]
'period_id': ids and ids[0] or False
})
return context
@@ -582,7 +582,7 @@ class account_move_line(osv.osv):
lines = self.browse(cr, uid, ids, context=context)
for l in lines:
if l.account_id.type == 'view':
raise osv.except_osv(_('Error!'), _('You cannot create journal items on “View” type account %s %s.') % (l.account_id.code, l.account_id.name))
return False
return True
def _check_no_closed(self, cr, uid, ids, context=None):
-8
View File
@@ -41,13 +41,5 @@
groups="group_account_user,group_account_manager"
parent="account.menu_finance_generic_reporting" sequence="3"/>
<report id="account_account_balance_landscape"
string="Account balance"
model="account.account"
name="account.account.balance.landscape"
rml="account/report/account_balance_landscape.rml"
auto="False"
menu="False"/>
</data>
</openerp>
+18 -9
View File
@@ -302,7 +302,7 @@
<field name="domain">[('parent_id','=',False)]</field>
</record>
<record id="view_account_gain_loss_tree" model="ir.ui.view">
<record id="view_account_gain_loss_tree" model="ir.ui.view">
<field name="name">Unrealized Gain or Loss</field>
<field name="model">account.account</field>
<field name="arch" type="xml">
@@ -322,7 +322,7 @@
</field>
</record>
<record id="action_account_gain_loss" model="ir.actions.act_window">
<record id="action_account_gain_loss" model="ir.actions.act_window">
<field name="name">Unrealized Gain or Loss</field>
<field name="res_model">account.account</field>
<field name="view_type">form</field>
@@ -650,7 +650,7 @@
<field name="ref"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="type" on_change="onchange_type(partner_id, type)"/>
<field domain="[('journal_id','=',parent.journal_id), ('company_id', '=', parent.company_id)]" name="account_id"/>
<field name="account_id" options='{"no_open":True}' domain="[('journal_id','=',parent.journal_id), ('company_id', '=', parent.company_id)]"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '&lt;&gt;', 'view')]"/>
<field name="amount"/>
</tree>
@@ -661,7 +661,7 @@
<field name="ref"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="type" on_change="onchange_type(partner_id, type)"/>
<field domain="[('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view'), ('company_id', '=', parent.company_id)]" name="account_id"/>
<field name="account_id" domain="[('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view'), ('company_id', '=', parent.company_id)]"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '&lt;&gt;', 'view')]"/>
<field name="amount"/>
<field name="sequence" readonly="0"/>
@@ -671,15 +671,24 @@
</form>
</field>
</page>
<page string="Journal Entries" name="move_live_ids">
<field name="move_line_ids"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_bank_statement_form_journal_items" model="ir.ui.view">
<field name="name">account.bank.statement.journal.items.form.inherit</field>
<field name="model">account.bank.statement</field>
<field name="inherit_id" ref="view_bank_statement_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='import_buttons']" position="inside">
<button name="button_journal_entries"
string="Journal Items" type="object"
attrs="{'invisible':[('state','!=','confirm')]}"/>
</xpath>
</field>
</record>
<record id="action_bank_statement_tree" model="ir.actions.act_window">
<field name="name">Bank Statements</field>
@@ -1055,7 +1064,7 @@
</field>
</record>
<record id="view_move_line_tree" model="ir.ui.view">
<record id="view_move_line_tree" model="ir.ui.view">
<field name="name">account.move.line.tree</field>
<field name="model">account.move.line</field>
<field eval="4" name="priority"/>
@@ -1850,7 +1859,7 @@
</field>
</record>
<record id="view_subscription_search" model="ir.ui.view">
<record id="view_subscription_search" model="ir.ui.view">
<field name="name">account.subscription.search</field>
<field name="model">account.subscription</field>
<field name="arch" type="xml">
+1 -1
View File
@@ -40,7 +40,7 @@
<field name="name">Automated Invoice Notification Mail</field>
<field name="email_from">${object.user_id.email or object.company_id.email or 'noreply@localhost'}</field>
<field name="subject">${object.company_id.name} Invoice (Ref ${object.number or 'n/a' })</field>
<field name="email_to">${object.partner_id.email or ''}</field>
<field name="email_recipients">${object.partner_id.id}</field>
<field name="model_id" ref="account.model_account_invoice"/>
<field name="auto_delete" eval="True"/>
<field name="body_html"><![CDATA[
+17 -16
View File
@@ -7,20 +7,20 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
"PO-Revision-Date: 2011-03-17 20:16+0000\n"
"PO-Revision-Date: 2012-11-13 15:01+0000\n"
"Last-Translator: jpdborgna <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-10-30 05:06+0000\n"
"X-Generator: Launchpad (build 16206)\n"
"X-Launchpad-Export-Date: 2012-11-14 04:40+0000\n"
"X-Generator: Launchpad (build 16251)\n"
#. module: account
#: view:account.invoice.report:0
#: view:analytic.entries.report:0
msgid "last month"
msgstr ""
msgstr "Ultimo mes"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -146,7 +146,7 @@ msgstr "Referencia"
#. module: account
#: view:account.open.closed.fiscalyear:0
msgid "Choose Fiscal Year "
msgstr ""
msgstr "Seleccione el año fiscal "
#. module: account
#: help:account.payment.term,active:0
@@ -159,7 +159,7 @@ msgstr ""
#: code:addons/account/account_invoice.py:1430
#, python-format
msgid "Warning!"
msgstr ""
msgstr "¡Advertencia!"
#. module: account
#: code:addons/account/account.py:3129
@@ -187,7 +187,7 @@ msgstr ""
#: code:addons/account/wizard/account_move_journal.py:95
#, python-format
msgid "Journal: %s"
msgstr ""
msgstr "Diario: %s"
#. module: account
#: help:account.analytic.journal,type:0
@@ -228,6 +228,7 @@ msgstr ""
#, python-format
msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)"
msgstr ""
"La factura '%s' está parcialmente pagada: %s%s de %s%s (%s%s pendiente)"
#. module: account
#: model:process.transition,note:account.process_transition_supplierentriesreconcile0
@@ -268,7 +269,7 @@ msgstr ""
#. module: account
#: view:account.fiscalyear.close.state:0
msgid "Close Fiscalyear"
msgstr ""
msgstr "Cerrar ejercicio fiscal"
#. module: account
#: field:account.automatic.reconcile,allow_write_off:0
@@ -335,7 +336,7 @@ msgstr ""
#. module: account
#: view:account.installer:0
msgid "Configure"
msgstr ""
msgstr "Configurar"
#. module: account
#: selection:account.entries.report,month:0
@@ -344,7 +345,7 @@ msgstr ""
#: selection:report.account.sales,month:0
#: selection:report.account_type.sales,month:0
msgid "June"
msgstr ""
msgstr "Junio"
#. module: account
#: model:ir.actions.act_window,help:account.action_account_moves_bank
@@ -378,12 +379,12 @@ msgstr "Fecha de creación"
#. module: account
#: selection:account.journal,type:0
msgid "Purchase Refund"
msgstr ""
msgstr "Devolución de compra"
#. module: account
#: selection:account.journal,type:0
msgid "Opening/Closing Situation"
msgstr ""
msgstr "Situación de apertura/cierre"
#. module: account
#: help:account.journal,currency:0
@@ -393,7 +394,7 @@ msgstr "La moneda utilizada para el extracto"
#. module: account
#: field:account.open.closed.fiscalyear,fyear_id:0
msgid "Fiscal Year to Open"
msgstr "Año fiscal para abrir"
msgstr "Ejercicio fiscal a abrir"
#. module: account
#: help:account.journal,sequence_id:0
@@ -495,7 +496,7 @@ msgstr ""
#. module: account
#: field:account.bank.statement,account_id:0
msgid "Account used in this journal"
msgstr ""
msgstr "Cuenta utilizada en este diario"
#. module: account
#: help:account.aged.trial.balance,chart_account_id:0
@@ -557,7 +558,7 @@ msgstr "Cerrar un año fiscal"
#. module: account
#: model:process.transition,note:account.process_transition_confirmstatementfromdraft0
msgid "The accountant confirms the statement."
msgstr ""
msgstr "El contador confirma la declaración."
#. module: account
#: report:account.account.balance:0
@@ -8156,7 +8157,7 @@ msgstr ""
#: field:account.bank.statement,balance_end_real:0
#: field:account.treasury.report,ending_balance:0
msgid "Ending Balance"
msgstr "Balance final"
msgstr "Saldo Final"
#. module: account
#: help:account.move.line,blocked:0
@@ -170,12 +170,12 @@
<tr>
<td><para style="terp_tblheader_General_Centre">Chart of Accounts</para></td>
<td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td>
<td><para style="terp_tblheader_General_Centre">Filter By [[ get_filter(data)!='No Filter' and get_filter(data) ]]</para></td>
<td><para style="terp_tblheader_General_Centre">Filter By [[ get_filter(data)!='No Filters' and get_filter(data) ]]</para></td>
</tr>
<tr>
<td><para style="terp_default_Centre_8">[[ get_account(data) or removeParentNode('para') ]]</para></td>
<td><para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para></td>
<td><para style="terp_default_Centre_8">[[ get_filter(data)=='No Filter' and get_filter(data) or removeParentNode('para') ]] </para>
<td><para style="terp_default_Centre_8">[[ get_filter(data)=='No Filters' and get_filter(data) or removeParentNode('para') ]] </para>
<blockTable colWidths="60.0,60.0" style="Table3">[[ get_filter(data)=='Date' or removeParentNode('blockTable') ]]
<tr>
<td><para style="terp_tblheader_General_Centre">Start Date</para></td>
@@ -299,10 +299,10 @@ class general_ledger(report_sxw.rml_parse, common_report_header):
def _get_sortby(self, data):
if self.sortby == 'sort_date':
return 'Date'
return self._translate('Date')
elif self.sortby == 'sort_journal_partner':
return 'Journal & Partner'
return 'Date'
return self._translate('Journal & Partner')
return self._translate('Date')
report_sxw.report_sxw('report.account.general.ledger', 'account.account', 'addons/account/report/account_general_ledger.rml', parser=general_ledger, header='internal')
report_sxw.report_sxw('report.account.general.ledger_landscape', 'account.account', 'addons/account/report/account_general_ledger_landscape.rml', parser=general_ledger, header='internal landscape')
@@ -94,10 +94,10 @@ class common_report_header(object):
def _get_filter(self, data):
if data.get('form', False) and data['form'].get('filter', False):
if data['form']['filter'] == 'filter_date':
return 'Date'
return self._translate('Date')
elif data['form']['filter'] == 'filter_period':
return 'Periods'
return 'No Filter'
return self._translate('Periods')
return self._translate('No Filters')
def _sum_debit_period(self, period_id, journal_id=None):
journals = journal_id or self.journal_ids
-12
View File
@@ -31,7 +31,6 @@
-
!python {model: account.account}: |
ctx={}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')],'active_id':ref('account.chart0')})
data_dict = {'chart_account_id':ref('account.chart0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_aged_balance_view',wiz_data=data_dict, context=ctx, our_module='account')
@@ -40,7 +39,6 @@
-
!python {model: account.account}: |
ctx={}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0'), 'account_report_id': ref('account_financial_report_balancesheet0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_report',wiz_data=data_dict, context=ctx, our_module='account')
@@ -49,7 +47,6 @@
-
!python {model: account.account}: |
ctx={}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_balance_menu',wiz_data=data_dict, context=ctx, our_module='account')
@@ -60,7 +57,6 @@
journal_ids = [ref('account.sales_journal'),ref('account.refund_sales_journal'),ref('account.expenses_journal'),ref('account.refund_expenses_journal'),
ref('account.bank_journal'),ref('account.check_journal'),ref('account.cash_journal')]
ctx={}
ctx.update({'model': 'account.journal.period','active_ids':journal_ids})
data_dict = {'chart_account_id':ref('account.chart0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_central_journal',wiz_data=data_dict, context=ctx, our_module='account')
@@ -71,7 +67,6 @@
journal_ids = [ref('account.sales_journal'),ref('account.refund_sales_journal'),ref('account.expenses_journal'),ref('account.refund_expenses_journal'),
ref('account.bank_journal'),ref('account.check_journal'),ref('account.cash_journal')]
ctx={}
ctx.update({'model': 'account.journal.period','active_ids':journal_ids})
data_dict = {'chart_account_id':ref('account.chart0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_general_journal',wiz_data=data_dict, context=ctx, our_module='account')
@@ -80,7 +75,6 @@
-
!python {model: account.account}: |
ctx={}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0'),'landscape':False}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_general_ledger_menu',wiz_data=data_dict, context=ctx, our_module='account')
@@ -89,7 +83,6 @@
-
!python {model: account.account}: |
ctx={}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0'),'landscape':True}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_general_ledger_menu',wiz_data=data_dict, context=ctx, our_module='account')
@@ -99,7 +92,6 @@
!python {model: account.journal.period}: |
journal_ids = [ref('account.sales_journal'),ref('account.refund_sales_journal'),ref('account.expenses_journal'),ref('account.refund_expenses_journal'),ref('account.bank_journal'),ref('account.check_journal'),ref('account.cash_journal')]
ctx={}
ctx.update({'model': 'account.journal.period','active_ids':journal_ids})
data_dict = {'chart_account_id':ref('account.chart0'), 'period_from':ref('period_1'), 'period_to':ref('period_12')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_print_journal',wiz_data=data_dict, context=ctx, our_module='account')
@@ -109,7 +101,6 @@
!python {model: account.account}: |
ctx={}
data_dict = {'chart_account_id':ref('account.chart0')}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')],'active_id':ref('account.chart0')})
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_partner_balance',wiz_data=data_dict, context=ctx, our_module='account')
-
@@ -118,7 +109,6 @@
!python {model: account.account}: |
ctx={}
data_dict = {'chart_account_id':ref('account.chart0'),'page_split': True}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')],'active_id':ref('account.chart0')})
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_partner_ledger',wiz_data=data_dict, context=ctx, our_module='account')
-
@@ -127,7 +117,6 @@
!python {model: res.partner}: |
ctx={}
data_dict = {'chart_account_id':ref('account.chart0'),'page_split': False}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')],'active_id':ref('account.chart0')})
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_partner_ledger',wiz_data=data_dict, context=ctx, our_module='account')
-
@@ -135,7 +124,6 @@
-
!python {model: account.account}: |
ctx={}
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0'), 'target_move': 'all', 'account_report_id': ref('account_financial_report_balancesheet0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_report',wiz_data=data_dict, context=ctx, our_module='account')
+4
View File
@@ -0,0 +1,4 @@
from . import test_tax
fast_suite = [test_tax,
]
+49
View File
@@ -0,0 +1,49 @@
from openerp.tests.common import TransactionCase
class TestTax(TransactionCase):
"""Tests for taxes (account.tax)
We don't really need at this point to link taxes to tax codes
(account.tax.code) nor to companies (base.company) to check computation
results.
"""
def setUp(self):
super(TestTax, self).setUp()
self.tax_model = self.registry('account.tax')
def test_programmatic_tax(self):
cr, uid = self.cr, self.uid
tax_id = self.tax_model.create(cr, uid, dict(
name="Programmatic tax",
type='code',
python_compute='result = 12.0',
python_compute_inv='result = 11.0',
))
tax_records = self.tax_model.browse(cr, uid, [tax_id])
res = self.tax_model.compute_all(cr, uid, tax_records, 50.0, 2)
tax_detail = res['taxes'][0]
self.assertEquals(tax_detail['amount'], 24.0)
self.assertEquals(res['total_included'], 124.0)
def test_percent_tax(self):
"""Test computations done by a 10 percent tax."""
cr, uid = self.cr, self.uid
tax_id = self.tax_model.create(cr, uid, dict(
name="Percent tax",
type='percent',
amount='0.1',
))
tax_records = self.tax_model.browse(cr, uid, [tax_id])
res = self.tax_model.compute_all(cr, uid, tax_records, 50.0, 2)
tax_detail = res['taxes'][0]
self.assertEquals(tax_detail['amount'], 10.0)
self.assertEquals(res['total_included'], 110.0)
# now the inverse computation
res = self.tax_model.compute_inv(cr, uid, tax_records, 55.0, 2)
self.assertEquals(res[0]['amount'], 10.0)
@@ -14,15 +14,19 @@
</xpath>
<xpath expr="//notebook/page[@string='Filters']" position="after">
<page string="Comparison" attrs="{'invisible': [('enable_filter','=',False)]}">
<field name="label_filter" attrs="{'required': [('enable_filter', '=', True)]}"/>
<field name="fiscalyear_id_cmp"/><newline/>
<field name="filter_cmp"/>
<separator string="Dates" colspan="4"/>
<field name="date_from_cmp" attrs="{'readonly':[('filter_cmp', '!=', 'filter_date')], 'required':[('filter_cmp', '=', 'filter_date')]}" colspan="4"/>
<field name="date_to_cmp" attrs="{'readonly':[('filter_cmp', '!=', 'filter_date')], 'required':[('filter_cmp', '=', 'filter_date')]}" colspan="4"/>
<separator string="Periods" colspan="4"/>
<field name="period_from_cmp" domain="[('fiscalyear_id', '=', fiscalyear_id_cmp)]" attrs="{'readonly':[('filter_cmp','!=','filter_period')], 'required':[('filter_cmp', '=', 'filter_period')]}" colspan="4"/>
<field name="period_to_cmp" domain="[('fiscalyear_id', '=', fiscalyear_id_cmp)]" attrs="{'readonly':[('filter_cmp','!=','filter_period')], 'required':[('filter_cmp', '=', 'filter_period')]}" colspan="4"/>
<group>
<field name="label_filter" attrs="{'required': [('enable_filter', '=', True)]}"/>
<field name="fiscalyear_id_cmp"/><newline/>
<field name="filter_cmp"/>
</group>
<group string="Dates" attrs="{'invisible':[('filter_cmp', '!=', 'filter_date')]}">
<field name="date_from_cmp" attrs="{'required':[('filter_cmp', '=', 'filter_date')]}"/>
<field name="date_to_cmp" attrs="{'required':[('filter_cmp', '=', 'filter_date')]}"/>
</group>
<group string="Periods" attrs="{'invisible':[('filter_cmp', '!=', 'filter_period')]}">
<field name="period_from_cmp" domain="[('fiscalyear_id', '=', fiscalyear_id_cmp)]" attrs="{'required':[('filter_cmp', '=', 'filter_period')]}"/>
<field name="period_to_cmp" domain="[('fiscalyear_id', '=', fiscalyear_id_cmp)]" attrs="{'required':[('filter_cmp', '=', 'filter_period')]}"/>
</group>
</page>
</xpath>
<xpath expr="//notebook/page[@string='Journals']" position="replace">
@@ -226,7 +226,7 @@ class account_fiscalyear_close(osv.osv_memory):
for account in obj_acc_account.browse(cr, uid, account_ids, context={'fiscalyear': fy_id}):
balance_in_currency = 0.0
if account.currency_id:
cr.execute('SELECT sum(amount_currency) as balance_in_currency FROM account_move_line ' \
cr.execute('SELECT sum(COALESCE(amount_currency,0.0)) as balance_in_currency FROM account_move_line ' \
'WHERE account_id = %s ' \
'AND ' + query_line + ' ' \
'AND currency_id = %s', (account.id, account.currency_id.id))
@@ -27,7 +27,7 @@ class account_open_closed_fiscalyear(osv.osv_memory):
_description = "Choose Fiscal Year"
_columns = {
'fyear_id': fields.many2one('account.fiscalyear', \
'Fiscal Year to Open', required=True, help='Select Fiscal Year which you want to remove entries for its End of year entries journal'),
'Fiscal Year', required=True, help='Select Fiscal Year which you want to remove entries for its End of year entries journal'),
}
def remove_entries(self, cr, uid, ids, context=None):
@@ -36,7 +36,7 @@ class account_open_closed_fiscalyear(osv.osv_memory):
data = self.browse(cr, uid, ids, context=context)[0]
period_journal = data.fyear_id.end_journal_period_id or False
if not period_journal:
raise osv.except_osv(_('Error!'), _('You have to set the end of the fiscal year for this journal.'))
raise osv.except_osv(_('Error!'), _("You have to set the 'End of Year Entries Journal' for this Fiscal Year which is set after generating opening entries from 'Generate Opening Entries'."))
ids_move = move_obj.search(cr, uid, [('journal_id','=',period_journal.journal_id.id),('period_id','=',period_journal.period_id.id)])
if ids_move:
@@ -5,14 +5,18 @@
<field name="name">account.open.closed.fiscalyear.form</field>
<field name="model">account.open.closed.fiscalyear</field>
<field name="arch" type="xml">
<form string="Choose Fiscal Year " version="7.0">
<form string="Cancel Fiscal Year Opening Entries" version="7.0">
<separator string="Cancel Fiscal Year Opening Entries"/>
<p class="oe_grey">
This wizard will remove the end of year journal entries of selected fiscal year. Note that you can run this wizard many times for the same fiscal year.
</p>
<group>
<field name="fyear_id" domain="[('state','=','draft')]"/>
<field name="fyear_id" domain="[('state','=','draft'), ('end_journal_period_id', '!=', False)]"/>
</group>
<footer>
<button string="Open" name="remove_entries" type="object" class="oe_highlight"/>
<button string="Cancel Opening Entries" name="remove_entries" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel"/>
<button string="Discard" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
@@ -9,8 +9,7 @@
<field name="inherit_id" ref="account_common_report_view" />
<field name="arch" type="xml">
<data>
<xpath expr="//field[@name='journal_ids']" position="replace">
<field name="journal_ids" colspan="4" nolabel="1" required="0" readonly="1"/>
<xpath expr="//notebook/page[@string='Journals']" position="replace">
</xpath>
<xpath expr="//field[@name='target_move']" position="after">
<field name="display_account"/>
@@ -119,7 +119,11 @@ class account_common_report(osv.osv_memory):
def _get_fiscalyear(self, cr, uid, context=None):
now = time.strftime('%Y-%m-%d')
fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, [('date_start', '<', now), ('date_stop', '>', now)], limit=1 )
company_id = False
ids = context.get('active_ids', [])
if ids:
company_id = self.browse(cr, uid, ids[0], context=context).company_id.id
fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, [('date_start', '<', now), ('date_stop', '>', now), ('company_id', '=', company_id)], limit=1)
return fiscalyears and fiscalyears[0] or False
def _get_all_journal(self, cr, uid, context=None):
@@ -26,12 +26,10 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Accounting and Finance application installed!</field>
<field name="body"><![CDATA[
With OpenERP's accounting, you get instant access to your financial data, and can setup analytic accounting, forecast taxes, control budgets, easily create and send invoices, record bank statements, etc.
<p>The accounting features are fully integrated with other OpenERP applications to automate all your processes: creation of customer invoices, control of supplier invoices, point-of-sale integration, automated follow-ups, etc.</p>
]]></field>
<field name="body"><![CDATA[<p>With OpenERP's accounting, you get instant access to your financial data, and can setup analytic accounting, forecast taxes, control budgets, easily create and send invoices, record bank statements, etc.</p>
<p>The accounting features are fully integrated with other OpenERP applications to automate all your processes: creation of customer invoices, control of supplier invoices, point-of-sale integration, automated follow-ups, etc.</p>]]></field>
</record>
</data>
</openerp>
@@ -21,17 +21,17 @@
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/notebook/page/field[@name='line_id']/tree/field[@name='analytic_account_id']" position="replace">
<field name="analytics_id" context="{'journal_id':journal_id}" groups="analytic.group_analytic_accounting"/>
<field name="analytics_id" context="{'journal_id':parent.journal_id}" groups="analytic.group_analytic_accounting"/>
</xpath>
<xpath expr="/form/sheet/notebook/page/field[@name='line_id']/form/notebook/page/group/group/field[@name='analytic_account_id']" position="replace">
<field name="analytics_id" context="{'journal_id':journal_id}" groups="analytic.group_analytic_accounting"/>
<field name="analytics_id" context="{'journal_id':parent.journal_id}" groups="analytic.group_analytic_accounting"/>
</xpath>
</field>
</record>
<record id="journal_col11" model="account.journal.column">
<field eval="&quot;&quot;&quot;Analytic Distribution&quot;&quot;&quot;" name="name"/>
<field eval="11" name="sequence"/>
<field eval="15" name="sequence"/>
<field name="view_id" ref="account.account_journal_view"/>
<field eval="0" name="required"/>
<field eval="&quot;&quot;&quot;analytics_id&quot;&quot;&quot;" name="field"/>
@@ -276,7 +276,7 @@
</field>
</field>
</record>
<record model="ir.ui.view" id="view_default_inherit_tree">
<record model="ir.ui.view" id="view_default_inherit_tree">
<field name="name">account.analytic.default.tree.plans</field>
<field name="model">account.analytic.default</field>
<field name="inherit_id" ref="account_analytic_default.view_account_analytic_default_tree"/>
+2 -2
View File
@@ -40,7 +40,7 @@ class account_invoice_line(osv.osv):
if inv.type in ('out_invoice','out_refund'):
for i_line in inv.invoice_line:
if i_line.product_id:
if i_line.product_id and i_line.product_id.valuation == 'real_time':
if inv.type == 'out_invoice':
# debit account dacc will be the output account
# first check the product, if empty check the category
@@ -87,7 +87,7 @@ class account_invoice_line(osv.osv):
})
elif inv.type in ('in_invoice','in_refund'):
for i_line in inv.invoice_line:
if i_line.product_id:
if i_line.product_id and i_line.product_id.valuation == 'real_time':
if i_line.product_id.type != 'service':
# get the price difference account at the product
acc = i_line.product_id.property_account_creditor_price_difference and i_line.product_id.property_account_creditor_price_difference.id
+11 -9
View File
@@ -377,16 +377,15 @@ class account_asset_depreciation_line(osv.osv):
move_line_obj = self.pool.get('account.move.line')
currency_obj = self.pool.get('res.currency')
created_move_ids = []
asset_ids = []
for line in self.browse(cr, uid, ids, context=context):
if currency_obj.is_zero(cr, uid, line.asset_id.currency_id, line.remaining_value):
can_close = True
depreciation_date = time.strftime('%Y-%m-%d')
period_ids = period_obj.find(cr, uid, depreciation_date, context=context)
company_currency = line.asset_id.company_id.currency_id.id
current_currency = line.asset_id.currency_id.id
context.update({'date': depreciation_date})
amount = currency_obj.compute(cr, uid, current_currency, company_currency, line.amount, context=context)
sign = line.asset_id.category_id.journal_id.type = 'purchase' and 1 or -1
sign = (line.asset_id.category_id.journal_id.type == 'purchase' and 1) or -1
asset_name = line.asset_id.name
reference = line.name
move_vals = {
@@ -409,8 +408,8 @@ class account_asset_depreciation_line(osv.osv):
'period_id': period_ids and period_ids[0] or False,
'journal_id': journal_id,
'partner_id': partner_id,
'currency_id': company_currency <> current_currency and current_currency or False,
'amount_currency': company_currency <> current_currency and - sign * line.amount or 0.0,
'currency_id': company_currency != current_currency and current_currency or False,
'amount_currency': company_currency != current_currency and - sign * line.amount or 0.0,
'date': depreciation_date,
})
move_line_obj.create(cr, uid, {
@@ -423,16 +422,19 @@ class account_asset_depreciation_line(osv.osv):
'period_id': period_ids and period_ids[0] or False,
'journal_id': journal_id,
'partner_id': partner_id,
'currency_id': company_currency <> current_currency and current_currency or False,
'amount_currency': company_currency <> current_currency and sign * line.amount or 0.0,
'currency_id': company_currency != current_currency and current_currency or False,
'amount_currency': company_currency != current_currency and sign * line.amount or 0.0,
'analytic_account_id': line.asset_id.category_id.account_analytic_id.id,
'date': depreciation_date,
'asset_id': line.asset_id.id
})
self.write(cr, uid, line.id, {'move_id': move_id}, context=context)
created_move_ids.append(move_id)
if can_close:
asset_obj.write(cr, uid, [line.asset_id.id], {'state': 'close'}, context=context)
asset_ids.append(line.asset_id.id)
# we re-evaluate the assets to determine whether we can close them
for asset in asset_obj.browse(cr, uid, list(set(asset_ids)), context=context):
if currency_obj.is_zero(cr, uid, asset.currency_id, asset.value_residual):
asset.write({'state': 'close'})
return created_move_ids
account_asset_depreciation_line()
@@ -72,12 +72,12 @@
<field name="date" readonly="1"/>
<field name="val_date" readonly="1"/>
<field name="name"/>
<field name="statement_id" readonly="1"/>
<field name="statement_id"/>
<field name="ref" readonly="1"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="type" on_change="onchange_type(partner_id, type)"/>
<field name="account_id" domain="[('journal_id','=',journal_id)]"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '&lt;&gt;', 'view')]"/>
<field name="account_id"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('type', '&lt;&gt;', 'view')]"/>
<field name="amount" readonly="1" sum="Total Amount"/>
<field name="globalisation_id" string="Glob. Id"/>
<field name="globalisation_amount" string="Glob. Am."/>
@@ -100,8 +100,8 @@
<field name="ref" readonly="0"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="type" on_change="onchange_type(partner_id, type)"/>
<field domain="[('journal_id', '=', journal_id), ('type', '&lt;&gt;', 'view')]" name="account_id"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '&lt;&gt;', 'view')]"/>
<field domain="[('type', '&lt;&gt;', 'view')]" name="account_id"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('type', '&lt;&gt;', 'view')]"/>
<field name="amount"/>
<field name="globalisation_id"/>
<field name="sequence" readonly="0"/>
+12 -1
View File
@@ -220,7 +220,18 @@
<menuitem parent="next_id_31"
id="menu_act_crossovered_budget_view"
action="act_crossovered_budget_view" sequence="1" />
<record id="view_crossovered_budget_line_search" model="ir.ui.view">
<field name="name">account.budget.line.search</field>
<field name="model">crossovered.budget.lines</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Budget Lines">
<field name="analytic_account_id"/>
</search>
</field>
</record>
<record model="ir.ui.view" id="view_crossovered_budget_line_tree">
<field name="name">crossovered.budget.line.tree</field>
<field name="model">crossovered.budget.lines</field>
@@ -43,6 +43,18 @@
<field eval="True" name="required"/>
<field eval="2" name="sequence"/>
</record>
<record id="sequence_journal" model="ir.sequence.type">
<field name="name">Account Journal</field>
<field name="code">account.journal</field>
</record>
<record id="sequence_journal_seq" model="ir.sequence">
<field name="name">Account journal sequence</field>
<field name="code">account.journal</field>
<field name="prefix">AJ</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
</record>
</data>
</openerp>
+45 -20
View File
@@ -267,6 +267,7 @@ class account_voucher(osv.osv):
_order = "date desc, id desc"
# _rec_name = 'number'
_columns = {
'active': fields.boolean('Active', help="By default, reconciliation vouchers made on draft bank statements are set as inactive, which allow to hide the customer/supplier payment while the bank statement isn't confirmed."),
'type':fields.selection([
('sale','Sale'),
('purchase','Purchase'),
@@ -328,6 +329,7 @@ class account_voucher(osv.osv):
'is_multi_currency': fields.boolean('Multi Currency Voucher', help='Fields with internal purpose only that depicts if the voucher is a multi currency one or not'),
}
_defaults = {
'active': True,
'period_id': _get_period,
'partner_id': _get_partner,
'journal_id':_get_journal,
@@ -381,8 +383,9 @@ class account_voucher(osv.osv):
total_tax = 0.0
if not tax[0].price_include:
for tax_line in tax_pool.compute_all(cr, uid, tax, voucher_amount, 1).get('taxes', []):
total_tax += tax_line.get('amount', 0.0)
for line in voucher.line_ids:
for tax_line in tax_pool.compute_all(cr, uid, tax, line.amount, 1).get('taxes', []):
total_tax += tax_line.get('amount', 0.0)
total += total_tax
else:
for line in voucher.line_ids:
@@ -413,31 +416,31 @@ class account_voucher(osv.osv):
line_ids = resolve_o2m_operations(cr, uid, line_pool, line_ids, ["amount"], context)
total_tax = 0.0
for line in line_ids:
line_amount = 0.0
line_amount = line.get('amount',0.0)
if tax_id:
tax = [tax_pool.browse(cr, uid, tax_id, context=context)]
if partner_id:
partner = partner_pool.browse(cr, uid, partner_id, context=context) or False
taxes = position_pool.map_tax(cr, uid, partner and partner.property_account_position or False, tax)
tax = tax_pool.browse(cr, uid, taxes, context=context)
if not tax[0].price_include:
for tax_line in tax_pool.compute_all(cr, uid, tax, line_amount, 1).get('taxes', []):
total_tax += tax_line.get('amount')
voucher_total += line_amount
total = voucher_total
total_tax = 0.0
if tax_id:
tax = [tax_pool.browse(cr, uid, tax_id, context=context)]
if partner_id:
partner = partner_pool.browse(cr, uid, partner_id, context=context) or False
taxes = position_pool.map_tax(cr, uid, partner and partner.property_account_position or False, tax)
tax = tax_pool.browse(cr, uid, taxes, context=context)
if not tax[0].price_include:
for tax_line in tax_pool.compute_all(cr, uid, tax, voucher_total, 1).get('taxes', []):
total_tax += tax_line.get('amount')
total += total_tax
total = voucher_total + total_tax
res.update({
'amount':total or voucher_total,
'tax_amount':total_tax
'amount': total or voucher_total,
'tax_amount': total_tax
})
return {
'value':res
'value': res
}
def onchange_term_id(self, cr, uid, ids, term_id, amount):
@@ -953,6 +956,9 @@ class account_voucher(osv.osv):
if voucher_brw.number:
name = voucher_brw.number
elif voucher_brw.journal_id.sequence_id:
if not voucher_brw.journal_id.sequence_id.active:
raise osv.except_osv(_('Configuration Error !'),
_('Please activate the sequence of selected journal !'))
name = seq_obj.next_by_id(cr, uid, voucher_brw.journal_id.sequence_id.id, context=context)
else:
raise osv.except_osv(_('Error!'),
@@ -1504,6 +1510,15 @@ account_voucher_line()
class account_bank_statement(osv.osv):
_inherit = 'account.bank.statement'
def button_confirm_bank(self, cr, uid, ids, context=None):
voucher_obj = self.pool.get('account.voucher')
voucher_ids = []
for statement in self.browse(cr, uid, ids, context=context):
voucher_ids += [line.voucher_id.id for line in statement.line_ids if line.voucher_id]
if voucher_ids:
voucher_obj.write(cr, uid, voucher_ids, {'active': True}, context=context)
return super(account_bank_statement, self).button_confirm_bank(cr, uid, ids, context=context)
def button_cancel(self, cr, uid, ids, context=None):
voucher_obj = self.pool.get('account.voucher')
for st in self.browse(cr, uid, ids, context=context):
@@ -1539,6 +1554,16 @@ account_bank_statement()
class account_bank_statement_line(osv.osv):
_inherit = 'account.bank.statement.line'
def onchange_partner_id(self, cr, uid, ids, partner_id, context=None):
res = super(account_bank_statement_line, self).onchange_partner_id(cr, uid, ids, partner_id, context=context)
if 'value' not in res:
res['value'] = {}
res['value'].update({'voucher_id' : False})
return res
def onchange_amount(self, cr, uid, ids, amount, context=None):
return {'value' : {'voucher_id' : False}}
def _amount_reconciled(self, cursor, user, ids, name, args, context=None):
if not ids:
return {}
@@ -1565,7 +1590,7 @@ class account_bank_statement_line(osv.osv):
_columns = {
'amount_reconciled': fields.function(_amount_reconciled,
string='Amount reconciled', type='float'),
'voucher_id': fields.many2one('account.voucher', 'Payment'),
'voucher_id': fields.many2one('account.voucher', 'Reconciliation'),
}
def unlink(self, cr, uid, ids, context=None):
@@ -7,12 +7,10 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">eInvoicing &amp; Payments application installed!</field>
<field name="body"><![CDATA[
OpenERP's electronic invoicing accelerates the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.
<p>You can track customer payments easily and automate follow-ups. You get an overview of the discussion with your customers on each invoice for easier traceability. For advanced accounting features, you should install the "Accounting and Finance" module.</p>
]]></field>
<field name="body"><![CDATA[<p>OpenERP's electronic invoicing accelerates the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.</p>
<p>You can track customer payments easily and automate follow-ups. You get an overview of the discussion with your customers on each invoice for easier traceability. For advanced accounting features, you should install the "Accounting and Finance" module.</p>]]></field>
</record>
<!-- mail: subtypes -->
@@ -200,33 +200,29 @@
<field name="arch" type="xml">
<xpath expr="//div[@name='import_buttons']" position="inside">
<button name="%(action_view_account_statement_from_invoice_lines)d"
string="Import Invoices" type="action" icon="gtk-execute"
string="Import Invoices" type="action"
attrs="{'invisible':[('state','=','confirm')]}"/>
</xpath>
</field>
</record>
<record id="view_bank_statement_tree_voucher" model="ir.ui.view">
<record id="view_bank_statement_form_voucher" model="ir.ui.view">
<field name="name">account.bank.statement.voucher.tree.inherit</field>
<field name="model">account.bank.statement</field>
<field name="inherit_id" ref="account.view_bank_statement_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/tree/field[@name='amount']" position="after">
<field name="voucher_id" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name}"/>
<field name="voucher_id" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False}"/>
</xpath>
<xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/form/group/field[@name='sequence']" position="before">
<field name="voucher_id" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False}"/>
</xpath>
<field name="amount" position="attributes">
<attribute name="on_change">onchange_amount(amount)</attribute>
</field>
</field>
</record>
<record id="view_bank_statement_form_voucher" model="ir.ui.view">
<field name="name">account.bank.statement.voucher.form.inherit</field>
<field name="model">account.bank.statement</field>
<field name="inherit_id" ref="account.view_bank_statement_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/form/group/field[@name='sequence']" position="before">
<field name="voucher_id" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name}"/>
</xpath>
</field>
</record>
<record id="view_cash_statement_tree_voucher" model="ir.ui.view">
<field name="name">account.cash.statement.voucher.tree.inherit</field>
<field name="model">account.bank.statement</field>
@@ -392,35 +392,33 @@
<field name="model">account.voucher</field>
<field name="arch" type="xml">
<form string="Receipt" version="7.0">
<header>
<button name="proforma_voucher" string="Validate" states="draft" invisible="context.get('line_type', False)" class="oe_highlight"/>
<button name="cancel_voucher" string="Cancel" states="draft,proforma" invisible="context.get('line_type', False)"/>
<button name="cancel_voucher" string="Unreconcile" type="object" states="posted" invisible="context.get('line_type', False)" confirm="Are you sure to unreconcile and cancel this record ?"/>
<button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft" invisible="context.get('line_type', False)"/>
<header invisible="context.get('line_type', False)">
<button name="proforma_voucher" string="Validate" states="draft" class="oe_highlight"/>
<button name="cancel_voucher" string="Cancel" states="draft,proforma"/>
<button name="cancel_voucher" string="Unreconcile" type="object" states="posted" confirm="Are you sure to unreconcile and cancel this record ?"/>
<button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft"/>
<field name="state" widget="statusbar" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/>
</header>
<sheet>
<h1 attrs="{'invisible': [('number','=',False)]}"><field name="number"/></h1>
<group>
<group invisible="context.get('line_type', False)">
<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" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
<field name="currency_id" invisible="1"/>
<field name="amount" class="oe_inline"
string="Paid Amount"
widget="monetary" options="{'currency_field': 'currency_id'}"
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)"/>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
invisible="context.get('line_type', False)"
widget="selection"
on_change="onchange_journal(journal_id, line_cr_ids, False, partner_id, date, amount, type, company_id, context)"
string="Payment Method"/>
</group>
<group>
<field name="date" invisible="context.get('line_type', False)" on_change="onchange_date(date, currency_id, payment_rate_currency_id, amount, company_id, context)"/>
<field name="reference" invisible="context.get('line_type', False)" string="Payment Ref" placeholder="e.g. 003/10"/>
<field name="name" colspan="2" invisible="context.get('line_type', False)" placeholder="e.g. Invoice SAJ/0042"/>
<field name="date" on_change="onchange_date(date, currency_id, payment_rate_currency_id, amount, company_id, context)"/>
<field name="reference" string="Payment Ref" placeholder="e.g. 003/10"/>
<field name="name" colspan="2" placeholder="e.g. Invoice SAJ/0042"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<field name="account_id"
@@ -432,7 +430,7 @@
</group>
<notebook>
<page string="Payment Information" groups="base.group_user">
<label for="line_cr_ids"/>
<label for="line_cr_ids" invisible="context.get('line_type', False)"/>
<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">
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
@@ -513,7 +511,7 @@
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<div class="oe_chatter" invisible="context.get('line_type', False)">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
</div>
@@ -50,7 +50,7 @@
<field name="res_model">account.voucher</field>
<field name="view_type">form</field>
<field name="domain">[('journal_id.type', 'in', ['bank', 'cash']), ('type','=','receipt'), ('partner_id','=',partner_id)]</field>
<field name="context">{'type':'receipt', 'partner_id': partner_id, 'default_reference':reference}</field>
<field name="context">{'default_type':'receipt', 'type':'receipt', 'partner_id': partner_id, 'default_reference':reference}</field>
<field name="view_id" ref="view_vendor_receipt_form"/>
<field name="target">current</field>
</record>
+1 -1
View File
@@ -327,7 +327,7 @@ class account_analytic_line(osv.osv):
'date': fields.date('Date', required=True, select=True),
'amount': fields.float('Amount', required=True, help='Calculated by multiplying the quantity and the price given in the Product\'s cost price. Always expressed in the company main currency.', digits_compute=dp.get_precision('Account')),
'unit_amount': fields.float('Quantity', help='Specifies the amount of quantity to count.'),
'account_id': fields.many2one('account.analytic.account', 'Analytic Account', required=True, ondelete='cascade', select=True, domain=[('type','<>','view')]),
'account_id': fields.many2one('account.analytic.account', 'Analytic Account', required=True, ondelete='restrict', select=True, domain=[('type','<>','view')]),
'user_id': fields.many2one('res.users', 'User'),
'company_id': fields.related('account_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
+13 -2
View File
@@ -346,8 +346,13 @@ class audittrail_objects_proxy(object_proxy):
x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False
assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj))
x2m_model = pool.get('ir.model').browse(cr, SUPERUSER_ID, x2m_model_id)
#recursive call on x2m fields that need to be checked too
data.update(self.get_data(cr, SUPERUSER_ID, pool, resource[field], x2m_model, method))
field_resource_ids = list(set(resource[field]))
if model.model == x2m_model.model:
# we need to remove current resource_id from the many2many to prevent an infinit loop
if resource_id in field_resource_ids:
field_resource_ids.remove(resource_id)
data.update(self.get_data(cr, SUPERUSER_ID, pool, field_resource_ids, x2m_model, method))
data[(model.id, resource_id)] = {'text':values_text, 'value': values}
return data
@@ -388,6 +393,8 @@ class audittrail_objects_proxy(object_proxy):
}
# loop on all the fields
for field_name, field_definition in pool.get(model.model)._all_columns.items():
if field_name in ('__last_update', 'id'):
continue
#if the field_list param is given, skip all the fields not in that list
if field_list and field_name not in field_list:
continue
@@ -406,6 +413,10 @@ class audittrail_objects_proxy(object_proxy):
x2m_new_values_ids = new_values.get(key, {'value': {}})['value'].get(field_name, [])
# We use list(set(...)) to remove duplicates.
res_ids = list(set(x2m_old_values_ids + x2m_new_values_ids))
if model.model == x2m_model.model:
# we need to remove current resource_id from the many2many to prevent an infinit loop
if resource_id in res_ids:
res_ids.remove(resource_id)
for res_id in res_ids:
lines.update(self.prepare_audittrail_log_line(cr, SUPERUSER_ID, pool, x2m_model, res_id, method, old_values, new_values, field_list))
# if the value value is different than the old value: record the change
+1 -1
View File
@@ -99,7 +99,7 @@
<field name="res_id" readonly="1"/>
<field name="object_id" readonly="1"/>
</group>
<field name="line_ids" mode="tree,form"
<field name="line_ids" mode="tree"
widget="one2many_list" readonly="1">
<form string="Log Lines" version="7.0">
<group col="4">
@@ -4,11 +4,11 @@ openerp.auth_anonymous = function(instance) {
start: function() {
var self = this;
return $.when(this._super()).then(function() {
var dblist = self._db_list || [];
var dblist = self.db_list || [];
if (!self.session.session_is_valid() && dblist.length === 1) {
self.remember_credentials = false;
// XXX get login/pass from server (via a rpc call) ?
return self.do_login(dblist[0], 'anonymous', 'anonymous')
return self.do_login(dblist[0], 'anonymous', 'anonymous');
}
});
@@ -41,7 +41,7 @@ openerp.auth_signup = function(instance) {
on_token_loaded: function(result) {
// select the right the database
this.selected_db = result.db;
this.on_db_loaded({db_list: [result.db]});
this.on_db_loaded([result.db]);
if (result.token) {
// switch to signup mode, set user name and login
this.$el.addClass("oe_login_signup");
@@ -80,16 +80,16 @@ openerp.auth_signup = function(instance) {
this.do_warn("Login", "No database selected !");
return false;
} else if (!name) {
this.do_warn("Login", "Please enter a name.")
this.do_warn("Login", "Please enter a name.");
return false;
} else if (!login) {
this.do_warn("Login", "Please enter a username.")
this.do_warn("Login", "Please enter a username.");
return false;
} else if (!password || !confirm_password) {
this.do_warn("Login", "Please enter a password and confirm it.")
this.do_warn("Login", "Please enter a password and confirm it.");
return false;
} else if (password !== confirm_password) {
this.do_warn("Login", "Passwords do not match; please retype them.")
this.do_warn("Login", "Passwords do not match; please retype them.");
return false;
}
var params = {
+1 -1
View File
@@ -221,7 +221,7 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
<field name="message_ids" widget="mail_thread" placeholder="Share a message..."/>
</div>
</form>
</field>
+14
View File
@@ -201,6 +201,20 @@ class users(osv.osv):
# Return early if no one has a login name like that.
return False
# Check if the authentification is made with OpenID. In this case, don't encrypt the password
cr.execute('SELECT id FROM ir_module_module WHERE name = \'auth_openid\' and state = \'installed\'')
if cr.rowcount:
cr.execute( 'SELECT password, id FROM res_users WHERE login=%s AND openid_key = %s AND active',
(login.encode('utf-8'),password.encode('utf-8')))
if cr.rowcount:
# Check if the encrypted password matches against the one in the db.
cr.execute("""UPDATE res_users SET login_date=now() AT TIME ZONE 'UTC' WHERE id=%s AND openid_key=%s AND active RETURNING id""",
(int(id), password.encode('utf-8')))
res = cr.fetchone()
cr.commit()
if res:
return res[0]
stored_pw = self.maybe_encrypt(cr, stored_pw, id)
if not stored_pw:
+4 -2
View File
@@ -99,6 +99,8 @@ class res_partner_bank(osv.osv):
@param iban: IBAN as string
@return: True if IBAN is valid, False otherwise
"""
if not iban:
return False
iban = _format_iban(iban).lower()
if iban[:2] in _ref_iban and len(iban) != len(_format_iban(_ref_iban[iban[:2]])):
return False
@@ -128,9 +130,9 @@ class res_partner_bank(osv.osv):
def _construct_constraint_msg(self, cr, uid, ids, context=None):
def default_iban_check(iban_cn):
return iban_cn[0] in string.ascii_lowercase and iban_cn[1] in string.ascii_lowercase
return iban_cn and iban_cn[0] in string.ascii_lowercase and iban_cn[1] in string.ascii_lowercase
iban_country = self.browse(cr, uid, ids)[0].acc_number[:2].lower()
iban_country = self.browse(cr, uid, ids)[0].acc_number and self.browse(cr, uid, ids)[0].acc_number[:2].lower()
if default_iban_check(iban_country):
if iban_country in _ref_iban:
return _('The IBAN does not seem to be correct. You should have entered something like this %s'), \
+2 -1
View File
@@ -24,7 +24,7 @@ Re-implement openerp's file import system:
'category': 'Uncategorized',
'website': 'http://www.openerp.com',
'author': 'OpenERP SA',
'depends': ['base'],
'depends': ['web'],
'installable': True,
'auto_install': False,
'css': [
@@ -37,4 +37,5 @@ Re-implement openerp's file import system:
'static/src/js/import.js',
],
'qweb': ['static/src/xml/import.xml'],
'test': ['static/test/states.js'],
}
+6
View File
@@ -0,0 +1,6 @@
$(document).ready(function () {
module('foo');
test('dummy', function () {
ok(42);
});
});
-1
View File
@@ -44,7 +44,6 @@ Shows you a list of applications features to install from.
'installable': True,
'auto_install': False,
'images': ['images/base_setup1.jpeg','images/base_setup2.jpeg','images/base_setup3.jpeg','images/base_setup4.jpeg',],
'js': ['static/src/js/base_setup.js'],
'css': ['static/src/css/base_setup.css'],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+30
View File
@@ -0,0 +1,30 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2012-11-13 16:00+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-11-14 04:40+0000\n"
"X-Generator: Launchpad (build 16251)\n"
#. module: base_tools
#: model:ir.module.module,shortdesc:base_tools.module_meta_information
msgid "Common base for tools modules"
msgstr ""
#. module: base_tools
#: model:ir.module.module,description:base_tools.module_meta_information
msgid ""
"\n"
" "
msgstr ""
+23
View File
@@ -0,0 +1,23 @@
# Lithuanian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-11-15 13:45+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Lithuanian <lt@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-11-16 04:36+0000\n"
"X-Generator: Launchpad (build 16272)\n"
#. module: claim_from_delivery
#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery
msgid "Claim"
msgstr ""
-2
View File
@@ -115,7 +115,6 @@ class crm_case_section(osv.osv):
'code': fields.char('Code', size=8),
'active': fields.boolean('Active', help="If the active field is set to "\
"true, it will allow you to hide the sales team without removing it."),
'allow_unlink': fields.boolean('Allow Delete', help="Allows to delete non draft cases"),
'change_responsible': fields.boolean('Reassign Escalated', help="When escalating to this team override the salesman with the team leader."),
'user_id': fields.many2one('res.users', 'Team Leader'),
'member_ids':fields.many2many('res.users', 'sale_member_rel', 'section_id', 'member_id', 'Team Members'),
@@ -137,7 +136,6 @@ class crm_case_section(osv.osv):
_defaults = {
'active': 1,
'allow_unlink': 1,
'stage_ids': _get_stage_common,
'alias_domain': False, # always hide alias during creation
}
+1 -1
View File
@@ -79,7 +79,7 @@ class base_action_rule(osv.osv):
write['section_id'] = action.act_section_id.id
if hasattr(action, 'act_categ_id') and action.act_categ_id:
write['categ_ids'] = [4, action.act_categ_id.id]
write['categ_ids'] = [(4, action.act_categ_id.id)]
model_obj.write(cr, uid, [obj.id], write, context)
return res
+3 -2
View File
@@ -58,9 +58,10 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">CRM application installed!</field>
<field name="body">From the top Sales menu you can track leads and opportunities, get accurate forecast on your sales pipeline, plan meetings and phonecalls, get realtime statistics and efficiently organize the communication with your prospects.
To manage quotations and sale orders, install the "Sales Management" application.</field>
<field name="body"><![CDATA[<p>From the top Sales menu you can track leads and opportunities, get accurate forecast on your sales pipeline, plan meetings and phonecalls, get realtime statistics and efficiently organize the communication with your prospects.</p>
<p>To manage quotations and sale orders, install the "Sales Management" application.</p>]]></field>
</record>
<record model="mail.alias" id="default_sales_alias">
-8
View File
@@ -779,14 +779,6 @@ class crm_lead(base_stage, format_address, osv.osv):
}
return res
def unlink(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context):
if (not lead.section_id.allow_unlink) and (lead.state != 'draft'):
raise osv.except_osv(_('Error!'),
_("You cannot delete lead '%s' because it is not in 'Draft' state. " \
"You can still cancel it, instead of deleting it.") % lead.name)
return super(crm_lead, self).unlink(cr, uid, ids, context)
def write(self, cr, uid, ids, vals, context=None):
if vals.get('stage_id') and not vals.get('probability'):
# change probability of lead(s) if required by stage
+15 -16
View File
@@ -24,9 +24,9 @@
parent="base.menu_base_config" sequence="45" groups="base.group_sale_salesman"/>
<menuitem id="base.next_id_64" name="Sales"
parent="base.menu_reporting" sequence="1" />
parent="base.menu_reporting" sequence="1"/>
<menuitem id="base.menu_sales_configuration_misc" name="Miscellaneous" parent="base.menu_base_config" sequence="75"/>
<menuitem id="base.menu_sales_configuration_misc" name="Miscellaneous" parent="base.menu_base_config" sequence="81"/>
<!-- crm.case.channel -->
@@ -86,7 +86,7 @@
<field name="parent_id"/>
<field name="code"/>
</group>
<group>
<field name="user_id"/>
<field name="resource_calendar_id"/>
@@ -102,7 +102,6 @@
<field name="alias_name" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" class="oe_inline"/>
</div>
<field name="change_responsible"/>
<field name="allow_unlink"/>
</group>
<separator string="Team Members"/>
<field name="member_ids" widget="many2many_kanban">
@@ -163,7 +162,7 @@
<field name="view_id" ref="crm_case_section_view_tree"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to define a new sales team.
Click to define a new sales team.
</p><p>
Use sales team to organize your different salespersons or
departments into separate teams. Each team will work in
@@ -203,7 +202,7 @@
<form string="Stage" version="7.0">
<group col="4">
<field name="name"/>
<field name="state" />
<field name="state"/>
<field name="probability"/>
<field name="type"/>
<field name="on_change"/>
@@ -228,7 +227,7 @@
</record>
<!-- Case Categories Form View -->
<!-- Case Categories Form View -->
<record id="crm_case_categ-view" model="ir.ui.view">
<field name="name">crm.case.categ.form</field>
@@ -238,7 +237,7 @@
<group>
<field name="name"/>
<field name="section_id"/>
<field name="object_id" invisible="1" />
<field name="object_id" invisible="1"/>
</group>
</form>
</field>
@@ -297,7 +296,7 @@
<menuitem action="crm_case_resource_type_act"
id="menu_crm_case_resource_type_act" sequence="4"
groups="base.group_no_one"
parent="base.menu_crm_config_lead" />
parent="base.menu_crm_config_lead"/>
<record id="crm_case_section_act_tree" model="ir.actions.act_window">
<field name="name">Cases by Sales Team</field>
@@ -354,13 +353,13 @@
<button name="process_start"
states="not running"
string="Compute Segmentation" type="object"
icon="gtk-execute" />
icon="gtk-execute"/>
<button name="process_stop" states="running"
string="Stop Process" type="object"
icon="gtk-cancel" />
icon="gtk-cancel"/>
<button name="process_continue" states="running"
string="Continue Process" type="object"
icon="gtk-go-forward" />
icon="gtk-go-forward"/>
<field name="state" widget="statusbar"/>
</header>
<group col="4">
@@ -412,7 +411,7 @@
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to define a new customer segmentation.
Click to define a new customer segmentation.
</p><p>
Create specific categories which you can assign to your
contacts to better manage your interactions with them. The
@@ -425,7 +424,7 @@
<menuitem action="crm_segmentation_tree-act"
id="menu_crm_segmentation-act"
groups="base.group_no_one" sequence="15"
parent="base.menu_base_config" />
parent="base.menu_base_config"/>
<!-- menu for the working time -->
<menuitem action="resource.action_resource_calendar_form" id="menu_action_resource_calendar_form" parent="resource.menu_resource_config" sequence="1"/>
@@ -466,11 +465,11 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem action="action_crm_payment_mode"
id="menu_crm_payment_mode_act"
groups="base.group_no_one"
name="Payment Modes"
parent="base.menu_crm_config_lead" />
parent="base.menu_crm_config_lead"/>
</data>
</openerp>
+1 -1
View File
@@ -52,7 +52,7 @@
<!-- Claim Stages -->
<menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
<menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/>
<menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="base.menu_project_config_project" sequence="20"/>
<menuitem id="menu_claim_stage_view" name="Stages" action="crm_claim_stage_act" parent="menu_config_claim" sequence="20"/>
</data>
</openerp>
+1 -1
View File
@@ -168,7 +168,7 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
<field name="message_ids" widget="mail_thread" placeholder="Share a note..."/>
</div>
</form>
</field>
+1 -1
View File
@@ -95,7 +95,7 @@
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_ids" widget="mail_thread"/>
<field name="message_ids" widget="mail_thread" placeholder="Share a note..."/>
<field name="message_follower_ids" widget="mail_followers"/>
</div>
</form>
+1
View File
@@ -823,6 +823,7 @@ class node_res_dir(node_class):
uid = self.context.uid
ctx = self.context.context.copy()
ctx.update(self.dctx)
ctx.update(self.context.extra_ctx)
where = []
if self.domain:
app = safe_eval(self.domain, ctx)
@@ -272,7 +272,7 @@ class abstracted_fs(object):
if path.startswith('/'):
path = path[1:]
p_parts = path.split('/') # hard-code the unix sep here, by spec.
p_parts = path.split(os.sep)
assert '..' not in p_parts
@@ -43,7 +43,7 @@ class showdiff(osv.osv_memory):
elif len(ids) == 1:
old = history.browse(cr, uid, ids[0])
nids = history.search(cr, uid, [('document_id', '=', old.document_id.id)])
nids = history.search(cr, uid, [('page_id', '=', old.page_id.id)])
nids.sort()
diff = history.getDiff(cr, uid, ids[0], nids[-1])
else:
+2 -1
View File
@@ -51,9 +51,10 @@ class document_davdir(osv.osv):
# that might be not worth preparing.
nctx.extra_ctx['webdav_path'] = '/'+config.get_misc('webdav','vdir','webdav')
usr_obj = self.pool.get('res.users')
res = usr_obj.read(cr, uid, uid, ['login'])
res = usr_obj.read(cr, uid, uid, ['login','lang'])
if res:
nctx.extra_ctx['username'] = res['login']
nctx.extra_ctx['lang'] = res['lang']
# TODO group
return
+5 -6
View File
@@ -28,8 +28,6 @@ from osv import osv
from osv import fields
import tools
from tools.translate import _
from tools.html_sanitize import html_sanitize
from tools import append_content_to_html
from urllib import quote as quote
_logger = logging.getLogger(__name__)
@@ -118,7 +116,8 @@ class email_template(osv.osv):
"of the message"),
'subject': fields.char('Subject', translate=True, help="Subject (placeholders may be used here)",),
'email_from': fields.char('From', help="Sender address (placeholders may be used here)"),
'email_to': fields.char('To', help="Comma-separated recipient addresses (placeholders may be used here)"),
'email_to': fields.char('To (Emails)', help="Comma-separated recipient addresses (placeholders may be used here)"),
'email_recipients': fields.char('To (Partners)', help="Comma-separated ids of recipient partners (placeholders may be used here)"),
'email_cc': fields.char('Cc', help="Carbon copy recipients (placeholders may be used here)"),
'reply_to': fields.char('Reply-To', help="Preferred response address (placeholders may be used here)"),
'mail_server_id': fields.many2one('ir.mail_server', 'Outgoing Mail Server', readonly=False,
@@ -286,16 +285,16 @@ class email_template(osv.osv):
template = self.get_email_template(cr, uid, template_id, res_id, context)
values = {}
for field in ['subject', 'body_html', 'email_from',
'email_to', 'email_cc', 'reply_to']:
'email_to', 'email_recipients', 'email_cc', 'reply_to']:
values[field] = self.render_template(cr, uid, getattr(template, field),
template.model, res_id, context=context) \
or False
if template.user_signature:
signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature
values['body_html'] = append_content_to_html(values['body_html'], signature)
values['body_html'] = tools.append_content_to_html(values['body_html'], signature)
if values['body_html']:
values['body'] = html_sanitize(values['body_html'])
values['body'] = tools.html_sanitize(values['body_html'])
values.update(mail_server_id=template.mail_server_id.id or False,
auto_delete=template.auto_delete,
@@ -29,7 +29,8 @@
<group>
<group string="Addressing">
<field name="email_from" required="1"/>
<field name="email_to" required="1"/>
<field name="email_to"/>
<field name="email_recipients"/>
<field name="email_cc"/>
<field name="reply_to"/>
<field name="user_signature"/>
@@ -77,6 +78,7 @@
<field name="subject"/>
<field name="email_from"/>
<field name="email_to"/>
<field name="email_recipients"/>
<field name="report_name"/>
</tree>
</field>
+44 -12
View File
@@ -20,10 +20,10 @@
##############################################################################
import base64
from openerp.addons.mail.tests import test_mail
from openerp.addons.mail.tests import test_mail_mockup
class test_message_compose(test_mail.TestMailMockups):
class test_message_compose(test_mail_mockup.TestMailMockups):
def setUp(self):
super(test_message_compose, self).setUp()
@@ -52,8 +52,8 @@ class test_message_compose(test_mail.TestMailMockups):
# Mail data
_subject1 = 'Pigs'
_subject2 = 'Bird'
_body_html1 = 'Fans of Pigs, unite !\n<pre>Admin</pre>\n'
_body_html2 = 'I am angry !\n<pre>Admin</pre>\n'
_body_html1 = 'Fans of Pigs, unite !\n<p>Admin</p>\n'
_body_html2 = 'I am angry !\n<p>Admin</p>\n'
_attachments = [
{'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment')},
{'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment')}
@@ -63,11 +63,16 @@ class test_message_compose(test_mail.TestMailMockups):
# Create template on mail.group, with attachments
group_model_id = self.registry('ir.model').search(cr, uid, [('model', '=', 'mail.group')])[0]
email_template = self.registry('email.template')
email_template_id = email_template.create(cr, uid, {'model_id': group_model_id,
'name': 'Pigs Template', 'subject': '${object.name}',
'body_html': '${object.description}', 'user_signature': True,
email_template_id = email_template.create(cr, uid, {
'model_id': group_model_id,
'name': 'Pigs Template',
'subject': '${object.name}',
'body_html': '${object.description}',
'user_signature': True,
'attachment_ids': [(0, 0, _attachments[0]), (0, 0, _attachments[1])],
'email_to': 'b@b.b c@c.c', 'email_cc': 'd@d.d'})
'email_to': 'b@b.b c@c.c',
'email_cc': 'd@d.d'
})
# ----------------------------------------
# CASE1: comment and save as template
@@ -76,9 +81,9 @@ class test_message_compose(test_mail.TestMailMockups):
# 1. Comment on pigs
compose_id = mail_compose.create(cr, uid,
{'subject': 'Forget me subject', 'body': '<p>Dummy body</p>'},
{'default_composition_mode': 'comment', 'default_model': 'mail.group',
{'default_composition_mode': 'comment',
'default_model': 'mail.group',
'default_res_id': self.group_pigs_id,
'default_template_id': email_template_id,
'active_ids': [self.group_pigs_id, self.group_bird_id]})
compose = mail_compose.browse(cr, uid, compose_id)
@@ -97,8 +102,10 @@ class test_message_compose(test_mail.TestMailMockups):
# 1. Comment on pigs
compose_id = mail_compose.create(cr, uid,
{'subject': 'Forget me subject', 'body': 'Dummy body'},
{'default_composition_mode': 'comment', 'default_model': 'mail.group',
{'default_composition_mode': 'comment',
'default_model': 'mail.group',
'default_res_id': self.group_pigs_id,
'default_use_template': False,
'default_template_id': email_template_id,
'active_ids': [self.group_pigs_id, self.group_bird_id]})
compose = mail_compose.browse(cr, uid, compose_id)
@@ -135,8 +142,10 @@ class test_message_compose(test_mail.TestMailMockups):
# 1. Mass_mail on pigs and bird, with a default_partner_ids set to check he is correctly added
compose_id = mail_compose.create(cr, uid,
{'subject': 'Forget me subject', 'body': 'Dummy body'},
{'default_composition_mode': 'mass_mail', 'default_model': 'mail.group',
{'default_composition_mode': 'mass_mail',
'default_model': 'mail.group',
'default_res_id': self.group_pigs_id,
'default_use_template': False,
'default_template_id': email_template_id,
'default_partner_ids': [p_a_id],
'active_ids': [self.group_pigs_id, self.group_bird_id]})
@@ -170,3 +179,26 @@ class test_message_compose(test_mail.TestMailMockups):
partner_ids = self.res_partner.search(cr, uid, [('email', 'in', ['b@b.b', 'c@c.c', 'd@d.d'])])
self.assertEqual(set(message_pigs_pids), set(partner_ids), 'mail.message on pigs incorrect number of notified_partner_ids')
self.assertEqual(set(message_bird_pids), set(partner_ids), 'mail.message on bird notified_partner_ids incorrect')
# ----------------------------------------
# CASE4: test newly introduced email_recipients field
# ----------------------------------------
# get already-created partners back
p_b_id = self.res_partner.search(cr, uid, [('email', '=', 'b@b.b')])[0]
p_c_id = self.res_partner.search(cr, uid, [('email', '=', 'c@c.c')])[0]
p_d_id = self.res_partner.search(cr, uid, [('email', '=', 'd@d.d')])[0]
# modify template: use email_recipients, use template and email address in email_to to test all features together
user_model_id = self.registry('ir.model').search(cr, uid, [('model', '=', 'res.users')])[0]
email_template.write(cr, uid, [email_template_id], {
'model_id': user_model_id,
'body_html': '${object.login}',
'email_to': '${object.email} c@c',
'email_recipients': '%i,%i' % (p_b_id, p_c_id),
'email_cc': 'd@d',
})
# patner by email + partner by id (no double)
send_to = [p_a_id, p_b_id, p_c_id, p_d_id]
# Generate messsage with default email and partner on template
mail_value = mail_compose.generate_email_for_composer(cr, uid, email_template_id, uid)
self.assertEqual(set(mail_value['partner_ids']), set(send_to), 'mail.message partner_ids list created by template is incorrect')
@@ -17,6 +17,7 @@
<group>
<field name="email_from" readonly="1"/>
<field name="email_to" readonly="1"/>
<field name="email_recipients" readonly="1"/>
<field name="email_cc" readonly="1" attrs="{'invisible':[('email_cc','=',False)]}"/>
<field name="reply_to" readonly="1" attrs="{'invisible':[('reply_to','=',False)]}"/>
<field name="subject" readonly="1"/>
@@ -25,6 +25,21 @@ from osv import osv
from osv import fields
def _reopen(self, res_id, model):
return {'type': 'ir.actions.act_window',
'view_mode': 'form',
'view_type': 'form',
'res_id': res_id,
'res_model': self._name,
'target': 'new',
# save original model in context, because selecting the list of available
# templates requires a model in context
'context': {
'default_model': model,
},
}
class mail_compose_message(osv.TransientModel):
_inherit = 'mail.compose.message'
@@ -42,18 +57,17 @@ class mail_compose_message(osv.TransientModel):
else:
model = context.get('default_model', context.get('active_model'))
if model:
record_ids = email_template_obj.search(cr, uid, [('model', '=', model)], context=context)
return email_template_obj.name_get(cr, uid, record_ids, context) + [(False, '')]
return []
record_ids = email_template_obj.search(cr, uid, [('model', '=', model)], context=context)
return email_template_obj.name_get(cr, uid, record_ids, context) + [(False, '')]
def default_get(self, cr, uid, fields, context=None):
if context is None:
context = {}
result = super(mail_compose_message, self).default_get(cr, uid, fields, context=context)
result['template_id'] = context.get('default_template_id', context.get('mail.compose.template_id', False))
# pre-render the template if any
if result.get('use_template'):
if result.get('use_template') and result.get('template_id'):
onchange_res = self.onchange_use_template(cr, uid, [], result.get('use_template'), result.get('template_id'),
result.get('composition_mode'), result.get('model'), result.get('res_id'), context=context)
result.update(onchange_res['value'])
@@ -65,6 +79,10 @@ class mail_compose_message(osv.TransientModel):
'template_id': fields.selection(_get_templates, 'Template', size=-1),
}
_defaults = {
'use_template': True,
}
def onchange_template_id(self, cr, uid, ids, use_template, template_id, composition_mode, model, res_id, context=None):
""" - use_template not set: return default_get
- use_template set in mass_mailing: we cannot render, so return the template values
@@ -104,7 +122,7 @@ class mail_compose_message(osv.TransientModel):
onchange_res['partner_ids'] = [(4, partner_id) for partner_id in onchange_res.pop('partner_ids', [])]
onchange_res['attachment_ids'] = [(4, attachment_id) for attachment_id in onchange_res.pop('attachment_ids', [])]
record.write(onchange_res)
return True
return _reopen(self, record.id, record.model)
def onchange_use_template(self, cr, uid, ids, use_template, template_id, composition_mode, model, res_id, context=None):
""" onchange_use_template (values: True or False). If use_template is
@@ -136,8 +154,8 @@ class mail_compose_message(osv.TransientModel):
'attachment_ids': [(6, 0, [att.id for att in record.attachment_ids])]
}
template_id = email_template.create(cr, uid, values, context=context)
record.write({'template_id': template_id, 'use_template': True})
return True
record.write(record.onchange_template_id(True, template_id, record.composition_mode, record.model, record.res_id)['value'])
return _reopen(self, record.id, record.model)
#------------------------------------------------------
# Wizard validation and send
@@ -148,15 +166,23 @@ class mail_compose_message(osv.TransientModel):
mail.compose.message, transform email_cc and email_to into partner_ids """
template_values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context)
# filter template values
fields = ['body', 'body_html', 'subject', 'email_to', 'email_cc', 'attachments']
fields = ['body', 'body_html', 'subject', 'email_to', 'email_recipients', 'email_cc', 'attachments']
values = dict((field, template_values[field]) for field in fields if template_values.get(field))
values['body'] = values.pop('body_html', '')
# transform email_to, email_cc into partner_ids
values['partner_ids'] = []
mails = tools.email_split(values.pop('email_to', '') + ' ' + values.pop('email_cc', ''))
for mail in mails:
partner_id = self.pool.get('res.partner').find_or_create(cr, uid, mail, context=context)
values['partner_ids'].append(partner_id)
email_recipients = values.pop('email_recipients', '')
if email_recipients:
for partner_id in email_recipients.split(','):
values['partner_ids'].append(int(partner_id))
values['partner_ids'] = list(set(values['partner_ids']))
return values
def render_message(self, cr, uid, wizard, res_id, context=None):
@@ -8,23 +8,22 @@
<field name="inherit_id" ref="mail.email_compose_message_wizard_form"/>
<field name="arch" type="xml">
<data>
<xpath expr="//form/group" position="after">
<group attrs="{'invisible':[('use_template','=',False)]}">
<field name="use_template" invisible="1"
on_change="onchange_use_template(use_template, template_id, composition_mode, model, res_id, context)"/>
<field name="template_id"
on_change="onchange_template_id(use_template, template_id, composition_mode, model, res_id, context)"/>
</group>
<xpath expr="//field[@name='content_subtype']" position="after">
<field name="use_template" invisible="1"
on_change="onchange_use_template(use_template, template_id, composition_mode, model, res_id, context)"/>
</xpath>
<xpath expr="//form/footer/button" position="after">
<button icon="/email_template/static/src/img/email_template.png"
type="object" name="toggle_template" string=""
help="Use a message template"
attrs="{'invisible':[('content_subtype','!=','html')]}"/>
<button icon="/email_template/static/src/img/email_template_save.png"
type="object" name="save_as_template" string=""
help="Save as a new template"
attrs="{'invisible':[('content_subtype','!=','html')]}"/>
<xpath expr="//footer" position="inside">
<group class="oe_right" col="1">
<div attrs="{'invisible':[('use_template','=',False)]}">Use template
<field name="template_id" attrs="{'invisible':[('use_template','=',False)]}"
nolabel="1"
on_change="onchange_template_id(use_template, template_id, composition_mode, model, res_id, context)"/>
</div>
<button icon="/email_template/static/src/img/email_template_save.png"
type="object" name="save_as_template" string="Save as new template" class="oe_link"
help="Save as a new template"
attrs="{'invisible':[('content_subtype','!=','html')]}"/>
</group>
</xpath>
</data>
</field>
+2 -2
View File
@@ -205,7 +205,7 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
<field name="message_ids" widget="mail_thread" placeholder="Share a note..."/>
</div>
</form>
</field>
@@ -473,7 +473,7 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
<field name="message_ids" widget="mail_thread" placeholder="Share a note..."/>
</div>
</form>
</field>
+2
View File
@@ -14,11 +14,13 @@
border-bottom-left-radius:3px;
border-bottom-right-radius:3px;
font-size: 12px;
border-collapse: separate;
text-align: center;
font-weight: bold;
color: #8A89BA;
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
background-color: #FFFFFF;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}
.oe_event_month_year{
border-bottom-left-radius:3px;
+1 -1
View File
@@ -39,7 +39,7 @@ class sale_order_line(osv.osv):
_columns = {
'event_id': fields.many2one('event.event', 'Event', help="Choose an event and it will automatically create a registration for this event."),
#those 2 fields are used for dynamic domains and filled by onchange
'event_type_id': fields.related('event_type_id', type='many2one', relation="event.type", string="Event Type"),
'event_type_id': fields.related('product_id','event_type_id', type='many2one', relation="event.type", string="Event Type"),
'event_ok': fields.related('product_id', 'event_ok', string='event_ok', type='boolean'),
}
+5 -5
View File
@@ -243,20 +243,20 @@ class mail_mail(osv.osv):
def create(self, cr, uid, values, context=None):
if context is None:
context={}
context = {}
fetchmail_server_id = context.get('fetchmail_server_id')
if fetchmail_server_id:
values['fetchmail_server_id'] = fetchmail_server_id
res = super(mail_mail,self).create(cr, uid, values, context=context)
res = super(mail_mail, self).create(cr, uid, values, context=context)
return res
def write(self, cr, uid, ids, values, context=None):
if context is None:
context={}
context = {}
fetchmail_server_id = context.get('fetchmail_server_id')
if fetchmail_server_id:
values['fetchmail_server_id'] = server_id
res = super(mail_mail,self).write(cr, uid, ids, values, context=context)
values['fetchmail_server_id'] = fetchmail_server_id
res = super(mail_mail, self).write(cr, uid, ids, values, context=context)
return res
+1 -1
View File
@@ -720,7 +720,7 @@ class fleet_vehicle_log_contract(osv.Model):
'start_date': datetime.datetime.strftime(str_to_datetime(element.expiration_date) + datetime.timedelta(days=1), tools.DEFAULT_SERVER_DATE_FORMAT),
'expiration_date': datetime.datetime.strftime(enddate + diffdate, tools.DEFAULT_SERVER_DATE_FORMAT),
}
newid = super(fleet_vehicle_log_contract, self).copy(cr, uid, [element.id], default, context=context)
newid = super(fleet_vehicle_log_contract, self).copy(cr, uid, element.id, default, context=context)
mod, modid = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'fleet', 'fleet_vehicle_log_contract_form')
return {
'name':_("Renew Contract"),
+2 -2
View File
@@ -522,7 +522,7 @@
<field name="name">fleet.vehicle.odometer.tree</field>
<field name="model">fleet.vehicle.odometer</field>
<field name="arch" type="xml">
<tree string="Odometer Logs" version="7.0" editable="bottom">
<tree string="Odometer Logs" version="7.0" editable="top">
<field name="date" />
<field name="vehicle_id" on_change="on_change_vehicle(vehicle_id)"/>
<field name="value" />
@@ -563,7 +563,7 @@
<field name="name">Vehicles Odometer</field>
<field name="res_model">fleet.vehicle.odometer</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="view_mode">tree,graph</field>
<field name="context">{"search_default_groupby_vehicle" : True}</field>
<field name="help" type="html">
<p>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 22 KiB

+4
View File
@@ -158,6 +158,8 @@ class hr_employee(osv.osv):
return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context)
_columns = {
#we need a related field in order to be able to sort the employee by name
'name_related': fields.related('resource_id', 'name', type='char', string='Name', readonly=True, store=True),
'country_id': fields.many2one('res.country', 'Nationality'),
'birthday': fields.date("Date of Birth"),
'ssnid': fields.char('SSN No', size=32, help='Social Security Number'),
@@ -207,6 +209,8 @@ class hr_employee(osv.osv):
'last_login': fields.related('user_id', 'date', type='datetime', string='Latest Connection', readonly=1),
}
_order='name_related'
def create(self, cr, uid, data, context=None):
employee_id = super(hr_employee, self).create(cr, uid, data, context=context)
try:
+4 -4
View File
@@ -6,11 +6,11 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Employee Directory application installed!</field>
<field name="body">Manage your human resources with OpenERP: employees and their hierarchy, HR departments and job positions.
More HR features are available via extra applications: Recruitment Process (manage job positions and recruitment), Timesheet Validation (record timesheets and attendance),
Leave Management (keep track of employee leaves), Expense Management (manage employee expenses), Employee Appraisals (organize employee surveys, where employees evaluate their subordinates or their manager).</field>
<field name="body"><![CDATA[<p>Manage your human resources with OpenERP: employees and their hierarchy, HR departments and job positions.</p>
<p>More HR features are available via extra applications: Recruitment Process (manage job positions and recruitment), Timesheet Validation (record timesheets and attendance),
Leave Management (keep track of employee leaves), Expense Management (manage employee expenses), Employee Appraisals (organize employee surveys, where employees evaluate their subordinates or their manager).</p>]]></field>
</record>
<record id="employee" model="hr.employee">
+2 -2
View File
@@ -288,7 +288,7 @@
</record>
<record id="open_view_categ_form" model="ir.actions.act_window">
<field name="name">Categories of Employee</field>
<field name="name">Categories of Employees</field>
<field name="res_model">hr.employee.category</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
@@ -342,8 +342,8 @@
<group>
<group>
<field name="no_of_employee" groups="base.group_user"/>
<field name="expected_employees" groups="base.group_user"/>
<field name="no_of_recruitment" on_change="on_change_expected_employee(no_of_recruitment,no_of_employee)"/>
<field name="expected_employees" groups="base.group_user"/>
</group>
<group>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
+2 -1
View File
@@ -18,10 +18,11 @@
-o-border-radius: 3px;
-ms-border-radius: 3px;
border-radius: 3px;
border-collapse: separate;
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
-o-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
box-shadow: 0 1px 4px 3px rgba(0, 0, 0, 0.4);
}
.oe_employee_picture {
@@ -31,6 +31,7 @@ from report.interface import toxml
from report import report_sxw
from tools import ustr
from tools.translate import _
from tools import to_xml
one_day = relativedelta(days=1)
month2name = [0, 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
@@ -111,7 +112,7 @@ class report_custom(report_rml):
<date>%s</date>
<company>%s</company>
</header>
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,uid).company_id.name)
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,uid).company_id.name))
first_date = str(month)
som = datetime.strptime(first_date, '%Y-%m-%d %H:%M:%S')
+4 -4
View File
@@ -11,9 +11,9 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Employee Appraisals application installed!</field>
<field name="body">Manage employee reviews: you can define an appraisal campaign with several steps, with specific evaluation surveys according to hierarchy levels.
Evaluations filled by employees may be exported as pdf files.</field>
<field name="body"><![CDATA[<p>Manage employee reviews: you can define an appraisal campaign with several steps, with specific evaluation surveys according to hierarchy levels. Evaluations filled by employees may be exported as pdf files.</p>]]></field>
</record>
<record id="survey_2" model="survey">
@@ -811,8 +811,8 @@ Once the form had been filled, the employee send it to his supervisor.
<field name="comment_valid_err_msg">The comment you entered is in an invalid format.</field>
<field name="descriptive_text">* His direct reports will be invited through OpenERP to express a feedback on their supervisor's leadership and to give their opinion about their own engagement and effectiveness, the continuous improvement and openness in action in the company, ...
* The employees will send back their anonymous answers to OpenERP. The data will be handled by the HR manager and a brief summary of the data will be sent to the concerned supervisor, to his team and to the supervisor's supervisor.
* The appraiser should rate the employee’s major work accomplishments and performance according to the metric provided below :
* The employees will send back their anonymous answers to OpenERP. The data will be handled by the HR manager and a brief summary of the data will be sent to the concerned supervisor, to his team and to the supervisor's supervisor.
* The appraiser should rate the employee’s major work accomplishments and performance according to the metric provided below :
1 - Significantly exceeds standards and expectations required of the position
2 - Exceeds standards and expectations
+12 -6
View File
@@ -64,22 +64,22 @@ class hr_expense_expense(osv.osv):
_description = "Expense"
_order = "id desc"
_columns = {
'name': fields.char('Description', size=128),
'name': fields.char('Description', size=128, required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'id': fields.integer('Sheet ID', readonly=True),
'date': fields.date('Date', select=True),
'date': fields.date('Date', select=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'journal_id': fields.many2one('account.journal', 'Force Journal', help = "The journal used when the expense is done."),
'employee_id': fields.many2one('hr.employee', "Employee", required=True),
'employee_id': fields.many2one('hr.employee', "Employee", required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'user_id': fields.many2one('res.users', 'User', required=True),
'date_confirm': fields.date('Confirmation Date', select=True, help="Date of the confirmation of the sheet expense. It's filled when the button Confirm is pressed."),
'date_valid': fields.date('Validation Date', select=True, help="Date of the acceptation of the sheet expense. It's filled when the button Accept is pressed."),
'user_valid': fields.many2one('res.users', 'Validation By'),
'user_valid': fields.many2one('res.users', 'Validation By', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'account_move_id': fields.many2one('account.move', 'Ledger Posting'),
'line_ids': fields.one2many('hr.expense.line', 'expense_id', 'Expense Lines', readonly=True, states={'draft':[('readonly',False)]} ),
'note': fields.text('Note'),
'amount': fields.function(_amount, string='Total Amount', digits_compute= dp.get_precision('Account')),
'voucher_id': fields.many2one('account.voucher', "Employee's Receipt"),
'currency_id': fields.many2one('res.currency', 'Currency', required=True),
'department_id':fields.many2one('hr.department','Department'),
'currency_id': fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'department_id':fields.many2one('hr.department','Department', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'company_id': fields.many2one('res.company', 'Company', required=True),
'state': fields.selection([
('draft', 'New'),
@@ -100,6 +100,12 @@ class hr_expense_expense(osv.osv):
'currency_id': _get_currency,
}
def unlink(self, cr, uid, ids, context=None):
for rec in self.browse(cr, uid, ids, context=context):
if rec.state != 'draft':
raise osv.except_osv(_('Warning!'),_('You can only delete draft expenses!'))
return super(hr_expense_expense, self).unlink(cr, uid, ids, context)
def onchange_currency_id(self, cr, uid, ids, currency_id=False, company_id=False, context=None):
res = {'value': {'journal_id': False}}
journal_ids = self.pool.get('account.journal').search(cr, uid, [('type','=','purchase'), ('currency','=',currency_id), ('company_id', '=', company_id)], context=context)
+3 -3
View File
@@ -6,10 +6,10 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Expense Management application installed!</field>
<field name="body">Manage your employees' expenses, after due validation by their manager and the accountant, then generate and pay the corresponding invoices.
This feature is also linked to analytic accounting and compatible with timesheet invoices, so you will be able to automatically re-invoice project-related expenses to your customers.</field>
<field name="body"><![CDATA[<p>Manage your employees' expenses, after due validation by their manager and the accountant, then generate and pay the corresponding invoices.</p>
<p>This feature is also linked to analytic accounting and compatible with timesheet invoices, so you will be able to automatically re-invoice project-related expenses to your customers.</p>]]></field>
</record>
<!-- Resource: product.uom.categ -->
+3 -2
View File
@@ -11,9 +11,10 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Leave Management application installed!</field>
<field name="body">Manage employee leaves from the top menu "Human Resources". Employees can create leave requests that are validated by their manager and/or HR officers.
Once validated, they are visible in the employee's calendar. HR officers can define leave types and allocate leaves to employees and employee categories.</field>
<field name="body"><![CDATA[<p>Manage employee leaves from the top menu "Human Resources". Employees can create leave requests that are validated by their manager and/or HR officers.</p>
<p>Once validated, they are visible in the employee's calendar. HR officers can define leave types and allocate leaves to employees and employee categories.</p>]]></field>
</record>
+2 -2
View File
@@ -122,7 +122,7 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
@@ -159,7 +159,7 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
@@ -31,6 +31,7 @@ import time
from report import report_sxw
from tools import ustr
from tools.translate import _
from tools import to_xml
def lengthmonth(year, month):
if month == 2 and ((year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0))):
@@ -240,7 +241,7 @@ class report_custom(report_rml):
<date>%s</date>
<company>%s</company>
</header>
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,uid).company_id.name)
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,uid).company_id.name))
# Computing the xml
xml='''<?xml version="1.0" encoding="UTF-8" ?>
+7
View File
@@ -326,6 +326,7 @@ class hr_payslip(osv.osv):
return self.write(cr, uid, ids, {'paid': True, 'state': 'done'}, context=context)
def hr_verify_sheet(self, cr, uid, ids, context=None):
self.compute_sheet(cr, uid, ids, context)
return self.write(cr, uid, ids, {'state': 'verify'}, context=context)
def refund_sheet(self, cr, uid, ids, context=None):
@@ -358,6 +359,12 @@ class hr_payslip(osv.osv):
def check_done(self, cr, uid, ids, context=None):
return True
def unlink(self, cr, uid, ids, context=None):
for payslip in self.browse(cr, uid, ids, context=context):
if payslip.state not in ['draft','cancel']:
raise osv.except_osv(_('Warning!'),_('You cannot delete a payslip which is not draft or cancelled!'))
return super(hr_payslip, self).unlink(cr, uid, ids, context)
#TODO move this function into hr_contract module, on hr.employee object
def get_contract(self, cr, uid, employee, date_from, date_to, context=None):
"""
+2 -2
View File
@@ -75,7 +75,7 @@
<record id="hr_salary_rule_meal_voucher" model="hr.salary.rule">
<field name="amount_select">fix</field>
<field eval="10" name="amount_fix"/>
<field name="quantity">worked_days.WORK100.number_of_days</field>
<field name="quantity">worked_days.WORK100 and worked_days.WORK100.number_of_days</field>
<field name="code">MA</field>
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="register_id" ref="hr_meal_voucher_register"/>
@@ -89,7 +89,7 @@
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="name">Get 1% of sales</field>
<field name="sequence" eval="17"/>
<field name="amount_python_compute">result = (inputs.SALEURO.amount + inputs.SALASIA.amount) * 0.01</field>
<field name="amount_python_compute">result = ((inputs.SALEURO and inputs.SALEURO.amount) + (inputs.SALASIA and inputs.SALASIA.amount)) * 0.01</field>
</record>
<!-- Rule Inputs -->
@@ -6,10 +6,10 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Recruitment Process application installed!</field>
<field name="body">Manage job positions and your company's recruitment process. This application is integrated with the Survey application to help you define interviews for different jobs.
You can automatically receive job application though an email gateway, see the Human Resources settings.</field>
<field name="body"><![CDATA[<p>Manage job positions and your company's recruitment process. This application is integrated with the Survey application to help you define interviews for different jobs.</p>
<p>You can automatically receive job application though an email gateway, see the Human Resources settings.</p>]]></field>
</record>
<!-- Meeting Types (for interview meetings) -->
@@ -106,7 +106,7 @@
<field name="arch" type="xml">
<form string="Jobs - Recruitment Form" version="7.0">
<header>
<button name="case_close_with_emp" string="Hire" type="object"
<button name="case_close_with_emp" string="Hire &amp; Create Employee" type="object"
states="draft,open,pending,done" class="oe_highlight"/>
<button name="case_cancel" string="Refuse" type="object"
states="draft,open,pending" class="oe_highlight"/>
@@ -184,7 +184,7 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
<field name="message_ids" widget="mail_thread" placeholder="Share a message..."/>
</div>
</form>
</field>
@@ -333,7 +333,7 @@
<field name="model">hr.job</field>
<field name="inherit_id" ref="hr.view_hr_job_form"/>
<field name="arch" type="xml">
<field name="no_of_recruitment" version="7.0" position="after">
<field name="expected_employees" version="7.0" position="after">
<label for="survey_id" groups="base.group_user"/>
<div groups="base.group_user">
<field name="survey_id" class="oe_inline" domain="[('type','=','Human Resources')]"/>
+2 -1
View File
@@ -28,6 +28,7 @@ import time
import pooler
from report import report_sxw
from tools import ustr
from tools import to_xml
def lengthmonth(year, month):
if month == 2 and ((year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0))):
@@ -94,7 +95,7 @@ class report_custom(report_rml):
<date>%s</date>
<company>%s</company>
</header>
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,user_id).company_id.name)
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,user_id).company_id.name))
account_xml = []
for account, telems in accounts.iteritems():
@@ -27,8 +27,9 @@ class analytical_timesheet_employee(osv.osv_memory):
_name = 'hr.analytical.timesheet.employee'
_description = 'Print Employee Timesheet & Print My Timesheet'
_columns = {
'month': fields.selection([(x, datetime.date(2000, x, 1).strftime('%B')) for x in range(1, 13)],
'Month', required=True),
'month': fields.selection([(1,'January'), (2,'February'), (3,'March'), (4,'April'),
(5,'May'), (6,'June'), (7,'July'), (8,'August'), (9,'September'),
(10,'October'), (11,'November'), (12,'December')], 'Month', required=True),
'year': fields.integer('Year', required=True),
'employee_id': fields.many2one('hr.employee', 'Employee', required=True)
@@ -27,8 +27,9 @@ class analytical_timesheet_employees(osv.osv_memory):
_name = 'hr.analytical.timesheet.users'
_description = 'Print Employees Timesheet'
_columns = {
'month': fields.selection([(x, datetime.date(2000, x, 1).strftime('%B')) for x in range(1, 13)],
'Month', required=True),
'month': fields.selection([(1,'January'), (2,'February'), (3,'March'), (4,'April'),
(5,'May'), (6,'June'), (7,'July'), (8,'August'), (9,'September'),
(10,'October'), (11,'November'), (12,'December')], 'Month', required=True),
'year': fields.integer('Year', required=True),
'employee_ids': fields.many2many('hr.employee', 'timesheet_employee_rel', 'timesheet_id', 'employee_id', 'employees', required=True)
}
@@ -6,8 +6,9 @@
<field name="model">mail.group</field>
<field name="res_id" ref="mail.group_all_employees"/>
<field name="type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Timesheet Validation application installed!</field>
<field name="body">From the top menu "Human Resources", enter and validate timesheets and attendances.</field>
<field name="body"><![CDATA[<p>From the top menu "Human Resources", enter and validate timesheets and attendances.</p>]]></field>
</record>
<record id="ir_actions_server_timsheet_sheet" model="ir.actions.server">
@@ -162,7 +162,7 @@
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
<field name="message_ids" widget="mail_thread"/>
<field name="message_follower_ids" widget="mail_followers"/>
</div>
</form>
+10 -10
View File
@@ -1,21 +1,21 @@
# Spanish (Paraguay) translation for openobject-addons
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# Spanish (Argentina) translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
"PO-Revision-Date: 2011-03-21 16:23+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Paraguay) <es_PY@li.org>\n"
"PO-Revision-Date: 2012-11-13 15:04+0000\n"
"Last-Translator: Eduardo Alberto Calvo <Unknown>\n"
"Language-Team: Spanish (Argentina) <es_AR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-03-22 04:36+0000\n"
"X-Generator: Launchpad (build 12559)\n"
"X-Launchpad-Export-Date: 2012-11-14 04:40+0000\n"
"X-Generator: Launchpad (build 16251)\n"
#. module: l10n_ar
#: model:ir.module.module,description:l10n_ar.module_meta_information
@@ -31,7 +31,7 @@ msgstr ""
#. module: l10n_ar
#: model:ir.module.module,shortdesc:l10n_ar.module_meta_information
msgid "Argentinian Chart of Account"
msgstr "Plan de cuentas de la Argentina"
msgstr "Plan de cuentas de Argentina"
#. module: l10n_ar
#: model:ir.actions.todo,note:l10n_ar.config_call_account_template_in_minimal
@@ -45,7 +45,7 @@ msgid ""
"Chart of Accounts from a Chart Template."
msgstr ""
"Generar el plan contable a partir de una plantilla de plan contable. Se le "
"pedirá el nombre de la compañía, la plantilla de plan contable a utilizar, "
"pedirá el nombre de la compañia, la plantilla de plan contable a utilizar, "
"el número de dígitos para generar el código de las cuentas y de la cuenta "
"bancaria, la moneda para crear los diarios. Así pues, se genere una copia "
"exacta de la plantilla de plan contable.\n"
@@ -65,6 +65,8 @@ class partner_vat(osv.osv_memory):
partners = []
partner_ids = obj_partner.search(cr, uid, [('vat_subjected', '!=', False), ('vat','ilike','BE%')], context=context)
if not partner_ids:
raise osv.except_osv(_('Error'),_('No belgian contact with a VAT number in your database.'))
cr.execute("""SELECT sub1.partner_id, sub1.name, sub1.vat, sub1.turnover, sub2.vat_amount
FROM (SELECT l.partner_id, p.name, p.vat, SUM(CASE WHEN c.code ='49' THEN -l.tax_amount ELSE l.tax_amount END) as turnover
FROM account_move_line l
@@ -190,7 +192,7 @@ class partner_vat_list(osv.osv_memory):
addr = obj_partner.address_get(cr, uid, [obj_cmpny.partner_id.id], ['invoice'])
if addr.get('invoice',False):
ads = obj_partner.browse(cr, uid, [addr['invoice']], context=context)[0]
phone = ads.phone.replace(' ','') or ''
phone = ads.phone and ads.phone.replace(' ','') or ''
email = ads.email or ''
name = ads.name or ''
city = ads.city or ''
@@ -259,6 +261,8 @@ class partner_vat_list(osv.osv_memory):
# Turnover and Farmer tags are not included
client_datas = self._get_datas(cr, uid, ids, context=context)
if not client_datas:
raise osv.except_osv(_('Data Insufficient!'),_('No data available for the client.'))
data_client_info = ''
for amount_data in client_datas:
data_client_info += """
@@ -309,6 +313,8 @@ class partner_vat_list(osv.osv_memory):
datas['year'] = context['year']
datas['limit_amount'] = context['limit_amount']
datas['client_datas'] = self._get_datas(cr, uid, ids, context=context)
if not datas['client_datas']:
raise osv.except_osv(_('Error!'),_('No record to print.'))
return {
'type': 'ir.actions.report.xml',
'report_name': 'partner.vat.listing.print',
@@ -28,6 +28,7 @@ import logging
import re
from traceback import format_exception
from sys import exc_info
from base_iban import base_iban
_logger = logging.getLogger(__name__)
class account_coda_import(osv.osv_memory):
@@ -398,6 +399,7 @@ class account_coda_import(osv.osv_memory):
st_line['account_id'] = transfer_acc
match = True
elif find_partner:
counterparty_number = base_iban._pretty_iban(base_iban._format_iban(counterparty_number))
bank_ids = partner_bank_obj.search(cr,uid,[('acc_number','=', counterparty_number)])
if not match and find_partner and bank_ids:
if len(bank_ids) > 1:
+158
View File
@@ -0,0 +1,158 @@
# Spanish translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-11-12 16:09+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-11-13 05:17+0000\n"
"X-Generator: Launchpad (build 16251)\n"
#. module: l10n_be_hr_payroll
#: help:hr.employee,disabled_spouse_bool:0
msgid "if recipient spouse is declared disabled by law"
msgstr ""
#. module: l10n_be_hr_payroll
#: help:hr.employee,disabled_children_bool:0
msgid "if recipient children is/are declared disabled by law"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,misc_onss_deduction:0
msgid "Miscellaneous exempt ONSS "
msgstr ""
#. module: l10n_be_hr_payroll
#: model:ir.model,name:l10n_be_hr_payroll.model_hr_employee
msgid "Employee"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.employee,disabled_spouse_bool:0
msgid "Disabled Spouse"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,retained_net_amount:0
msgid "Net retained "
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.employee,resident_bool:0
msgid "Nonresident"
msgstr ""
#. module: l10n_be_hr_payroll
#: help:hr.employee,resident_bool:0
msgid "if recipient lives in a foreign country"
msgstr ""
#. module: l10n_be_hr_payroll
#: view:hr.employee:0
msgid "if spouse has professionnel income or not"
msgstr ""
#. module: l10n_be_hr_payroll
#: view:hr.contract:0
msgid "Miscellaneous"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,insurance_employee_deduction:0
msgid "Insurance Group - by worker "
msgstr ""
#. module: l10n_be_hr_payroll
#: selection:hr.employee,spouse_fiscal_status:0
msgid "With Income"
msgstr ""
#. module: l10n_be_hr_payroll
#: selection:hr.employee,spouse_fiscal_status:0
msgid "Without Income"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.employee,disabled_children_number:0
msgid "Number of disabled children"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,additional_net_amount:0
msgid "Net supplements"
msgstr ""
#. module: l10n_be_hr_payroll
#: constraint:hr.employee:0
msgid "Error ! You cannot create recursive Hierarchy of Employees."
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,car_company_amount:0
msgid "Company car employer"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,misc_advantage_amount:0
msgid "Benefits of various nature "
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,car_employee_deduction:0
msgid "Company Car Deduction for Worker"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.employee,disabled_children_bool:0
msgid "Disabled Children"
msgstr ""
#. module: l10n_be_hr_payroll
#: model:ir.model,name:l10n_be_hr_payroll.model_hr_contract
msgid "Contract"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,meal_voucher_amount:0
msgid "Check Value Meal "
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,travel_reimbursement_amount:0
msgid "Reimbursement of travel expenses"
msgstr ""
#. module: l10n_be_hr_payroll
#: constraint:hr.contract:0
msgid "Error! contract start-date must be lower then contract end-date."
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.employee,spouse_fiscal_status:0
msgid "Tax status for spouse"
msgstr ""
#. module: l10n_be_hr_payroll
#: view:hr.contract:0
msgid "by Worker"
msgstr ""
#. module: l10n_be_hr_payroll
#: view:hr.employee:0
msgid "number of dependent children declared as disabled"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,meal_voucher_employee_deduction:0
msgid "Check Value Meal - by worker "
msgstr ""
+141
View File
@@ -0,0 +1,141 @@
# Spanish translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-11-12 16:43+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-11-13 05:17+0000\n"
"X-Generator: Launchpad (build 16251)\n"
#. module: l10n_be_invoice_bba
#: sql_constraint:account.invoice:0
msgid "Invoice Number must be unique per Company!"
msgstr ""
#. module: l10n_be_invoice_bba
#: model:ir.model,name:l10n_be_invoice_bba.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: l10n_be_invoice_bba
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
msgstr ""
#. module: l10n_be_invoice_bba
#: constraint:account.invoice:0
msgid "Invalid BBA Structured Communication !"
msgstr ""
#. module: l10n_be_invoice_bba
#: selection:res.partner,out_inv_comm_algorithm:0
msgid "Random"
msgstr ""
#. module: l10n_be_invoice_bba
#: help:res.partner,out_inv_comm_type:0
msgid "Select Default Communication Type for Outgoing Invoices."
msgstr ""
#. module: l10n_be_invoice_bba
#: help:res.partner,out_inv_comm_algorithm:0
msgid ""
"Select Algorithm to generate the Structured Communication on Outgoing "
"Invoices."
msgstr ""
#. module: l10n_be_invoice_bba
#: code:addons/l10n_be_invoice_bba/invoice.py:114
#: code:addons/l10n_be_invoice_bba/invoice.py:140
#, python-format
msgid ""
"The daily maximum of outgoing invoices with an automatically generated BBA "
"Structured Communications has been exceeded!\n"
"Please create manually a unique BBA Structured Communication."
msgstr ""
#. module: l10n_be_invoice_bba
#: code:addons/l10n_be_invoice_bba/invoice.py:155
#, python-format
msgid "Error!"
msgstr ""
#. module: l10n_be_invoice_bba
#: code:addons/l10n_be_invoice_bba/invoice.py:126
#, python-format
msgid ""
"The Partner should have a 3-7 digit Reference Number for the generation of "
"BBA Structured Communications!\n"
"Please correct the Partner record."
msgstr ""
#. module: l10n_be_invoice_bba
#: code:addons/l10n_be_invoice_bba/invoice.py:113
#: code:addons/l10n_be_invoice_bba/invoice.py:125
#: code:addons/l10n_be_invoice_bba/invoice.py:139
#: code:addons/l10n_be_invoice_bba/invoice.py:167
#: code:addons/l10n_be_invoice_bba/invoice.py:177
#: code:addons/l10n_be_invoice_bba/invoice.py:202
#, python-format
msgid "Warning!"
msgstr ""
#. module: l10n_be_invoice_bba
#: selection:res.partner,out_inv_comm_algorithm:0
msgid "Customer Reference"
msgstr ""
#. module: l10n_be_invoice_bba
#: field:res.partner,out_inv_comm_type:0
msgid "Communication Type"
msgstr ""
#. module: l10n_be_invoice_bba
#: code:addons/l10n_be_invoice_bba/invoice.py:178
#: code:addons/l10n_be_invoice_bba/invoice.py:203
#, python-format
msgid ""
"The BBA Structured Communication has already been used!\n"
"Please create manually a unique BBA Structured Communication."
msgstr ""
#. module: l10n_be_invoice_bba
#: selection:res.partner,out_inv_comm_algorithm:0
msgid "Date"
msgstr ""
#. module: l10n_be_invoice_bba
#: model:ir.model,name:l10n_be_invoice_bba.model_res_partner
msgid "Partner"
msgstr ""
#. module: l10n_be_invoice_bba
#: code:addons/l10n_be_invoice_bba/invoice.py:156
#, python-format
msgid ""
"Unsupported Structured Communication Type Algorithm '%s' !\n"
"Please contact your OpenERP support channel."
msgstr ""
#. module: l10n_be_invoice_bba
#: field:res.partner,out_inv_comm_algorithm:0
msgid "Communication Algorithm"
msgstr ""
#. module: l10n_be_invoice_bba
#: code:addons/l10n_be_invoice_bba/invoice.py:168
#, python-format
msgid ""
"Empty BBA Structured Communication!\n"
"Please fill in a unique BBA Structured Communication."
msgstr ""
-15
View File
@@ -52,21 +52,6 @@ class ResPartnerBank(osv.osv):
'my_bank': fields.boolean('Use my account to print BVR ?', help="Check to print BVR invoices"),
}
def name_get(self, cursor, uid, ids, context=None):
if not len(ids):
return []
bank_type_obj = self.pool.get('res.partner.bank.type')
type_ids = bank_type_obj.search(cursor, uid, [])
bank_type_names = {}
for bank_type in bank_type_obj.browse(cursor, uid, type_ids,
context=context):
bank_type_names[bank_type.code] = bank_type.name
res = []
for r in self.read(cursor, uid, ids, ['name','state'], context):
res.append((r['id'], r['name']+' : '+bank_type_names.get(r['state'], '')))
return res
def _prepare_name(self, bank):
"Hook to get bank number of bank account"
res = u''
+2 -2
View File
@@ -131,8 +131,8 @@
<field name="tax_code_id" ref="tax_acq_196"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44566"/>
<field name="account_paid_id" ref="pcg_44566"/>
<field name="account_collected_id" ref="pcg_445662"/>
<field name="account_paid_id" ref="pcg_445662"/>
<field name="ref_base_code_id" ref="tax_acq_196_ht"/>
<field name="ref_base_sign" eval="1"/>
+5 -5
View File
@@ -3903,7 +3903,7 @@
<field name="name">Associés - Comptes courants</field>
<field name="code">455</field>
<field name="type">view</field>
<field name="user_type" ref="account.data_account_type_view"/>
<field name="user_type" ref="account.data_account_type_payable"/>
<field name="note">Pour frais avancés personnellement</field>
<field name="parent_id" ref="pcg_45"/>
<field name="reconcile" eval="True"/>
@@ -3912,8 +3912,8 @@
<record id="pcg_4551" model="account.account.template">
<field name="name">Principal</field>
<field name="code">4551</field>
<field name="type">receivable</field>
<field name="user_type" ref="account.data_account_type_receivable"/>
<field name="type">payable</field>
<field name="user_type" ref="account.data_account_type_payable"/>
<field name="parent_id" ref="pcg_455"/>
<field name="reconcile" eval="True"/>
</record>
@@ -3921,8 +3921,8 @@
<record id="pcg_4558" model="account.account.template">
<field name="name">Intérêts courus</field>
<field name="code">4558</field>
<field name="type">receivable</field>
<field name="user_type" ref="account.data_account_type_receivable"/>
<field name="type">payable</field>
<field name="user_type" ref="account.data_account_type_payable"/>
<field name="parent_id" ref="pcg_455"/>
<field name="reconcile" eval="True"/>
</record>
+942
View File
@@ -0,0 +1,942 @@
# Spanish translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
"PO-Revision-Date: 2012-11-12 17:08+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-11-13 05:17+0000\n"
"X-Generator: Launchpad (build 16251)\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 ""
#. 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 ""

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