[MERGE]: Merged with lp:openobject-addons

bzr revid: atp@tinyerp.com-20121011153329-nssuw7jzxzfjyhm7
This commit is contained in:
Atul Patel (OpenERP) 2012-10-11 21:03:29 +05:30
commit 53c70856c3
131 changed files with 2749 additions and 7486 deletions

View File

@ -300,7 +300,6 @@ class account_account(osv.osv):
if aml_query.strip():
wheres.append(aml_query.strip())
filters = " AND ".join(wheres)
_logger.debug('Filters: %s',(filters))
# IN might not work ideally in case there are too many
# children_and_consolidated, in that case join on a
# values() e.g.:
@ -316,7 +315,6 @@ class account_account(osv.osv):
" GROUP BY l.account_id")
params = (tuple(children_and_consolidated),) + query_params
cr.execute(request, params)
_logger.debug('Status: %s',(cr.statusmessage))
for row in cr.dictfetchall():
accounts[row['id']] = row

View File

@ -461,9 +461,10 @@ class account_bank_statement(osv.osv):
return {}
balance_start = self._compute_balance_end_real(cr, uid, journal_id, context=context)
journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['company_id'], context=context)
journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['company_id', 'currency'], context=context)
company_id = journal_data['company_id']
return {'value': {'balance_start': balance_start, 'company_id': company_id}}
currency_id = journal_data['currency'] or self.pool.get('res.company').browse(cr, uid, company_id[0], context=context).currency_id.id
return {'value': {'balance_start': balance_start, 'company_id': company_id, 'currency': currency_id}}
def unlink(self, cr, uid, ids, context=None):
stat = self.read(cr, uid, ids, ['state'], context=context)

View File

@ -211,17 +211,17 @@
</tree>
</field>
<group class="oe_subtotal_footer oe_right">
<field name="amount_untaxed"/>
<field name="amount_untaxed" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<div>
<label for="amount_tax"/>
<button name="button_reset_taxes" states="draft,proforma2"
string="(update)" class="oe_link oe_edit_only"
type="object" help="Recompute taxes and total"/>
</div>
<field name="amount_tax" nolabel="1"/>
<field name="amount_total" class="oe_subtotal_footer_separator"/>
<field name="amount_tax" nolabel="1" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="amount_total" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="residual"/>
<field name="residual" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="reconciled" invisible="1"/>
</group>
<div style="width: 50%%">
@ -368,16 +368,16 @@
</tree>
</field>
<group class="oe_subtotal_footer oe_right">
<field name="amount_untaxed"/>
<field name="amount_untaxed" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<div>
<label for="amount_tax"/>
<button name="button_reset_taxes" states="draft,proforma2"
string="(update)" class="oe_link oe_edit_only"
type="object" help="Recompute taxes and total"/>
</div>
<field name="amount_tax" nolabel="1"/>
<field name="amount_total" class="oe_subtotal_footer_separator"/>
<field name="residual" groups="account.group_account_user"/>
<field name="amount_tax" nolabel="1" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="amount_total" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="residual" groups="account.group_account_user" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="reconciled" invisible="1"/>
</group>
<group>

View File

@ -633,13 +633,10 @@
<field name="period_id" class="oe_inline"/>
</div>
<field name='company_id' widget="selection" groups="base.group_multi_company" />
<field name="currency" invisible="1"/>
</group><group>
<label for="balance_start"/>
<div>
<field name="balance_start" class="oe_inline"/>
<field name="currency" class="oe_inline"/>
</div>
<field name="balance_end_real"/>
<field name="balance_start" widget="monetary" options='{"currency_field" : "currency"}'/>
<field name="balance_end_real" widget="monetary" options='{"currency_field" : "currency"}'/>
</group>
</group>
@ -1130,8 +1127,8 @@
<field name="account_tax_id" domain="[('parent_id','=',False)]"/>
</group>
<group attrs="{'readonly':[('state','=','valid')]}" string="Currency" groups="base.group_multi_currency">
<field name="currency_id"/>
<field name="amount_currency"/>
<field name="currency_id" invisible="1"/>
<field name="amount_currency" widget="monetary" options="{'currency_field': 'currency_id'}"/>
</group>
<group string="Reconciliation">
<field name="reconcile_id"/>
@ -1177,8 +1174,8 @@
<field name="credit"/>
<separator colspan="4" string="Optional Information"/>
<field name="currency_id" groups="base.group_multi_currency"/>
<field name="amount_currency" groups="base.group_multi_currency"/>
<field name="currency_id" invisible="1"/>
<field name="amount_currency" groups="base.group_multi_currency" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="quantity"/>
<field name="move_id" required="False"/>
<newline/>
@ -2567,7 +2564,7 @@ action = pool.get('res.config').next(cr, uid, [], context)
<field name="date" attrs="{'readonly':[('state','!=','draft')]}" on_change="onchange_date(date, company_id)"/>
<field name="closing_date" readonly="1"/>
<field name="period_id" class="oe_inline"/>
<field name="currency" invisible="1" groups="base.group_multi_currency"/>
<field name="currency" invisible="1"/>
</group>
</group>
<notebook>
@ -2629,12 +2626,12 @@ action = pool.get('res.config').next(cr, uid, [], context)
<group col="6" colspan="4">
<group col="2" colspan="2">
<separator string="Opening Balance" colspan="4"/>
<field name="balance_start" readonly="1" string="Opening Cash Control"/>
<field name="last_closing_balance" readonly="1" string="Last Closing Balance" />
<field name="total_entry_encoding" />
<field name="balance_start" readonly="1" string="Opening Cash Control" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="last_closing_balance" readonly="1" string="Last Closing Balance" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="total_entry_encoding" widget="monetary" options="{'currency_field': 'currency_id'}"/>
</group>
<group string="Closing Balance">
<field name="balance_end"/>
<field name="balance_end" widget="monetary" options="{'currency_field': 'currency_id'}"/>
</group>
</group>
</sheet>

View File

@ -14,8 +14,8 @@
<field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/>
</group>
<group>
<field name="property_account_expense" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}"/>
<field name="supplier_taxes_id" colspan="2" attrs="{'readonly':[('purchase_ok','=',0)]}" widget="many2many_tags"/>
<field name="property_account_expense" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" />
<field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
</group>
</group>
</page>

View File

@ -5,7 +5,7 @@
<field name="name">analytic.entries.report.tree</field>
<field name="model">analytic.entries.report</field>
<field name="arch" type="xml">
<tree string="Analytic Entries Analysis">
<tree string="Analytic Entries Analysis" create="false">
<field name="date" invisible="1"/>
<field name="year" invisible="1"/>
<field name="day" invisible="1"/>

View File

@ -5,7 +5,7 @@
<field name="name">account.entries.report.tree</field>
<field name="model">account.entries.report</field>
<field name="arch" type="xml">
<tree colors="blue:move_state == 'draft';black:move_state == 'posted'" string="Entries Analysis">
<tree colors="blue:move_state == 'draft';black:move_state == 'posted'" create="false" string="Entries Analysis">
<field name="date" invisible="1"/>
<field name="date_created" invisible="1"/>
<field name="date_maturity" invisible="1"/>

View File

@ -5,7 +5,7 @@
<field name="name">account.invoice.report.tree</field>
<field name="model">account.invoice.report</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" string="Invoices Analysis">
<tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" create="false" string="Invoices Analysis">
<field name="date" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="year" invisible="1"/>

View File

@ -5,7 +5,7 @@
<field name="name">account.treasury.report.tree</field>
<field name="model">account.treasury.report</field>
<field name="arch" type="xml">
<tree string="Treasury Analysis">
<tree string="Treasury Analysis" create="false">
<field name="date" invisible="1"/>
<field name="fiscalyear_id"/>
<field name="period_id"/>

View File

@ -106,27 +106,27 @@
</group>
<notebook colspan="4">
<page string="General">
<group>
<group>
<field name="purchase_value"/>
<field name="salvage_value"/>
<field name="value_residual"/>
<group>
<group>
<field name="purchase_value" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="salvage_value" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="value_residual" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="partner_id"/>
</group>
<group>
<field name="method"/>
<field name="method_progress_factor" attrs="{'invisible':[('method','=','linear')], 'required':[('method','=','degressive')]}"/>
</group>
<group>
<field name="method"/>
<field name="method_progress_factor" attrs="{'invisible':[('method','=','linear')], 'required':[('method','=','degressive')]}"/>
<label for="method_time"/>
<div>
<field name="method_time" on_change="onchange_method_time(method_time)" class="oe_inline"/>
<button name="%(action_asset_modify)d" states="open" string="Change Duration" type="action" icon="terp-stock_effects-object-colorize" class="oe_inline" colspan="1"/>
<field name="method_time" on_change="onchange_method_time(method_time)" class="oe_inline"/>
<button name="%(action_asset_modify)d" states="open" string="Change Duration" type="action" icon="terp-stock_effects-object-colorize" class="oe_inline" colspan="1"/>
</div>
<field name="prorata" attrs="{'invisible': [('method_time','=','end')]}"/>
<field name="method_number" attrs="{'invisible':[('method_time','=','end')], 'required':[('method_time','=','number')]}"/>
<field name="method_period"/>
<field name="method_end" attrs="{'required': [('method_time','=','end')], 'invisible':[('method_time','=','number')]}"/>
</group>
</group>
<field name="prorata" attrs="{'invisible': [('method_time','=','end')]}"/>
<field name="method_number" attrs="{'invisible':[('method_time','=','end')], 'required':[('method_time','=','number')]}"/>
<field name="method_period"/>
<field name="method_end" attrs="{'required': [('method_time','=','end')], 'invisible':[('method_time','=','number')]}"/>
</group>
</group>
</page>
<page string="Depreciation Board">
<field name="depreciation_line_ids" mode="tree">

View File

@ -6,7 +6,7 @@
<field name="name">asset.asset.report.tree</field>
<field name="model">asset.asset.report</field>
<field name="arch" type="xml">
<tree string="Assets">
<tree string="Assets" create="false">
<field name="name" invisible="1"/>
<field name="asset_id" invisible="1"/>
<field name="asset_category_id" invisible="1"/>

View File

@ -6,7 +6,7 @@
<field name="name">sale.receipt.report.tree</field>
<field name="model">sale.receipt.report</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" string="Sales Receipt Analysis">
<tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" create="false" string="Sales Receipt Analysis">
<field name="date" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="year" invisible="1"/>

View File

@ -136,11 +136,8 @@
<group>
<group>
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'invoice_currency':currency_id, 'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" string="Supplier"/>
<label for="amount" string="Amount"/>
<div>
<field name="amount" invisible="context.get('line_type', False)" on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)" class="oe_inline"/>
<field name="currency_id" class="oe_inline"/>
</div>
<field name="currency_id" invisible="1"/>
<field name="amount" invisible="context.get('line_type', False)" on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)" class="oe_inline" widget='monetary' options='{"currency_field": "currency_id"}'/>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
invisible="context.get('line_type', False)"
@ -203,7 +200,7 @@
</group>
<group col="2">
<separator string="Payment Options" colspan="2"/>
<field name="writeoff_amount"/>
<field name="writeoff_amount" widget='monetary' options='{"currency_field": "currency_id"}'/>
<field name="payment_option" required="1"/>
<field name="writeoff_acc_id"
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
@ -294,13 +291,12 @@
<group>
<field name="state" invisible="1"/>
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
<label for="amount" string="Paid Amount"/>
<div>
<field name="amount" class="oe_inline"
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="currency_id" class="oe_inline"/>
</div>
<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)"
@ -323,7 +319,7 @@
</group>
<notebook invisible="1">
<page string="Payment Information" groups="base.group_user">
<label for="line_cr_ids"/>
<label for="line_cr_ids"/>
<field name="line_cr_ids" context="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, currency_id, type, context)">
<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}"
@ -367,7 +363,7 @@
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
</group>
<group>
<field name="writeoff_amount"/>
<field name="writeoff_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="payment_option" required="1"/>
<field name="writeoff_acc_id"
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
@ -406,14 +402,12 @@
<group>
<group>
<field name="partner_id" domain="[('customer','=',True)]" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
<label for="amount" string="Paid Amount"/>
<div>
<field name="amount" class="oe_inline"
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="currency_id" class="oe_inline"/>
</div>
<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)"
@ -436,7 +430,7 @@
</group>
<notebook>
<page string="Payment Information" groups="base.group_user">
<label for="line_cr_ids"/>
<label for="line_cr_ids"/>
<field name="line_cr_ids" context="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, currency_id, type, context)">
<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}"
@ -480,7 +474,7 @@
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
</group>
<group>
<field name="writeoff_amount"/>
<field name="writeoff_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="payment_option" required="1"/>
<field name="writeoff_acc_id"
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"

View File

@ -145,7 +145,7 @@
<field name="name">audittrail.log.tree</field>
<field name="model">audittrail.log</field>
<field name="arch" type="xml">
<tree string="AuditTrail Logs">
<tree string="AuditTrail Logs" create="false">
<field name="timestamp"/>
<field name="name"/>
<field name="object_id"/>

View File

@ -4,28 +4,25 @@ import simplejson
import werkzeug.urls
import werkzeug.utils
import openerp.modules.registry
import openerp.addons.web.controllers.main
import openerp.addons.web.common.http as openerpweb
from openerp import SUPERUSER_ID
import openerp
_logger = logging.getLogger(__name__)
class OAuthController(openerpweb.Controller):
class OAuthController(openerp.addons.web.http.Controller):
_cp_path = '/auth_oauth'
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def list_providers(self, req, dbname):
try:
registry = openerp.modules.registry.RegistryManager.get(dbname)
with registry.cursor() as cr:
providers = registry.get('auth.oauth.provider')
l = providers.read(cr, SUPERUSER_ID, providers.search(cr, SUPERUSER_ID, [('enabled','=',True)]))
l = providers.read(cr, openerp.SUPERUSER_ID, providers.search(cr, openerp.SUPERUSER_ID, [('enabled','=',True)]))
except Exception:
l = []
return l
@openerpweb.httprequest
@openerp.addons.web.http.httprequest
def signin(self, req, **kw):
state = simplejson.loads(kw['state'])
dbname = state['d']
@ -34,7 +31,7 @@ class OAuthController(openerpweb.Controller):
with registry.cursor() as cr:
try:
u = registry.get('res.users')
credentials = u.auth_oauth(cr, SUPERUSER_ID, provider, kw)
credentials = u.auth_oauth(cr, openerp.SUPERUSER_ID, provider, kw)
cr.commit()
return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials)
except AttributeError:

View File

@ -21,7 +21,7 @@ class res_users(osv.Model):
}
_sql_constraints = [
('uniq_users_oauth_provider_oauht_uid', 'unique(auth_provider_id, auth_uid)', 'OAuth UID must be unique per provider'),
('uniq_users_oauth_provider_oauth_uid', 'unique(oauth_provider_id, oauth_uid)', 'OAuth UID must be unique per provider'),
]
def auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None):

View File

@ -23,24 +23,21 @@ import logging
import os
import tempfile
import urllib
from openerp import SUPERUSER_ID
import werkzeug.urls
import werkzeug.exceptions
from openerp.modules.registry import RegistryManager
from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect
try:
import openerp.addons.web.common.http as openerpweb
except ImportError:
import web.common.http as openerpweb # noqa
from openid import oidutil
from openid.store import filestore
from openid.consumer import consumer
from openid.cryptutil import randomString
from openid.extensions import ax, sreg
import openerp
from openerp import SUPERUSER_ID
from openerp.modules.registry import RegistryManager
from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect
from .. import utils
_logger = logging.getLogger(__name__)
@ -70,7 +67,7 @@ class GoogleAppsAwareConsumer(consumer.GenericConsumer):
return super(GoogleAppsAwareConsumer, self).complete(message, endpoint, return_to)
class OpenIDController(openerpweb.Controller):
class OpenIDController(openerp.addons.web.http.Controller):
_cp_path = '/auth_openid/login'
_store = filestore.FileOpenIDStore(_storedir)
@ -118,7 +115,7 @@ class OpenIDController(openerpweb.Controller):
def _get_realm(self, req):
return req.httprequest.host_url
@openerpweb.httprequest
@openerp.addons.web.http.httprequest
def verify_direct(self, req, db, url):
result = self._verify(req, db, url)
if 'error' in result:
@ -127,7 +124,7 @@ class OpenIDController(openerpweb.Controller):
return werkzeug.utils.redirect(result['value'])
return result['value']
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def verify(self, req, db, url):
return self._verify(req, db, url)
@ -157,7 +154,7 @@ class OpenIDController(openerpweb.Controller):
form_html = request.htmlMarkup(realm, redirect_to)
return {'action': 'post', 'value': form_html, 'session_id': req.session_id}
@openerpweb.httprequest
@openerp.addons.web.http.httprequest
def process(self, req, **kw):
session = getattr(req.session, 'openid_session', None)
if not session:
@ -225,7 +222,7 @@ class OpenIDController(openerpweb.Controller):
return set_cookie_and_redirect(req, '/#action=login&loginerror=1')
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def status(self, req):
session = getattr(req.session, 'openid_session', {})
return {'status': session.get('status'), 'message': session.get('message')}

View File

@ -18,20 +18,20 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>
#
##############################################################################
from openerp import SUPERUSER_ID
from openerp.modules.registry import RegistryManager
import openerp.addons.web.common.http as openerpweb
import logging
import werkzeug
import logging
import openerp
from openerp import SUPERUSER_ID
from openerp.modules.registry import RegistryManager
_logger = logging.getLogger(__name__)
class Controller(openerpweb.Controller):
class Controller(openerp.addons.web.http.Controller):
_cp_path = '/auth_reset_password'
@openerpweb.httprequest
@openerp.addons.web.http.httprequest
def reset_password(self, req, dbname, login):
""" retrieve user, and perform reset password """
url = '/'

View File

@ -18,32 +18,31 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>
#
##############################################################################
from openerp import SUPERUSER_ID
from openerp.modules.registry import RegistryManager
from openerp.addons.web.controllers.main import login_and_redirect
import openerp.addons.web.common.http as openerpweb
import logging
import werkzeug
import logging
import openerp
from openerp.modules.registry import RegistryManager
from openerp.addons.web.controllers.main import login_and_redirect
_logger = logging.getLogger(__name__)
class Controller(openerpweb.Controller):
class Controller(openerp.addons.web.http.Controller):
_cp_path = '/auth_signup'
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def retrieve(self, req, dbname, token):
""" retrieve the user info (name, login or email) corresponding to a signup token """
registry = RegistryManager.get(dbname)
user_info = None
with registry.cursor() as cr:
res_partner = registry.get('res.partner')
user_info = res_partner.signup_retrieve_info(cr, SUPERUSER_ID, token)
user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
return user_info
@openerpweb.httprequest
def signup(self, req, dbname, token, name, login, password):
@openerp.addons.web.http.httprequest
def signup(self, req, dbname, token, name, login, password, state=''):
""" sign up a user (new or existing), and log it in """
url = '/'
registry = RegistryManager.get(dbname)
@ -51,9 +50,9 @@ class Controller(openerpweb.Controller):
try:
res_users = registry.get('res.users')
values = {'name': name, 'login': login, 'password': password}
credentials = res_users.signup(cr, SUPERUSER_ID, values, token)
credentials = res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
cr.commit()
return login_and_redirect(req, *credentials)
return login_and_redirect(req, *credentials, redirect_url='/#%s'%state)
except Exception as e:
# signup error
_logger.exception('error when signup')

View File

@ -18,6 +18,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>
#
##############################################################################
import random
import time
import urllib
import urlparse
import openerp
from openerp.osv import osv, fields
@ -25,11 +29,6 @@ from openerp import SUPERUSER_ID
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
from openerp.tools.safe_eval import safe_eval
import time
import random
import urllib
import urlparse
def random_token():
# the token has an entropy of about 120 bits (6 bits/char * 20 chars)
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
@ -38,7 +37,6 @@ def random_token():
def now():
return time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
class res_partner(osv.Model):
_inherit = 'res.partner'
@ -132,8 +130,6 @@ class res_partner(osv.Model):
res['email'] = partner.email or ''
return res
class res_users(osv.Model):
_inherit = 'res.users'

View File

@ -90,6 +90,7 @@ openerp.auth_signup = function(instance) {
name: name,
login: login,
password: password,
state: $.param(this.params)
};
var url = "/auth_signup/signup?" + $.param(params);
window.location = url;

View File

@ -1,15 +1,12 @@
# -*- coding: utf-8 -*-
import simplejson
try:
import openerp.addons.web.common.http as openerpweb
except ImportError:
import web.common.http as openerpweb
import openerp
class ImportController(openerpweb.Controller):
class ImportController(openerp.addons.web.http.Controller):
_cp_path = '/base_import'
@openerpweb.httprequest
@openerp.addons.web.http.httprequest
def set_file(self, req, file, import_id, jsonp='callback'):
import_id = int(import_id)

View File

@ -1,19 +1,14 @@
# -*- coding: utf-8 -*-
from xml.etree import ElementTree
try:
import openerp.addons.web.common.http as openerpweb
from openerp.addons.web.common import nonliterals
from openerp.addons.web.controllers.main import load_actions_from_ir_values
except ImportError:
import web.common.http as openerpweb # noqa
from web.common import nonliterals # noqa
from web.controllers.main import load_actions_from_ir_values # noqa
import openerp
from openerp.addons.web import nonliterals
from openerp.addons.web.controllers.main import load_actions_from_ir_values
class Board(openerpweb.Controller):
class Board(openerp.addons.web.http.Controller):
_cp_path = '/board'
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''):
# FIXME move this method to board.board model
to_eval = nonliterals.CompoundContext(context_to_save)

View File

@ -8,7 +8,7 @@
<field name="name">crm.lead.report.tree</field>
<field name="model">crm.lead.report</field>
<field name="arch" type="xml">
<tree string="Leads Analysis">
<tree string="Leads Analysis" create="false">
<field name="creation_year" invisible="1"/>
<field name="creation_month" invisible="1"/>
<field name="creation_day" invisible="1"/>
@ -130,7 +130,7 @@
<field name="name">crm.lead.report.tree</field>
<field name="model">crm.lead.report</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';black:state in ('open','pending','done');gray:state == 'cancel' " string="Opportunities Analysis">
<tree colors="blue:state == 'draft';black:state in ('open','pending','done');gray:state == 'cancel' " create="false" string="Opportunities Analysis">
<field name="creation_year" invisible="1"/>
<field name="creation_month" invisible="1"/>
<field name="creation_day" invisible="1"/>

View File

@ -8,7 +8,7 @@
<field name="name">crm.phonecall.report.tree</field>
<field name="model">crm.phonecall.report</field>
<field name="arch" type="xml">
<tree string="Phone calls">
<tree string="Phone calls" create="false">
<field name="name" invisible="1"/>
<field name="month" invisible="1"/>
<field name="section_id" invisible="1"/>

View File

@ -32,6 +32,13 @@ class crm_configuration(osv.osv_memory):
'group_fund_raising': fields.boolean("Manage Fund Raising",
implied_group='crm.group_fund_raising',
help="""Allows you to trace and manage your activities for fund raising."""),
'module_crm_claim':fields.boolean("Manage Customer Claims",
help="""Allows you to track your customers/suppliers claims and grievances.
This installs the module crm_claim."""),
'module_crm_helpdesk':fields.boolean("Manage Helpdesk and Support",
help="""Allows you to communicate with Customer, process Customer query, and provide better help and support. This installs the module crm_helpdesk."""),
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -7,6 +7,22 @@
<field name="model">sale.config.settings</field>
<field name="inherit_id" ref="base_setup.view_sale_config_settings"/>
<field name="arch" type="xml">
<div name="config_sale" position="before">
<separator string="After-Sale Services"/>
<group>
<label for="id" string="Features"/>
<div>
<div>
<field name="module_crm_claim" class="oe_inline"/>
<label for="module_crm_claim"/>
</div>
<div>
<field name="module_crm_helpdesk" class="oe_inline"/>
<label for="module_crm_helpdesk"/>
</div>
</div>
</group>
</div>
<group name="On Mail Client" version="7.0" position="after">
<group>
<label for="id" string="On Mail Server"/>

View File

@ -25,8 +25,10 @@
'version': '1.0',
'category': 'Customer Relationship Management',
'description': """
This modules allows you to track your customers/suppliers claims and grievances.
Manage Customer Claims.
================================================================================
This application allows you to track your customers/suppliers claims and grievances.
It is fully integrated with the email gateway so that you can create
automatically new claims based on incoming emails.

View File

@ -8,7 +8,7 @@
<field name="name">crm.claim.report.tree</field>
<field name="model">crm.claim.report</field>
<field name="arch" type="xml">
<tree string="Claims">
<tree string="Claims" create="false">
<field name="name" invisible="1"/>
<field name="month" invisible="1"/>
<field name="section_id" invisible="1"/>

View File

@ -8,7 +8,7 @@
<field name="name">crm.helpdesk.report.tree</field>
<field name="model">crm.helpdesk.report</field>
<field name="arch" type="xml">
<tree string="Helpdesk">
<tree string="Helpdesk" create="false">
<field name="name" invisible="1"/>
<field name="month" invisible="1"/>
<field name="section_id" invisible="1"/>

View File

@ -65,7 +65,7 @@
<field name="name">crm.lead.assign.report.tree</field>
<field name="model">crm.lead.report.assign</field>
<field name="arch" type="xml">
<tree string="Opportunities Assignment Analysis">
<tree string="Opportunities Assignment Analysis" create="false">
<field name="year" invisible="1"/>
<field name="month" invisible="1"/>
<field name="date_assign" invisible="1"/>

View File

@ -41,7 +41,7 @@
<field name="name">crm.partner.assign.report.tree</field>
<field name="model">crm.partner.report.assign</field>
<field name="arch" type="xml">
<tree string="Opportunities Assignment Analysis">
<tree string="Opportunities Assignment Analysis" create="false">
<field name="partner_id" invisible="1"/>
<field name="country_id" invisible="1"/>
<field name="grade_id" invisible="1"/>

View File

@ -36,8 +36,7 @@ DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['roo
class document_file(osv.osv):
_inherit = 'ir.attachment'
_rec_name = 'datas_fname'
_rec_name = 'name'
def _attach_parent_id(self, cr, uid, ids=None, context=None):
"""Migrate ir.attachments to the document module.
@ -149,29 +148,12 @@ class document_file(osv.osv):
_sql_constraints = [
# filename_uniq is not possible in pure SQL
]
def _check_duplication(self, cr, uid, vals, ids=None, op='create'):
name = vals.get('name', False)
parent_id = vals.get('parent_id', False)
res_model = vals.get('res_model', False)
res_id = vals.get('res_id', 0)
if op == 'write':
for file in self.browse(cr, uid, ids): # FIXME fields_only
if not name:
name = file.name
if not parent_id:
parent_id = file.parent_id and file.parent_id.id or False
if not res_model:
res_model = file.res_model and file.res_model or False
if not res_id:
res_id = file.res_id and file.res_id or 0
res = self.search(cr, uid, [('id', '<>', file.id), ('name', '=', name), ('parent_id', '=', parent_id), ('res_model', '=', res_model), ('res_id', '=', res_id)])
if len(res):
return False
if op == 'create':
res = self.search(cr, uid, [('name', '=', name), ('parent_id', '=', parent_id), ('res_id', '=', res_id), ('res_model', '=', res_model)])
if len(res):
return False
return True
def onchange_file(self, cr, uid, ids, datas_fname=False, context=None):
res = {'value':{}}
if datas_fname:
res['value'].update({'name': datas_fname})
return res
def check(self, cr, uid, ids, mode, context=None, values=None):
"""Check access wrt. res_model, relax the rule of ir.attachment parent
@ -219,8 +201,6 @@ class document_file(osv.osv):
res = self.search(cr, uid, [('id', 'in', ids)])
if not len(res):
return False
if not self._check_duplication(cr, uid, vals, ids, 'write'):
raise osv.except_osv(_('ValidateError'), _('File name must be unique!'))
# if nodes call this write(), they must skip the code below
from_node = context and context.get('__from_node', False)
@ -286,22 +266,8 @@ class document_file(osv.osv):
else:
if vals.get('file_size'):
del vals['file_size']
result = self._check_duplication(cr, uid, vals)
if not result:
domain = [
('res_id', '=', vals['res_id']),
('res_model', '=', vals['res_model']),
('datas_fname', '=', vals['datas_fname']),
]
attach_ids = self.search(cr, uid, domain, context=context)
super(document_file, self).write(cr, uid, attach_ids,
{'datas' : vals['datas']},
context=context)
result = attach_ids[0]
else:
#raise osv.except_osv(_('ValidateError'), _('File name must be unique!'))
result = super(document_file, self).create(cr, uid, vals, context)
return result
return super(document_file, self).create(cr, uid, vals, context)
def __get_partner_id(self, cr, uid, res_model, res_id, context=None):
""" A helper to retrieve the associated partner from any res_model+id

View File

@ -228,6 +228,9 @@
<field name="priority" eval="1"/>
<field name="inherit_id" ref="base.view_attachment_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='datas_fname']" position="replace">
<field name="datas_fname" invisible="1" on_change="onchange_file(datas_fname)"/>
</xpath>
<field name="url" position="after">
<field name="user_id"/>
</field>
@ -338,15 +341,6 @@
<field name="value" eval="'ir.actions.act_window,%d'%action_document_file_directory_form"/>
</record>
<record model="ir.ui.view" id="view_attachment_form_inherit">
<field name="name">ir.attachment.view.inherit</field>
<field name="model">ir.attachment</field>
<field name="inherit_id" ref="base.view_attachment_form"/>
<field name="arch" type="xml">
<field name="datas_fname" position = "replace" >
</field>
</field>
</record>
<record model="ir.ui.view" id="view_process_node_form_inherit1">
<field name="name">process.node.form</field>

View File

@ -4,14 +4,8 @@ import textwrap
import simplejson
import werkzeug.wrappers
try:
# embedded
import openerp.addons.web.common.http as openerpweb
import openerp.addons.web.controllers.main as webmain
except ImportError:
# standalone
import web.common.http as openerpweb
import web.controllers.main as webmain
import openerp.addons.web.http as openerpweb
import openerp.addons.web.controllers.main as webmain
class EDI(openerpweb.Controller):
# http://hostname:8069/edi/view?db=XXXX&token=XXXXXXXXXXX

View File

@ -319,7 +319,7 @@ class email_template(osv.osv):
ext = "." + format
if not report_name.endswith(ext):
report_name += ext
attachments.append(report_name, result)
attachments.append((report_name, result))
# Add template attachments
for attach in template.attachment_ids:

View File

@ -39,7 +39,7 @@
attrs="{'invisible':[('use_template','=',False)]}"
on_change="onchange_template_id(use_template, template_id, composition_mode, model, res_id, context)"/>
</xpath>
<xpath expr="//button[@class='oe_mail_compose_message_attachment']" position="before">
<xpath expr="//button[@name='dummy']" position="before">
<button icon="/email_template/static/src/img/email_template.png"
type="object" name="toggle_template" string=""
help="Use a message template"

View File

@ -267,25 +267,18 @@ class event_event(osv.osv):
return {'value': dic}
def on_change_address_id(self, cr, uid, ids, address_id, context=None):
values = {
'street' : False,
'street2' : False,
'city' : False,
'zip' : False,
'country_id' : False,
'state_id' : False,
}
if isinstance(address_id, (long, int)):
address = self.pool.get('res.partner').browse(cr, uid, address_id, context=context)
values.update({
'street' : address.street,
'street2' : address.street2,
'city' : address.city,
'country_id' : address.country_id and address.country_id.id,
'state_id' : address.state_id and address.state_id.id,
'zip' : address.zip,
})
values = {}
if not address_id:
return values
address = self.pool.get('res.partner').browse(cr, uid, address_id, context=context)
values.update({
'street' : address.street,
'street2' : address.street2,
'city' : address.city,
'country_id' : address.country_id and address.country_id.id or False,
'state_id' : address.state_id and address.state_id.id or False,
'zip' : address.zip,
})
return {'value' : values}

View File

@ -23,16 +23,16 @@ from osv import fields, osv
import tools
class report_event_registration(osv.osv):
_name = "report.event.registration"
_description = "Events Analysis"
_auto = False
_columns = {
'event_date': fields.char('Event Start Date', size=64, readonly=True),
'year': fields.char('Year', size=4, readonly=True),
'month': fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
'month': fields.selection([
('01','January'), ('02','February'), ('03','March'), ('04','April'),
('05','May'), ('06','June'), ('07','July'), ('08','August'),
('09','September'), ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
'event_id': fields.many2one('event.event', 'Event', required=True),
'draft_state': fields.integer(' # No of Draft Registrations', size=20),
'confirm_state': fields.integer(' # No of Confirmed Registrations', size=20),
@ -48,17 +48,18 @@ class report_event_registration(osv.osv):
'company_id': fields.many2one('res.company', 'Company', readonly=True),
}
_order = 'event_date desc'
def init(self, cr):
"""
initialize the sql view for the event registration
cr -- the cursor
Initialize the sql view for the event registration
"""
tools.drop_view_if_exists(cr, 'report_event_registration')
cr.execute("""
CREATE OR REPLACE view report_event_registration AS (
SELECT
event_id,
r.id,
# TOFIX this request won't select events that have no registration
cr.execute(""" CREATE VIEW report_event_registration AS (
SELECT
e.id::char || '/' || coalesce(r.id::char,'') AS id,
e.id AS event_id,
e.user_id AS user_id,
r.user_id AS user_id_registration,
r.name AS name_registration,
@ -72,23 +73,21 @@ class report_event_registration(osv.osv):
CASE WHEN r.state IN ('open','done') THEN r.nb_register ELSE 0 END AS confirm_state,
e.type AS event_type,
e.register_max AS register_max,
e.state AS event_state,
r.state AS registration_state
FROM
e.state AS event_state,
r.state AS registration_state
FROM
event_event e
LEFT JOIN event_registration r ON (e.id=r.event_id)
LEFT JOIN
event_registration r ON (e.id=r.event_id)
GROUP BY
GROUP BY
event_id,
user_id_registration,
e.id,
r.id,
registration_state,
r.nb_register,
event_type, e.id, e.date_begin, e.main_speaker_id,
e.register_max,event_id, e.user_id,e.company_id,
event_type,
e.id,
e.date_begin,
e.user_id,
event_state,
e.company_id,
@ -97,9 +96,8 @@ class report_event_registration(osv.osv):
month,
e.register_max,
name_registration
)
""")
)
""")
report_event_registration()

View File

@ -1,13 +1,13 @@
<?xml version="1.0"?>
<openerp>
<data>
<data>
<!-- report , event on registration... start -->
<!-- Report, event on registration -->
<record model="ir.ui.view" id="report_event_registration_tree">
<field name="name">report.event.registration.tree</field>
<field name="model">report.event.registration</field>
<field name="arch" type="xml">
<tree colors="blue:event_state == 'draft';black:event_state == 'confirm';gray:event_state in('done','cancel')" string="Events Analysis">
<tree colors="blue:event_state == 'draft';black:event_state == 'confirm';gray:event_state in('done','cancel')" create="false" string="Events Analysis">
<field name="event_date" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="speaker_id" invisible="1"/>
@ -28,7 +28,6 @@
</field>
</record>
<record model ="ir.ui.view" id="report_event_registration_graph">
<field name="name">report.event.registration.graph</field>
<field name="model">report.event.registration</field>
@ -42,8 +41,7 @@
</field>
</record>
<!-- Event on Registration search view -->
<!-- Event on Registration search view -->
<record model="ir.ui.view" id="view_report_event_registration_search">
<field name="name">report.event.registration.search</field>
<field name="model">report.event.registration</field>
@ -82,28 +80,28 @@
</field>
</record>
<record model="ir.actions.act_window" id="action_report_event_registration">
<record model="ir.actions.act_window" id="action_report_event_registration">
<field name="name">Events Analysis</field>
<field name="res_model">report.event.registration</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="search_view_id" ref="view_report_event_registration_search"/>
<field name="context">{"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, 'group_by_no_leaf':1, 'group_by':[]}</field>
<field name="context">{"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, "group_by_no_leaf":1, "group_by":[]}</field>
</record>
<record model="ir.actions.act_window.view" id="action_report_event_registration_tree">
<record model="ir.actions.act_window.view" id="action_report_event_registration_tree">
<field name="sequence" eval="1"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="report_event_registration_tree"/>
<field name="act_window_id" ref="action_report_event_registration"/>
</record>
</record>
<record model="ir.actions.act_window.view" id="action_report_event_registration_graph">
<record model="ir.actions.act_window.view" id="action_report_event_registration_graph">
<field name="sequence" eval="2"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="report_event_registration_graph"/>
<field name="act_window_id" ref="action_report_event_registration"/>
</record>
</record>
<menuitem parent="base.menu_reporting" id="menu_reporting_events" sequence="30" groups="event.group_event_manager" name="Events"/>
<menuitem parent="menu_reporting_events" action="action_report_event_registration" id="menu_report_event_registration" sequence="3" groups="event.group_event_manager"/>

View File

@ -6,10 +6,10 @@
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view" />
<field name="arch" type="xml">
<field name="purchase_ok" position="before">
<div name="options" position="inside">
<field name="event_ok" on_change="onchange_event_ok(event_ok, context)"/>
<label for="event_ok"/>
</field>
</div>
<field name='default_code' position='before'>
<field name="event_type_id" attrs="{'readonly': [('event_ok', '=', False)]}"/>
</field>

View File

@ -27,7 +27,6 @@
'category': 'Tools',
'installable': True,
'auto_install': False,
'web': True,
'js': ['static/src/js/gdocs.js'],
'data': [
'security/ir.model.access.csv',

View File

@ -26,8 +26,11 @@ try:
from gdata.client import RequestError
from gdata.docs.service import DOCUMENT_LABEL
import gdata.auth
from gdata.docs.data import Resource
except ImportError:
raise osv.except_osv(_('Google Docs Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list.'))
import logging
_logger = logging.getLogger(__name__)
_logger.warning("Please install latest gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list")
class google_docs_ir_attachment(osv.osv):
_inherit = 'ir.attachment'

View File

@ -8,9 +8,10 @@
<field name="name">google_docs.config.tree</field>
<field name="model">google.docs.config</field>
<field name="arch" type="xml">
<group name="default_filters" position="inside">
<tree string="Google Docs Configuration">
<field name="model_id"/>
</group>
<field name="name_template"/>
</tree>
</field>
</record>
@ -18,11 +19,25 @@
<field name="name">google_docs.config.form</field>
<field name="model">google.docs.config</field>
<field name="arch" type="xml">
<group colspan='4'>
<field name="model_id"/>
<field name='gdocs_resource_id'/>
<field name='name_template'/>
</group>
<form string="Google Docs Configuration" version="7.0">
<group>
<field name="model_id"/>
<label for='gdocs_resource_id'/>
<div>
<field name='gdocs_resource_id'/>
<p class="oe_grey">
This is the id of the template document, on google side. You can find it thanks to its URL:
<ul>
<li>for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789`</li>
<li>for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789`</li>
<li>for a presentation (slide show) document with url like `https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id.p`, the ID is `presentation:123456789`</li>
<li>for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789`</li>
</ul>
</p>
</div>
<field name='name_template'/>
</group>
</form>
</field>
</record>

View File

@ -334,13 +334,10 @@
<field name="state" widget="statusbar" statusbar_visible="recruit,open"/>
</header>
<sheet>
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" class="oe_inline"/>
<label class="oe_inline" string="(" attrs="{'invisible': [('department_id', '=', False)]}"/>
<field name="department_id" class="oe_inline"/>
<label class="oe_inline" string=")" attrs="{'invisible': [('department_id', '=', False)]}"/>
</h1>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name" class="oe_inline"/></h1>
</div>
<group>
<group>
<field name="no_of_employee" groups="base.group_user"/>
@ -349,7 +346,7 @@
</group>
<group>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
</group>
<field name="department_id"/> </group>
</group>
<div>
<label for="description"/>

View File

@ -6,7 +6,7 @@
<field name="name">hr.evaluation.report.tree</field>
<field name="model">hr.evaluation.report</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';black:state in ('wait','progress');gray:state in('done','cancel')"
<tree colors="blue:state == 'draft';black:state in ('wait','progress');gray:state in('done','cancel')" create="false"
string="Appraisal Analysis">
<field name="create_date" invisible="1"/>
<field name="employee_id" invisible="1"/>

View File

@ -243,7 +243,7 @@ class product_product(osv.osv):
data_obj = self.pool.get('ir.model.data')
cat_id = data_obj._get_id(cr, uid, 'hr_expense', 'cat_expense')
categ_id = data_obj.browse(cr, uid, cat_id).res_id
res = {'value' : {'type':'service','procure_method':'make_to_stock','supply_method':'buy','purchase_ok':True,'sale_ok' :False,'categ_id':categ_id }}
res = {'value' : {'type':'service','sale_ok' :False,'categ_id':categ_id }}
return res
product_product()

View File

@ -124,7 +124,7 @@
<field name="note" placeholder="Free Notes"/>
</div>
<group class="oe_subtotal_footer">
<field name="amount"/>
<field name="amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
</group>
</group>
</page>
@ -196,10 +196,10 @@
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<field name="purchase_ok" position="before">
<div name="options" position="inside">
<field name="hr_expense_ok" on_change="on_change_hr_expense_ok(hr_expense_ok)"/>
<label for="hr_expense_ok"/>
</field>
</div>
</field>
</record>

View File

@ -6,7 +6,7 @@
<field name="name">hr.expense.report.tree</field>
<field name="model">hr.expense.report</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';black:state in ('confirm','accepted','done');gray:state == 'cancelled'" string="Expenses Analysis">
<tree colors="blue:state == 'draft';black:state in ('confirm','accepted','done');gray:state == 'cancelled'" create="false" string="Expenses Analysis">
<field name="employee_id" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="year" invisible="1"/>

View File

@ -9,6 +9,7 @@ access_product_template_hr_expense_user,product.template.hr.expense.user,product
access_product_uom_hr_expense_user,product.uom.hr.expense.user,product.model_product_uom,base.group_hr_user,1,1,1,1
access_product_price_type_user,product.price.type.user,product.model_product_price_type,base.group_hr_user,1,1,1,1
access_account_journal_user,account.journal.user,account.model_account_journal,base.group_hr_user,1,1,1,1
access_account_journal_employee,account.journal.employee,account.model_account_journal,base.group_user,1,0,0,0
access_account_invoice_user,account.invoice.user,account.model_account_invoice,base.group_hr_user,1,1,1,1
access_account_invoice_line_user,account.invoice.line.user,account.model_account_invoice_line,base.group_hr_user,1,1,1,1
access_account_analytic_journal_user,account.ianalytic.journal.user,account.model_account_analytic_journal,base.group_hr_user,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
9 access_product_uom_hr_expense_user product.uom.hr.expense.user product.model_product_uom base.group_hr_user 1 1 1 1
10 access_product_price_type_user product.price.type.user product.model_product_price_type base.group_hr_user 1 1 1 1
11 access_account_journal_user account.journal.user account.model_account_journal base.group_hr_user 1 1 1 1
12 access_account_journal_employee account.journal.employee account.model_account_journal base.group_user 1 0 0 0
13 access_account_invoice_user account.invoice.user account.model_account_invoice base.group_hr_user 1 1 1 1
14 access_account_invoice_line_user account.invoice.line.user account.model_account_invoice_line base.group_hr_user 1 1 1 1
15 access_account_analytic_journal_user account.ianalytic.journal.user account.model_account_analytic_journal base.group_hr_user 1 1 1 1

View File

@ -353,6 +353,32 @@
<menuitem name="My Allocation Requests" parent="menu_open_ask_holidays" id="menu_open_allocation_holidays" action="open_allocation_holidays"/>
<record model="ir.actions.act_window" id="request_approve_allocation">
<field name="name">Allocation Requests to Approve</field>
<field name="res_model">hr.holidays</field>
<field name="view_type">form</field>
<field name="context">{'default_type': 'add', 'search_default_approve':1}</field>
<field name="domain">[('type','=','add')]</field>
<field name="view_id" ref="allocation_leave_new"/>
<field name="search_view_id" ref="view_hr_holidays_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_request_approve_allocation_tree">
<field name="sequence" eval="1"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_holiday_allocation_tree"/>
<field name="act_window_id" ref="request_approve_allocation"/>
</record>
<record model="ir.actions.act_window.view" id="action_request_approve_allocation_form">
<field name="sequence" eval="2"/>
<field name="view_mode">form</field>
<field name="view_id" ref="allocation_leave_new"/>
<field name="act_window_id" ref="request_approve_allocation"/>
</record>
<menuitem parent="menu_open_ask_holidays" id="menu_request_approve_allocation" action="request_approve_allocation" groups="base.group_hr_manager"/>
<record model="ir.actions.act_window" id="open_company_allocation">
<field name="name">Leaves Summary</field>
<field name="res_model">hr.holidays</field>

File diff suppressed because it is too large Load Diff

View File

@ -342,8 +342,8 @@
attrs="{'invisible':[('survey_id','=',False)]}"/>
</div>
</field>
<xpath expr="/form/sheet/h1" version="7.0" position="after">
<div colspan="4" attrs="{'invisible': [('alias_domain', '=', False)]}">
<xpath expr="//div[@class='oe_title']" version="7.0" position="after">
<div attrs="{'invisible': [('alias_domain', '=', False)]}">
<field name="alias_id" invisible="1" required="0"/>
<label for="alias_name" class="oe_edit_only"/>
<field name="alias_name" nolabel="1" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" nolabel="1" class="oe_inline"/>

View File

@ -5,7 +5,7 @@
<field name="name">hr.recruitment.report.tree</field>
<field name="model">hr.recruitment.report</field>
<field name="arch" type="xml">
<tree string="Recruitment Analysis">
<tree string="Recruitment Analysis" create="false">
<field name="date" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="job_id"/>

View File

@ -135,6 +135,8 @@ class account_analytic_line(osv.osv):
def _default_general_account(self, cr, uid, context=None):
proxy = self.pool.get('hr.employee')
record_ids = proxy.search(cr, uid, [('user_id', '=', uid)], context=context)
if not record_ids:
raise osv.except_osv(_('Error!'), _('Please create an employee associated to this user.'))
employee = proxy.browse(cr, uid, record_ids[0], context=context)
if employee.product_id and employee.product_id.property_account_income:
return employee.product_id.property_account_income.id

View File

@ -15,7 +15,7 @@
<field name="name">hr.timesheet.report.tree</field>
<field name="model">hr.timesheet.report</field>
<field name="arch" type="xml">
<tree string="Timesheet Analysis">
<tree string="Timesheet Analysis" create="false">
<field name="year" invisible="1"/>
<field name="month" invisible="1"/>
<field name="date" invisible="1"/>

View File

@ -35,7 +35,7 @@ class hr_timesheet_current_open(osv.osv_memory):
user_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
if not len(user_ids):
raise osv.except_osv(_('Error!'), _('Please define employee for your user!'))
raise osv.except_osv(_('Error!'), _('Please create an employee and associate it with this user.'))
ids = ts.search(cr, uid, [('user_id','=',uid),('state','=','draft'),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))], context=context)
if len(ids) > 1:

View File

@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
"Last-Translator: <>\n"
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"Language-Team: Bengali <bn@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
"X-Generator: Launchpad (build 16118)\n"
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "E-mail Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,employee_bank_no:0
msgid "Employee Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in draft state"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Title"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Payment Advice from"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
msgid "Hr Salary Employee By Category Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employees Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Allowances with Basic:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Department"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Deductions:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "A/C no."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,driver_salay:0
msgid "Driver Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
msgid "Yearly Salary by Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
msgid "Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "March"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "("
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,company_id:0
#: field:hr.payroll.advice.line,company_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,company_id:0
msgid "Company"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "The Manager"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Letter Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ","
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Set to Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,number_of_year:0
msgid "Total years of work experience"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "to"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Total :"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payslip.run,available_advice:0
msgid "Made Payment Advice?"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Advices which are paid using NEFT transfer"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,tds:0
msgid "Amount for Tax Deduction at Source"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
msgid "Pay Slip"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,day:0
msgid "Day"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Month of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.payslip:0
msgid "Payslip 'Date From' must be before 'Date To'."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,batch_id:0
msgid "Batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Other Information"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Cancelled"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "For"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Details by Salary Rule Category:"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,voluntary_provident_fund:0
msgid "VPF computed as percentage(%)"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,number:0
#: report:paylip.details.in:0
msgid "Reference"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Group By..."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,medical_insurance:0
msgid "Medical Insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Identification No"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Confirmed"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,bysal:0
#: field:payment.advice.report,bysal:0
#: report:payroll.advice:0
msgid "By Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Confirm"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,chaque_nos:0
#: field:payment.advice.report,cheque_nos:0
msgid "Cheque Numbers"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
msgid "Yearly Salary by Head"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#, python-format
msgid "You can not confirm Payment advice without advice lines."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,state:0
#: field:payment.advice.report,state:0
msgid "State"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Yours Sincerely"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,medical_insurance:0
msgid "Deduction towards company provided medical insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
msgid "Bank Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Email"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payslip.run,available_advice:0
msgid "If this box is checked which means that Payment Advice exists for current batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Error !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Print"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
msgid "Payslip Batches"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,debit_credit:0
#: report:payroll.advice:0
msgid "C/D"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.employee.bymonth:0
msgid "Yearly Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
msgid "Print Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,line_ids:0
msgid "Employee Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "July"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Configuration"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
msgid "Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
#: view:payment.advice.report:0
msgid "Advices Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc:0
msgid "IFSC"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,tds:0
msgid "TDS"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,join_date:0
msgid "Join Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.contract:0
msgid "Error! Contract start-date must be less than contract end-date."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:res.company,dearness_allowance:0
msgid "Dearness Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "August"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Deduction"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Search Payment advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "SI. No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in confirm state"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "December"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Sheet"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,month:0
msgid "Month"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Non Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "or"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
msgid "Hr Salary Employee By Month Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,category_id:0
msgid "Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#, python-format
msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "To Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,number_of_year:0
msgid "No. of Years of Service"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Note"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Salary Rule Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: selection:hr.payroll.advice,state:0
#: view:payment.advice.report:0
#: selection:payment.advice.report,state:0
msgid "Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,voluntary_provident_fund:0
msgid "Voluntary Provident Fund"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
msgid "Payment Advice Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Status"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,city_type:0
msgid "Type of City"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:res.company,dearness_allowance:0
msgid "Check this box if your company provide Dearness Allowance to employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc_code:0
#: field:payment.advice.report,ifsc_code:0
#: report:payroll.advice:0
msgid "IFSC Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "June"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,nbr:0
msgid "# Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
msgid "PaySlip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,date:0
#: field:payment.advice.report,date:0
msgid "Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "November"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Extended Filters..."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
msgid "This report performs analysis on Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "October"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Designation"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "January"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "Pay Head Employee Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:payroll.advice:0
msgid "Authorized Signature"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
msgid "Contract"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice.line:0
msgid "Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "To,"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,driver_salay:0
msgid "Check this box if you provide allowance for driver"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice.line,advice_id:0
#: field:hr.payslip,advice_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
msgid "Bank Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Other No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Draft Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,neft:0
msgid "Check this box if your company use online transfer for salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,number:0
msgid "Number"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "September"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Cancel"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Day of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.employee:0
msgid "Error! You cannot create recursive hierarchy of Employee(s)."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Payslip Batches ready to be Adviced"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Pay Slip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Total Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,employee_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
#: view:payment.advice.report:0
#: field:payment.advice.report,employee_id:0
msgid "Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Compute Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,join_date:0
msgid "Joining date of employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Dear Sir/Madam,"
msgstr "Dear Sir/Madam,"
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,note:0
msgid "Description"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ")"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Payroll"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "NEFT"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,bank_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,bank_id:0
#: report:payroll.advice:0
#: report:salary.detail.byyear:0
msgid "Bank"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,end_date:0
#: field:yearly.salary.detail,date_to:0
msgid "End Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "February"
msgstr ""
#. module: l10n_in_hr_payroll
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,name:0
#: report:paylip.details.in:0
#: field:payment.advice.report,name:0
#: report:salary.employee.bymonth:0
msgid "Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: field:hr.salary.employee.month,employee_ids:0
#: view:yearly.salary.detail:0
#: field:yearly.salary.detail,employee_ids:0
msgid "Employees"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "April"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Name of the Employe"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Please define bank account for the %s employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,start_date:0
#: field:yearly.salary.detail,date_from:0
msgid "Start Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,bank_id:0
msgid "Select the Bank from which the salary is going to be paid"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "Employee Pay Head Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Phone No."
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Credit"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,name:0
#: report:payroll.advice:0
msgid "Bank Account No."
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,date:0
msgid "Advice Date is used to search Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "May"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Create Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,year:0
msgid "Year"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,neft:0
#: field:payment.advice.report,neft:0
msgid "NEFT Transaction"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "Total"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "form period"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Year of Payment Advices"
msgstr ""

View File

@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
"Last-Translator: <>\n"
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"Language-Team: Gujarati <gu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
"X-Generator: Launchpad (build 16118)\n"
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "E-mail Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,employee_bank_no:0
msgid "Employee Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in draft state"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Title"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Payment Advice from"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
msgid "Hr Salary Employee By Category Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employees Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Allowances with Basic:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Department"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Deductions:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "A/C no."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,driver_salay:0
msgid "Driver Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
msgid "Yearly Salary by Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
msgid "Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "March"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "("
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,company_id:0
#: field:hr.payroll.advice.line,company_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,company_id:0
msgid "Company"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "The Manager"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Letter Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ","
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Set to Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,number_of_year:0
msgid "Total years of work experience"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "to"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Total :"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payslip.run,available_advice:0
msgid "Made Payment Advice?"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Advices which are paid using NEFT transfer"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,tds:0
msgid "Amount for Tax Deduction at Source"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
msgid "Pay Slip"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,day:0
msgid "Day"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Month of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.payslip:0
msgid "Payslip 'Date From' must be before 'Date To'."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,batch_id:0
msgid "Batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Other Information"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Cancelled"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "For"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Details by Salary Rule Category:"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,voluntary_provident_fund:0
msgid "VPF computed as percentage(%)"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,number:0
#: report:paylip.details.in:0
msgid "Reference"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Group By..."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,medical_insurance:0
msgid "Medical Insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Identification No"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Confirmed"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,bysal:0
#: field:payment.advice.report,bysal:0
#: report:payroll.advice:0
msgid "By Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Confirm"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,chaque_nos:0
#: field:payment.advice.report,cheque_nos:0
msgid "Cheque Numbers"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
msgid "Yearly Salary by Head"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#, python-format
msgid "You can not confirm Payment advice without advice lines."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,state:0
#: field:payment.advice.report,state:0
msgid "State"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Yours Sincerely"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,medical_insurance:0
msgid "Deduction towards company provided medical insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
msgid "Bank Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Email"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payslip.run,available_advice:0
msgid "If this box is checked which means that Payment Advice exists for current batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Error !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Print"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
msgid "Payslip Batches"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,debit_credit:0
#: report:payroll.advice:0
msgid "C/D"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.employee.bymonth:0
msgid "Yearly Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
msgid "Print Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,line_ids:0
msgid "Employee Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "July"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Configuration"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
msgid "Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
#: view:payment.advice.report:0
msgid "Advices Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc:0
msgid "IFSC"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,tds:0
msgid "TDS"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,join_date:0
msgid "Join Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.contract:0
msgid "Error! Contract start-date must be less than contract end-date."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:res.company,dearness_allowance:0
msgid "Dearness Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "August"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Deduction"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Search Payment advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "SI. No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in confirm state"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "December"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Sheet"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,month:0
msgid "Month"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Non Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "or"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
msgid "Hr Salary Employee By Month Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,category_id:0
msgid "Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#, python-format
msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "To Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,number_of_year:0
msgid "No. of Years of Service"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Note"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Salary Rule Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: selection:hr.payroll.advice,state:0
#: view:payment.advice.report:0
#: selection:payment.advice.report,state:0
msgid "Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,voluntary_provident_fund:0
msgid "Voluntary Provident Fund"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
msgid "Payment Advice Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Status"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,city_type:0
msgid "Type of City"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:res.company,dearness_allowance:0
msgid "Check this box if your company provide Dearness Allowance to employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc_code:0
#: field:payment.advice.report,ifsc_code:0
#: report:payroll.advice:0
msgid "IFSC Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "June"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,nbr:0
msgid "# Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
msgid "PaySlip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,date:0
#: field:payment.advice.report,date:0
msgid "Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "November"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Extended Filters..."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
msgid "This report performs analysis on Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "October"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Designation"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "January"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "Pay Head Employee Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:payroll.advice:0
msgid "Authorized Signature"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
msgid "Contract"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice.line:0
msgid "Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "To,"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,driver_salay:0
msgid "Check this box if you provide allowance for driver"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice.line,advice_id:0
#: field:hr.payslip,advice_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
msgid "Bank Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Other No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Draft Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,neft:0
msgid "Check this box if your company use online transfer for salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,number:0
msgid "Number"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "September"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Cancel"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Day of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.employee:0
msgid "Error! You cannot create recursive hierarchy of Employee(s)."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Payslip Batches ready to be Adviced"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Pay Slip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Total Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,employee_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
#: view:payment.advice.report:0
#: field:payment.advice.report,employee_id:0
msgid "Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Compute Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,join_date:0
msgid "Joining date of employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Dear Sir/Madam,"
msgstr "Dear Sir/Madam,"
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,note:0
msgid "Description"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ")"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Payroll"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "NEFT"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,bank_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,bank_id:0
#: report:payroll.advice:0
#: report:salary.detail.byyear:0
msgid "Bank"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,end_date:0
#: field:yearly.salary.detail,date_to:0
msgid "End Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "February"
msgstr ""
#. module: l10n_in_hr_payroll
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,name:0
#: report:paylip.details.in:0
#: field:payment.advice.report,name:0
#: report:salary.employee.bymonth:0
msgid "Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: field:hr.salary.employee.month,employee_ids:0
#: view:yearly.salary.detail:0
#: field:yearly.salary.detail,employee_ids:0
msgid "Employees"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "April"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Name of the Employe"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Please define bank account for the %s employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,start_date:0
#: field:yearly.salary.detail,date_from:0
msgid "Start Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,bank_id:0
msgid "Select the Bank from which the salary is going to be paid"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "Employee Pay Head Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Phone No."
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Credit"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,name:0
#: report:payroll.advice:0
msgid "Bank Account No."
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,date:0
msgid "Advice Date is used to search Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "May"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Create Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,year:0
msgid "Year"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,neft:0
#: field:payment.advice.report,neft:0
msgid "NEFT Transaction"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "Total"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "form period"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Year of Payment Advices"
msgstr ""

View File

@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
"Last-Translator: <>\n"
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"Language-Team: Hindi <hi@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
"X-Generator: Launchpad (build 16118)\n"
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "E-mail Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,employee_bank_no:0
msgid "Employee Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in draft state"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Title"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Payment Advice from"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
msgid "Hr Salary Employee By Category Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employees Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Allowances with Basic:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Department"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Deductions:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "A/C no."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,driver_salay:0
msgid "Driver Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
msgid "Yearly Salary by Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
msgid "Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "March"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "("
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,company_id:0
#: field:hr.payroll.advice.line,company_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,company_id:0
msgid "Company"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "The Manager"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Letter Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ","
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Set to Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,number_of_year:0
msgid "Total years of work experience"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "to"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Total :"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payslip.run,available_advice:0
msgid "Made Payment Advice?"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Advices which are paid using NEFT transfer"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,tds:0
msgid "Amount for Tax Deduction at Source"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
msgid "Pay Slip"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,day:0
msgid "Day"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Month of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.payslip:0
msgid "Payslip 'Date From' must be before 'Date To'."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,batch_id:0
msgid "Batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Other Information"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Cancelled"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "For"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Details by Salary Rule Category:"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,voluntary_provident_fund:0
msgid "VPF computed as percentage(%)"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,number:0
#: report:paylip.details.in:0
msgid "Reference"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Group By..."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,medical_insurance:0
msgid "Medical Insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Identification No"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Confirmed"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,bysal:0
#: field:payment.advice.report,bysal:0
#: report:payroll.advice:0
msgid "By Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Confirm"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,chaque_nos:0
#: field:payment.advice.report,cheque_nos:0
msgid "Cheque Numbers"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
msgid "Yearly Salary by Head"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#, python-format
msgid "You can not confirm Payment advice without advice lines."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,state:0
#: field:payment.advice.report,state:0
msgid "State"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Yours Sincerely"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,medical_insurance:0
msgid "Deduction towards company provided medical insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
msgid "Bank Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Email"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payslip.run,available_advice:0
msgid "If this box is checked which means that Payment Advice exists for current batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Error !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Print"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
msgid "Payslip Batches"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,debit_credit:0
#: report:payroll.advice:0
msgid "C/D"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.employee.bymonth:0
msgid "Yearly Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
msgid "Print Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,line_ids:0
msgid "Employee Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "July"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Configuration"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
msgid "Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
#: view:payment.advice.report:0
msgid "Advices Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc:0
msgid "IFSC"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,tds:0
msgid "TDS"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,join_date:0
msgid "Join Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.contract:0
msgid "Error! Contract start-date must be less than contract end-date."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:res.company,dearness_allowance:0
msgid "Dearness Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "August"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Deduction"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Search Payment advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "SI. No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in confirm state"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "December"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Sheet"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,month:0
msgid "Month"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Non Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "or"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
msgid "Hr Salary Employee By Month Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,category_id:0
msgid "Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#, python-format
msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "To Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,number_of_year:0
msgid "No. of Years of Service"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Note"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Salary Rule Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: selection:hr.payroll.advice,state:0
#: view:payment.advice.report:0
#: selection:payment.advice.report,state:0
msgid "Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,voluntary_provident_fund:0
msgid "Voluntary Provident Fund"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
msgid "Payment Advice Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Status"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,city_type:0
msgid "Type of City"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:res.company,dearness_allowance:0
msgid "Check this box if your company provide Dearness Allowance to employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc_code:0
#: field:payment.advice.report,ifsc_code:0
#: report:payroll.advice:0
msgid "IFSC Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "June"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,nbr:0
msgid "# Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
msgid "PaySlip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,date:0
#: field:payment.advice.report,date:0
msgid "Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "November"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Extended Filters..."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
msgid "This report performs analysis on Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "October"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Designation"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "January"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "Pay Head Employee Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:payroll.advice:0
msgid "Authorized Signature"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
msgid "Contract"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice.line:0
msgid "Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "To,"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,driver_salay:0
msgid "Check this box if you provide allowance for driver"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice.line,advice_id:0
#: field:hr.payslip,advice_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
msgid "Bank Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Other No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Draft Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,neft:0
msgid "Check this box if your company use online transfer for salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,number:0
msgid "Number"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "September"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Cancel"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Day of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.employee:0
msgid "Error! You cannot create recursive hierarchy of Employee(s)."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Payslip Batches ready to be Adviced"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Pay Slip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Total Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,employee_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
#: view:payment.advice.report:0
#: field:payment.advice.report,employee_id:0
msgid "Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Compute Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,join_date:0
msgid "Joining date of employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Dear Sir/Madam,"
msgstr "Dear Sir/Madam,"
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,note:0
msgid "Description"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ")"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Payroll"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "NEFT"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,bank_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,bank_id:0
#: report:payroll.advice:0
#: report:salary.detail.byyear:0
msgid "Bank"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,end_date:0
#: field:yearly.salary.detail,date_to:0
msgid "End Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "February"
msgstr ""
#. module: l10n_in_hr_payroll
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,name:0
#: report:paylip.details.in:0
#: field:payment.advice.report,name:0
#: report:salary.employee.bymonth:0
msgid "Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: field:hr.salary.employee.month,employee_ids:0
#: view:yearly.salary.detail:0
#: field:yearly.salary.detail,employee_ids:0
msgid "Employees"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "April"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Name of the Employe"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Please define bank account for the %s employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,start_date:0
#: field:yearly.salary.detail,date_from:0
msgid "Start Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,bank_id:0
msgid "Select the Bank from which the salary is going to be paid"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "Employee Pay Head Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Phone No."
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Credit"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,name:0
#: report:payroll.advice:0
msgid "Bank Account No."
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,date:0
msgid "Advice Date is used to search Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "May"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Create Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,year:0
msgid "Year"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,neft:0
#: field:payment.advice.report,neft:0
msgid "NEFT Transaction"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "Total"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "form period"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Year of Payment Advices"
msgstr ""

View File

@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
"Last-Translator: <>\n"
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"Language-Team: Tamil <ta@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
"X-Generator: Launchpad (build 16118)\n"
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "E-mail Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,employee_bank_no:0
msgid "Employee Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in draft state"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Title"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Payment Advice from"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
msgid "Hr Salary Employee By Category Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employees Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Allowances with Basic:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Department"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Deductions:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "A/C no."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,driver_salay:0
msgid "Driver Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
msgid "Yearly Salary by Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
msgid "Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "March"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "("
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,company_id:0
#: field:hr.payroll.advice.line,company_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,company_id:0
msgid "Company"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "The Manager"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Letter Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ","
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Set to Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,number_of_year:0
msgid "Total years of work experience"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "to"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Total :"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payslip.run,available_advice:0
msgid "Made Payment Advice?"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Advices which are paid using NEFT transfer"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,tds:0
msgid "Amount for Tax Deduction at Source"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
msgid "Pay Slip"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,day:0
msgid "Day"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Month of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.payslip:0
msgid "Payslip 'Date From' must be before 'Date To'."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,batch_id:0
msgid "Batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Other Information"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Cancelled"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "For"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Details by Salary Rule Category:"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,voluntary_provident_fund:0
msgid "VPF computed as percentage(%)"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,number:0
#: report:paylip.details.in:0
msgid "Reference"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Group By..."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,medical_insurance:0
msgid "Medical Insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Identification No"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Confirmed"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,bysal:0
#: field:payment.advice.report,bysal:0
#: report:payroll.advice:0
msgid "By Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Confirm"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,chaque_nos:0
#: field:payment.advice.report,cheque_nos:0
msgid "Cheque Numbers"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
msgid "Yearly Salary by Head"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#, python-format
msgid "You can not confirm Payment advice without advice lines."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,state:0
#: field:payment.advice.report,state:0
msgid "State"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Yours Sincerely"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,medical_insurance:0
msgid "Deduction towards company provided medical insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
msgid "Bank Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Email"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payslip.run,available_advice:0
msgid "If this box is checked which means that Payment Advice exists for current batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Error !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Print"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
msgid "Payslip Batches"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,debit_credit:0
#: report:payroll.advice:0
msgid "C/D"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.employee.bymonth:0
msgid "Yearly Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
msgid "Print Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,line_ids:0
msgid "Employee Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "July"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Configuration"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
msgid "Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
#: view:payment.advice.report:0
msgid "Advices Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc:0
msgid "IFSC"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,tds:0
msgid "TDS"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,join_date:0
msgid "Join Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.contract:0
msgid "Error! Contract start-date must be less than contract end-date."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:res.company,dearness_allowance:0
msgid "Dearness Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "August"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Deduction"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Search Payment advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "SI. No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in confirm state"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "December"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Sheet"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,month:0
msgid "Month"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Non Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "or"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
msgid "Hr Salary Employee By Month Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,category_id:0
msgid "Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#, python-format
msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "To Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,number_of_year:0
msgid "No. of Years of Service"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Note"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Salary Rule Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: selection:hr.payroll.advice,state:0
#: view:payment.advice.report:0
#: selection:payment.advice.report,state:0
msgid "Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,voluntary_provident_fund:0
msgid "Voluntary Provident Fund"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
msgid "Payment Advice Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Status"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,city_type:0
msgid "Type of City"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:res.company,dearness_allowance:0
msgid "Check this box if your company provide Dearness Allowance to employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc_code:0
#: field:payment.advice.report,ifsc_code:0
#: report:payroll.advice:0
msgid "IFSC Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "June"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,nbr:0
msgid "# Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
msgid "PaySlip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,date:0
#: field:payment.advice.report,date:0
msgid "Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "November"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Extended Filters..."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
msgid "This report performs analysis on Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "October"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Designation"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "January"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "Pay Head Employee Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:payroll.advice:0
msgid "Authorized Signature"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
msgid "Contract"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice.line:0
msgid "Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "To,"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,driver_salay:0
msgid "Check this box if you provide allowance for driver"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice.line,advice_id:0
#: field:hr.payslip,advice_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
msgid "Bank Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Other No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Draft Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,neft:0
msgid "Check this box if your company use online transfer for salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,number:0
msgid "Number"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "September"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Cancel"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Day of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.employee:0
msgid "Error! You cannot create recursive hierarchy of Employee(s)."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Payslip Batches ready to be Adviced"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Pay Slip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Total Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,employee_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
#: view:payment.advice.report:0
#: field:payment.advice.report,employee_id:0
msgid "Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Compute Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,join_date:0
msgid "Joining date of employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Dear Sir/Madam,"
msgstr "Dear Sir/Madam,"
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,note:0
msgid "Description"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ")"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Payroll"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "NEFT"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,bank_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,bank_id:0
#: report:payroll.advice:0
#: report:salary.detail.byyear:0
msgid "Bank"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,end_date:0
#: field:yearly.salary.detail,date_to:0
msgid "End Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "February"
msgstr ""
#. module: l10n_in_hr_payroll
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,name:0
#: report:paylip.details.in:0
#: field:payment.advice.report,name:0
#: report:salary.employee.bymonth:0
msgid "Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: field:hr.salary.employee.month,employee_ids:0
#: view:yearly.salary.detail:0
#: field:yearly.salary.detail,employee_ids:0
msgid "Employees"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "April"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Name of the Employe"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Please define bank account for the %s employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,start_date:0
#: field:yearly.salary.detail,date_from:0
msgid "Start Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,bank_id:0
msgid "Select the Bank from which the salary is going to be paid"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "Employee Pay Head Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Phone No."
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Credit"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,name:0
#: report:payroll.advice:0
msgid "Bank Account No."
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,date:0
msgid "Advice Date is used to search Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "May"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Create Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,year:0
msgid "Year"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,neft:0
#: field:payment.advice.report,neft:0
msgid "NEFT Transaction"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "Total"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "form period"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Year of Payment Advices"
msgstr ""

View File

@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
"Last-Translator: <>\n"
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"Language-Team: Telugu <te@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
"X-Generator: Launchpad (build 16118)\n"
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "E-mail Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,employee_bank_no:0
msgid "Employee Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in draft state"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Title"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Payment Advice from"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
msgid "Hr Salary Employee By Category Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employees Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Allowances with Basic:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Department"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Deductions:"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "A/C no."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,driver_salay:0
msgid "Driver Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
msgid "Yearly Salary by Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
msgid "Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "March"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "("
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,company_id:0
#: field:hr.payroll.advice.line,company_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,company_id:0
msgid "Company"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "The Manager"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Letter Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ","
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Set to Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,number_of_year:0
msgid "Total years of work experience"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "to"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Total :"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payslip.run,available_advice:0
msgid "Made Payment Advice?"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Advices which are paid using NEFT transfer"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,tds:0
msgid "Amount for Tax Deduction at Source"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
msgid "Pay Slip"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,day:0
msgid "Day"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Month of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.payslip:0
msgid "Payslip 'Date From' must be before 'Date To'."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,batch_id:0
msgid "Batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Other Information"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Cancelled"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "For"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Details by Salary Rule Category:"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,voluntary_provident_fund:0
msgid "VPF computed as percentage(%)"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,number:0
#: report:paylip.details.in:0
msgid "Reference"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Group By..."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,medical_insurance:0
msgid "Medical Insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Identification No"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.payroll.advice,state:0
#: selection:payment.advice.report,state:0
msgid "Confirmed"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,bysal:0
#: field:payment.advice.report,bysal:0
#: report:payroll.advice:0
msgid "By Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Confirm"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,chaque_nos:0
#: field:payment.advice.report,cheque_nos:0
msgid "Cheque Numbers"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
msgid "Yearly Salary by Head"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#, python-format
msgid "You can not confirm Payment advice without advice lines."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,state:0
#: field:payment.advice.report,state:0
msgid "State"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Yours Sincerely"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,medical_insurance:0
msgid "Deduction towards company provided medical insurance"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
msgid "Bank Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Email"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payslip.run,available_advice:0
msgid "If this box is checked which means that Payment Advice exists for current batch"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Error !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Print"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
msgid "Payslip Batches"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,debit_credit:0
#: report:payroll.advice:0
msgid "C/D"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.employee.bymonth:0
msgid "Yearly Salary Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
msgid "Print Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,line_ids:0
msgid "Employee Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "July"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Configuration"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
msgid "Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
#: view:payment.advice.report:0
msgid "Advices Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc:0
msgid "IFSC"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,tds:0
msgid "TDS"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,join_date:0
msgid "Join Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.contract:0
msgid "Error! Contract start-date must be less than contract end-date."
msgstr ""
#. module: l10n_in_hr_payroll
#: field:res.company,dearness_allowance:0
msgid "Dearness Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "August"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Deduction"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Search Payment advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "SI. No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Payment Advices which are in confirm state"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "December"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Confirm Sheet"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,month:0
msgid "Month"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Non Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "or"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
msgid "Hr Salary Employee By Month Report"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,category_id:0
msgid "Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
#, python-format
msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "To Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.employee,number_of_year:0
msgid "No. of Years of Service"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Note"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Salary Rule Category"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: selection:hr.payroll.advice,state:0
#: view:payment.advice.report:0
#: selection:payment.advice.report,state:0
msgid "Draft"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Date From"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,voluntary_provident_fund:0
msgid "Voluntary Provident Fund"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Employee Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
msgid "Payment Advice Analysis"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:payment.advice.report:0
msgid "Status"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.contract,city_type:0
msgid "Type of City"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:res.company,dearness_allowance:0
msgid "Check this box if your company provide Dearness Allowance to employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,ifsc_code:0
#: field:payment.advice.report,ifsc_code:0
#: report:payroll.advice:0
msgid "IFSC Code"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "June"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,nbr:0
msgid "# Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
msgid "PaySlip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Payment Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,date:0
#: field:payment.advice.report,date:0
msgid "Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "November"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Extended Filters..."
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
msgid "This report performs analysis on Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "October"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Designation"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "January"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "Pay Head Employee Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:payroll.advice:0
msgid "Authorized Signature"
msgstr ""
#. module: l10n_in_hr_payroll
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
msgid "Contract"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice.line:0
msgid "Advice Lines"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "To,"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.contract,driver_salay:0
msgid "Check this box if you provide allowance for driver"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice.line,advice_id:0
#: field:hr.payslip,advice_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
msgid "Bank Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Other No."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Draft Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,neft:0
msgid "Check this box if your company use online transfer for salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "To"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:payment.advice.report,number:0
msgid "Number"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "September"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: view:hr.salary.employee.month:0
#: view:yearly.salary.detail:0
msgid "Cancel"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Day of Payment Advices"
msgstr ""
#. module: l10n_in_hr_payroll
#: constraint:hr.employee:0
msgid "Error! You cannot create recursive hierarchy of Employee(s)."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:yearly.salary.detail:0
msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Payslip Batches ready to be Adviced"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Pay Slip Details"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Total Salary"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,employee_id:0
#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
#: view:payment.advice.report:0
#: field:payment.advice.report,employee_id:0
msgid "Employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
msgid "Compute Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.employee,join_date:0
msgid "Joining date of employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Dear Sir/Madam,"
msgstr "Dear Sir/Madam,"
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,note:0
msgid "Description"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid ")"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:res.company:0
msgid "Payroll"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "NEFT"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
msgid "Address"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,bank_id:0
#: view:payment.advice.report:0
#: field:payment.advice.report,bank_id:0
#: report:payroll.advice:0
#: report:salary.detail.byyear:0
msgid "Bank"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,end_date:0
#: field:yearly.salary.detail,date_to:0
msgid "End Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "February"
msgstr ""
#. module: l10n_in_hr_payroll
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payroll.advice:0
#: field:hr.payroll.advice,name:0
#: report:paylip.details.in:0
#: field:payment.advice.report,name:0
#: report:salary.employee.bymonth:0
msgid "Name"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:hr.contract,city_type:0
msgid "Metro"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
#: field:hr.salary.employee.month,employee_ids:0
#: view:yearly.salary.detail:0
#: field:yearly.salary.detail,employee_ids:0
msgid "Employees"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Bank Account"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "April"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "Name of the Employe"
msgstr ""
#. module: l10n_in_hr_payroll
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
#, python-format
msgid "Please define bank account for the %s employee"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.salary.employee.month,start_date:0
#: field:yearly.salary.detail,date_from:0
msgid "Start Date"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.contract:0
msgid "Allowance"
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,bank_id:0
msgid "Select the Bank from which the salary is going to be paid"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.salary.employee.month:0
msgid "Employee Pay Head Breakup"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:salary.detail.byyear:0
msgid "Phone No."
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
msgid "Credit"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice.line,name:0
#: report:payroll.advice:0
msgid "Bank Account No."
msgstr ""
#. module: l10n_in_hr_payroll
#: help:hr.payroll.advice,date:0
msgid "Advice Date is used to search Payslips"
msgstr ""
#. module: l10n_in_hr_payroll
#: selection:payment.advice.report,month:0
msgid "May"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:hr.payslip.run:0
msgid "Create Advice"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
#: field:payment.advice.report,year:0
msgid "Year"
msgstr ""
#. module: l10n_in_hr_payroll
#: field:hr.payroll.advice,neft:0
#: field:payment.advice.report,neft:0
msgid "NEFT Transaction"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:paylip.details.in:0
#: report:salary.detail.byyear:0
#: report:salary.employee.bymonth:0
msgid "Total"
msgstr ""
#. module: l10n_in_hr_payroll
#: report:payroll.advice:0
msgid "form period"
msgstr ""
#. module: l10n_in_hr_payroll
#: view:payment.advice.report:0
msgid "Year of Payment Advices"
msgstr ""

View File

@ -6,7 +6,7 @@
<field name="name">payment.advice.report.tree</field>
<field name="model">payment.advice.report</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';black:state == 'confirm';gray:state == 'cancel' " string="Advices Analysis">
<tree colors="blue:state == 'draft';black:state == 'confirm';gray:state == 'cancel' " create="false" string="Advices Analysis">
<field name="nbr" sum="# Payment Lines"/>
<field name="name" invisible="1"/>
<field name="employee_id" invisible="1"/>

View File

@ -6,7 +6,7 @@
<field name="name">payslip.report.tree</field>
<field name="model">payslip.report</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';black:state == 'done';gray:state == 'cancel' " string="Payslip Analysis">
<tree colors="blue:state == 'draft';black:state == 'done';gray:state == 'cancel' " create="false" string="Payslip Analysis">
<field name="nbr" sum="# Payslip Lines"/>
<field name="name"/>
<field name="employee_id" invisible="1"/>

View File

@ -134,6 +134,7 @@ class mail_message(osv.Model):
'subtype_id': fields.many2one('mail.message.subtype', 'Subtype'),
'vote_user_ids': fields.many2many('res.users', 'mail_vote', 'message_id', 'user_id', string='Votes',
help='Users that voted for this message'),
'is_private': fields.boolean('Private message'),
}
def _needaction_domain_get(self, cr, uid, context=None):
@ -150,6 +151,7 @@ class mail_message(osv.Model):
'date': lambda *a: fields.datetime.now(),
'author_id': lambda self, cr, uid, ctx={}: self._get_default_author(cr, uid, ctx),
'body': '',
'is_private': True,
}
#------------------------------------------------------
@ -220,127 +222,12 @@ class mail_message(osv.Model):
'unread': msg.unread and msg.unread['unread'] or False
}
def message_read_tree_get_expandable(self, cr, uid, parent_message, last_message, domain=[], current_level=0, level=0, context=None):
""" . """
base_domain = [('id', '<', last_message['id'])]
if parent_message and current_level < level:
base_domain += [('parent_id', '=', parent_message['id'])]
elif parent_message:
base_domain += [('id', 'child_of', parent_message['id']), ('id', '!=', parent_message['id'])]
if domain:
base_domain += domain
extension = { 'type': 'expandable',
'domain': base_domain,
'thread_level': current_level,
'context': context,
'id': -1,
}
return extension
def message_read_tree_flatten(self, cr, uid, parent_message, messages, domain=[], level=0, current_level=0, context=None, limit=None, add_expandable=True):
""" Given a tree with several roots of following structure :
[ {'id': 1, 'child_ids': [
{'id': 11, 'child_ids': [...] },],
{...} ]
Flatten it to have a maximum number of levels, 0 being flat and
sort messages in a level according to a key of the messages.
Perform the flattening at leafs if above the maximum depth, then get
back in the tree.
:param context: ``sort_key``: key for sorting (id by default)
:param context: ``sort_reverse``: reverser order for sorting (True by default)
def _message_read_expandable(self, cr, uid, tree, result, message_loaded, domain, context, parent_id, limit):
"""
def _flatten(msg_dict):
""" from {'id': x, 'child_ids': [{child1}, {child2}]}
get [{'id': x, 'child_ids': []}, {child1}, {child2}]
"""
child_ids = msg_dict.pop('child_ids', [])
msg_dict['child_ids'] = []
return [msg_dict] + child_ids
context = context or {}
limit = limit or self._message_read_limit
# Depth-first flattening
for message in messages:
if message.get('type') == 'expandable':
continue
message['child_ids'] = self.message_read_tree_flatten(cr, uid, message, message['child_ids'], domain, level, current_level + 1, context=context, limit=limit)
for child in message['child_ids']:
if child.get('type') == 'expandable':
continue
message['child_nbr'] += child['child_nbr']
# Flatten if above maximum depth
if current_level < level:
return_list = messages
else:
return_list = [flat_message for message in messages for flat_message in _flatten(message)]
# Add expandable
return_list = sorted(return_list, key=itemgetter(context.get('sort_key', 'id')), reverse=context.get('sort_reverse', True))
if return_list and current_level == 0 and add_expandable:
expandable = self.message_read_tree_get_expandable(cr, uid, parent_message, return_list and return_list[-1] or parent_message, domain, current_level, level, context=context)
return_list.append(expandable)
elif return_list and current_level <= level and add_expandable:
expandable = self.message_read_tree_get_expandable(cr, uid, parent_message, return_list and return_list[-1] or parent_message, domain, current_level, level, context=context)
return_list.append(expandable)
return return_list
def message_read(self, cr, uid, ids=False, domain=[], level=0, context=None, parent_id=False, limit=None):
""" Read messages from mail.message, and get back a structured tree
of messages to be displayed as discussion threads. If IDs is set,
fetch these records. Otherwise use the domain to fetch messages.
After having fetch messages, their parents will be added to obtain
well formed threads.
:param domain: optional domain for searching ids
:param level: level of threads to display, 0 being flat
:param limit: number of messages to fetch
:param parent_id: if parent_id reached, stop searching for
further parents
:return list: list of trees of messages
create the expandable message for all parent message read
this function is used by message_read
"""
message_loaded = context and context.get('message_loaded') or [0]
# don't read the message display by .js, in context message_loaded list
if context and context.get('message_loaded'):
domain += [ ['id','not in',message_loaded] ];
limit = limit or self._message_read_limit
context = context or {}
tree = []
result = []
record = None
# select ids
if ids:
for msg in self.browse(cr, uid, ids, context=context):
result.append(self._message_dict_get(cr, uid, msg, context=context))
return result
# key: ID, value: record
ids = self.search(cr, SUPERUSER_ID, domain, context=context, limit=limit)
for msg in self.browse(cr, uid, ids, context=context):
# if not in record and not in message_loded list
if msg.id not in tree and msg.id not in message_loaded :
record = self._message_dict_get(cr, uid, msg, context=context)
tree.append(msg.id)
result.append(record)
while msg.parent_id and msg.parent_id.id != parent_id:
parent_id = msg.parent_id.id
if msg.parent_id.id not in tree:
msg = msg.parent_id
tree.append(msg.id)
# if not in record and not in message_loded list
if msg.id not in message_loaded :
record = self._message_dict_get(cr, uid, msg, context=context)
result.append(record)
result = sorted(result, key=lambda k: k['id'])
tree_not = []
# expandable for not show message
for id_msg in tree:
@ -367,10 +254,12 @@ class mail_message(osv.Model):
'parent_id': id_msg,
'id': id_min
})
id_min=None
id_max=None
nb=0
if nb>0:
result.append({
'domain': [['id','>=',id_min],['parent_id','=',id_msg]],
'domain': [['id','>=',id_min],['id','<=',id_max],['parent_id','=',id_msg]],
'nb_messages': nb,
'type': 'expandable',
'parent_id': id_msg,
@ -395,6 +284,73 @@ class mail_message(osv.Model):
return result
def message_read(self, cr, uid, ids=False, domain=[], level=0, context=None, parent_id=False, limit=None):
""" Read messages from mail.message, and get back a structured tree
of messages to be displayed as discussion threads. If IDs is set,
fetch these records. Otherwise use the domain to fetch messages.
After having fetch messages, their parents will be added to obtain
well formed threads.
:param domain: optional domain for searching ids
:param limit: number of messages to fetch
:param parent_id: if parent_id reached, stop searching for
further parents
:return list: list of trees of messages
"""
message_loaded = context and context.get('message_loaded') or [0]
# don't read the message display by .js, in context message_loaded list
if context and context.get('message_loaded'):
domain += [ ['id','not in',message_loaded] ];
limit = limit or self._message_read_limit
context = context or {}
tree = []
result = []
record = None
# select ids
if ids and ids!=[None]:
for msg in self.browse(cr, uid, ids, context=context):
result.append(self._message_dict_get(cr, uid, msg, context=context))
return result
# key: ID, value: record
ids = self.search(cr, SUPERUSER_ID, domain, context=context, limit=limit)
for msg in self.browse(cr, uid, ids, context=context):
# if not in record and not in message_loded list
if msg.id not in tree and msg.id not in message_loaded :
record = self._message_dict_get(cr, uid, msg, context=context)
tree.append(msg.id)
result.append(record)
while msg.parent_id and msg.parent_id.id != parent_id:
parent_id = msg.parent_id.id
if msg.parent_id.id not in tree:
msg = msg.parent_id
tree.append(msg.id)
# if not in record and not in message_loded list
if msg.id not in message_loaded :
record = self._message_dict_get(cr, uid, msg, context=context)
result.append(record)
result = sorted(result, key=lambda k: k['id'])
result = self._message_read_expandable(cr, uid, tree, result, message_loaded, domain, context, parent_id, limit)
return result
def user_free_attachment(self, cr, uid, context=None):
attachment_list = []
attachment = self.pool.get('ir.attachment')
attachment_ids = attachment.search(cr, uid, [('res_model','=',''),('create_uid','=',uid)])
if len(attachment_ids):
attachment_list = [{'id': attach.id, 'name': attach.name, 'date': attach.create_date} for attach in attachment.browse(cr, uid, attachment_ids, context=context)]
return attachment_list
#------------------------------------------------------
# Email api
#------------------------------------------------------
@ -525,11 +481,9 @@ class mail_message(osv.Model):
self.pool.get('ir.attachment').unlink(cr, uid, attachments_to_delete, context=context)
return super(mail_message, self).unlink(cr, uid, ids, context=context)
def _notify(self, cr, uid, newid, context=None):
def _notify_followers(self, cr, uid, newid, message, context=None):
""" Add the related record followers to the destination partner_ids.
Call mail_notification.notify to manage the email sending
"""
message = self.browse(cr, uid, newid, context=context)
partners_to_notify = set([])
# message has no subtype_id: pure log message -> no partners, no one notified
if not message.subtype_id:
@ -550,6 +504,14 @@ class mail_message(osv.Model):
self.write(cr, SUPERUSER_ID, [newid], {'partner_ids': [(4, p_id) for p_id in missing_notified]}, context=context)
partners_to_notify |= extra_notified
def _notify(self, cr, uid, newid, context=None):
""" Add the related record followers to the destination partner_ids if is not a private message.
Call mail_notification.notify to manage the email sending
"""
message = self.browse(cr, uid, newid, context=context)
if message and (message.is_private!=False and message.is_private!=None):
self._notify_followers(cr, uid, newid, message, context=context)
# add myself if I wrote on my wall,
# unless remove myself author
if ((message.model=="res.partner" and message.res_id==message.author_id.id)):

View File

@ -88,21 +88,21 @@
<field name="name">Inbox</field>
<field name="tag">mail.wall</field>
<field name="params" eval="&quot;{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', True)],
'context': {'default_model': 'res.users', 'default_res_id': uid} }&quot;"/>
'context': {'default_model': 'res.partner'} }&quot;"/>
</record>
<record id="action_mail_archives_feeds" model="ir.actions.client">
<field name="name">Archives</field>
<field name="tag">mail.wall</field>
<field name="params" eval="&quot;{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', False)],
'context': {'default_model': 'res.users', 'default_res_id': uid} }&quot;"/>
'context': {'default_model': 'res.partner'} }&quot;"/>
</record>
<record id="action_mail_sent_feeds" model="ir.actions.client">
<field name="name">Sent</field>
<field name="tag">mail.wall</field>
<field name="params" eval="&quot;{'domain': [('author_id.user_ids', 'in', [uid])],
'context': {'default_model': 'res.users', 'default_res_id': uid} }&quot;"/>
'context': {'default_model': 'res.partner'} }&quot;"/>
</record>
</data>
</openerp>

View File

@ -623,11 +623,10 @@ class mail_thread(osv.AbstractModel):
:param str subject: optional subject
:param str type: mail_message.type
:param int parent_id: optional ID of parent message in this thread
:param tuple(str,str) attachments: list of attachment tuples in the form
:param tuple(str,str) attachments or list id: list of attachment tuples in the form
``(name,content)``, where content is NOT base64 encoded
:return: ID of newly created mail.message
"""
context = context or {}
attachments = attachments or []
assert (not thread_id) or isinstance(thread_id, (int, long)) or \
@ -635,7 +634,7 @@ class mail_thread(osv.AbstractModel):
if isinstance(thread_id, (list, tuple)):
thread_id = thread_id and thread_id[0]
attachment_ids = []
attachment_ids=[]
for name, content in attachments:
if isinstance(content, unicode):
content = content.encode('utf-8')
@ -679,6 +678,13 @@ class mail_thread(osv.AbstractModel):
'attachment_ids': attachment_ids,
'subtype_id': subtype_id,
})
# if the parent is private, the message must be private
if parent_id:
msg = messages.browse(cr, uid, parent_id, context=context)
if msg.is_private:
values["is_private"] = msg.is_private
# Avoid warnings about non-existing fields
for x in ('from', 'to', 'cc'):
values.pop(x, None)
@ -691,10 +697,23 @@ class mail_thread(osv.AbstractModel):
def message_post_api(self, cr, uid, thread_id, body='', subject=False, type='notification',
subtype=None, parent_id=False, attachments=None, context=None, **kwargs):
added_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=type,
subtype=subtype, parent_id=parent_id, attachments=attachments, context=context)
added_message = self.pool.get('mail.message').message_read(cr, uid, [added_message_id])
# if the user write on his wall
if self._name=='res.partner' and not thread_id:
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
thread_id = user.partner_id.id
added_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=type,
subtype=subtype, parent_id=parent_id, context=context)
attachment_ids=[]
if attachments:
ir_attachment = self.pool.get('ir.attachment')
attachment_ids = ir_attachment.search(cr, 1, [('res_model', '=', ""), ('res_id', '=', ""), ('user_id', '=', uid), ('id', 'in', attachments)], context=context)
if attachment_ids:
self.pool.get('ir.attachment').write(cr, 1, attachment_ids, { 'res_model': self._name, 'res_id': thread_id }, context=context)
self.pool.get('mail.message').write(cr, 1, [added_message_id], {'attachment_ids': [(6, 0, [pid for pid in attachment_ids])]} )
added_message = self.pool.get('mail.message').message_read(cr, uid, [added_message_id])
return added_message
def get_message_subtypes(self, cr, uid, ids, context=None):

View File

@ -20,13 +20,13 @@
</record>
<record id="mail_archivesfeeds" model="ir.ui.menu">
<field name="name">Archives</field>
<field name="sequence" eval="11"/>
<field name="sequence" eval="12"/>
<field name="action" ref="action_mail_archives_feeds"/>
<field name="parent_id" ref="mail_feeds"/>
</record>
<record id="mail_sentfeeds" model="ir.ui.menu">
<field name="name">Sent</field>
<field name="sequence" eval="12"/>
<field name="sequence" eval="13"/>
<field name="action" ref="action_mail_sent_feeds"/>
<field name="parent_id" ref="mail_feeds"/>
</record>

View File

@ -82,9 +82,13 @@
overflow: auto;
}
.openerp .oe_mail_record_wall {
margin: auto;
width: 560px;
}
.openerp .oe_mail_record_wall > .oe_mail_wall_threads {
float: left;
width: 560px;
}
.openerp div.oe_mail_recthread_aside {
@ -145,6 +149,10 @@
z-index: 5;
}
.openerp .oe_mouse_subtypes .oe_recthread_subtypes {
background: #fff;
padding: 2px;
border: 1px solid #aaaaaa;
border-top: 0px;
position: absolute;
z-index: 2;
}
@ -160,7 +168,6 @@
/* ------------------------------------------------------------ */
.openerp div.oe_mail_thread_action {
display: none;
white-space: normal;
padding: 8px;
z-index:5;
@ -173,16 +180,6 @@
clear: both;
}
/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
.openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea,
.openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea {
width: 474px;
height: 60px;
padding: 4px;
font-size: 12px;
border: 1px solid #cccccc;
}
/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
.openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea:focus,
.openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea:focus {
@ -206,6 +203,10 @@
margin-left: 66px;
}
.openerp li.oe_mail_thread_msg {
width: 560px;
}
.openerp div.oe_thread_placeholder li.oe_mail_thread_msg:last-child {
margin-bottom: 8px;
}
@ -223,13 +224,18 @@
.openerp li.oe_mail_thread_msg.oe_mail_read,
.openerp li.oe_mail_thread_msg.oe_mail_read div {
background-color: #F0F0F0;
border-left: #F0F0F0;
}
.openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread,
.openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread div {
background-color: #F6F6F6;
}
.openerp li.oe_mail_thread_msg.oe_mail_unread>div>ul>li.oe_unread,
.openerp li.oe_mail_thread_msg.oe_mail_read>div>ul>li.oe_read {
display: none;
}
.openerp li.oe_mail_thread_msg > div:after {
content: "";
display: block;
@ -247,7 +253,7 @@
.openerp .oe_mail_msg_email {
padding: 8px;
background: white;
border-top: 1px solid #ebebeb;
position: relative;
}
.openerp .oe_mail_msg_notification:after,
@ -259,7 +265,7 @@
}
.openerp div.oe_mail_msg_content {
float: right;
float: left;
position: relative;
width: 486px;
}
@ -309,76 +315,6 @@
display: none;
}
/* ------------------------------------------------------------ */
/* mail.compose.message form view & OpenERP hacks
/* ------------------------------------------------------------ */
/* form_view: delete white background */
.openerp .oe_mail_msg_content div.oe_formview {
background-color: transparent;
}
.openerp .oe_mail_msg_content div.oe_form_nosheet {
margin: 0px;
}
.openerp .oe_mail_msg_content table.oe_form_group {
margin: 0px;
}
.openerp .oe_mail_msg_content table.oe_form_field,
.openerp .oe_mail_msg_content div.oe_form_field {
padding: 0px;
}
.openerp .oe_mail_msg_content td.oe_form_group_cell {
vertical-align: bottom;
}
/* subject: change width */
.openerp .oe_mail_msg_content .oe_form .oe_form_field input {
width: 472px;
}
/* body_html: cleditor */
.openerp .oe_mail_msg_content div.cleditorMain {
border: 1px solid #cccccc;
}
/* destination_partner_ids */
.openerp .oe_mail_msg_content div.text-core {
height: 22px !important;
width: 472px;
}
/* buttons */
.openerp .oe_mail_msg_content .oe_mail_compose_message_icons button.oe_form_button {
padding: 1px;
}
/* attachment button: override of openerp values */
.openerp .oe_mail_msg_content .oe_mail_compose_message_icons div.oe_hidden_input_file {
display: inline-block;
width: 24px;
height: 24px;
margin: 2px;
}
.openerp .oe_mail_msg_content .oe_mail_compose_message_icons div.oe_hidden_input_file button {
margin: 0px;
}
.openerp .oe_mail_msg_content .oe_mail_compose_message_icons input.oe_form_binary_file {
bottom: 0px;
top: auto;
left: auto;
right: 28px;
height: 26px;
width: 26px;
min-width: 22px;
font-size: 0px;
margin: 0px;
padding: 0px;
}
/* ------------------------------------------------------------ */
/* Messages layout
/* ------------------------------------------------------------ */
@ -413,39 +349,27 @@
}
/* Dropdown menu */
/*.openerp .oe_mail_msg_content .oe_dropdown_toggle {
position: absolute;
top: 0px;
right: 3px;
}*/
.openerp .oe_mail .oe_semantic_html_override {
.openerp .oe_mail ul.oe_mail_thread_display ul.oe_mail_thread_display {
position: relative;
border-left: 1px #DDD dashed;
}
.openerp .oe_mail ul.oe_header {
position: absolute;
right: 3px;
top: -6px;
display: none;
z-index: 10;
height: 18px;
}
.openerp .oe_mail ul.oe_header a {
text-decoration: none;
}
.openerp .oe_mail .oe_semantic_html_override:hover > ul.oe_header {
display: block;
}
.openerp .oe_mail ul.oe_header>li {
display: inline-block;
}
.openerp .oe_mail_msg_content .oe_dropdown_arrow:after {
border-top: 4px solid #404040;
height: 20px;
text-align: right;
}
/* Message footer */
@ -465,16 +389,36 @@
/* Attachments list */
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments {
display: none;
width: 100%;
border-top: 1px solid #CCC;
margin: .5em 0 0 0;
padding: .5em 0;
list-style-position: inside;
}
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments.oe_hidden {
display: none;
}
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments li {
float: none;
height: 20px;
line-height: 20px;
margin: 0;
padding: 0;
list-style-type: square;
}
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process {
float: right;
width: 200px;
height: 16px;
}
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process div {
float: left;
width: 38px;
height: 16px;
margin-right: 2px;
background: #66FF66;
}
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process span {
color: #aaaaaa;
position: absolute;
}

View File

@ -1,12 +1,166 @@
/* ------------------------------ */
/* Compose Message Wizard Form */
/* Compose Message */
/* ------------------------------ */
.openerp .oe_mail_compose_message_icons {
text-align: right;
.openerp .oe_mail_msg_content .oe_mail_compose_message_footer {
height: 24px;
}
.openerp .oe_mail_compose_message_icons img {
width: 20px;
height: 20px;
.openerp .oe_mail_msg_content .oe_mail_compose_message_footer button.oe_mail_compose_message_button_send {
float: left;
}
.openerp .oe_mail .oe_mail_compose_textarea
{
display: none;
}
.openerp .oe_mail .oe_mail_compose_textarea .oe_mail_post_header,
.openerp .oe_mail .oe_mail_compose_textarea .oe_mail_post_footer,
{
position: relative;
}
.openerp .oe_mail .oe_mail_compose_textarea a.oe_cancel {
position: absolute;
right: -8px;
top: -8px;
}
.openerp .oe_mail .oe_mail_compose_textarea a.oe_cancel:first-of-type {
display:none;
}
.openerp .oe_mail .oe_mail_compose_textarea button.oe_full {
float: right;
position: relative;
right: -10px;
}
/* ------------------------------------------------------------ */
/* mail.compose.message : list_recipients
/* ------------------------------------------------------------ */
.openerp .oe_mail .oe_mail_list_recipients {
display: inline;
}
.openerp .oe_mail .oe_mail_list_recipients .oe_all_follower {
color: blue;
}
.openerp .oe_mail .oe_mail_list_recipients .oe_partner_follower a {
color: red;
}
.openerp .oe_mail .oe_mail_list_recipients .oe_hidden,
.openerp .oe_mail .oe_mail_list_recipients .oe_more_hidden {
display: none;
}
/* ------------------------------------------------------------ */
/* mail.compose.message : attachment
/* ------------------------------------------------------------ */
.openerp .oe_mail .oe_attachment_file {
display: inline-block;
}
.openerp .oe_mail .oe_attachment_file .oe_add {
float: left;
width: 24px;
height: 24px;
position: relative;
z-index: 10;
left: +2px;
top: +7px;
overflow: hidden;
}
/* attachment button: override of openerp values */
.openerp .oe_mail .oe_attachment_file .oe_add button,
.openerp .oe_mail .oe_attachment_file .oe_add input.oe_insert_file {
position: absolute;
bottom: +0px;
left: +0px;
height: 24px;
width: 24px;
margin: 0px;
padding: 0px;
}
.openerp .oe_mail .oe_attachment_file .oe_add input.oe_insert_file {
z-index:2;
width: 300px;
left: -100px;
background: transparent;
border: 0;
color: transparent;
}
.openerp .oe_mail .oe_attachment_file .oe_add button span {
position: relative;
bottom: +4px;
font-size: 30px;
}
.openerp .oe_mail .oe_mail_msg_attachments input {
visibility: hidden;
}
.openerp .oe_mail .oe_mail_compose_attachment_list {
clear: both;
}
/* ------------------------------------------------------------ */
/* mail.compose.message
/* ------------------------------------------------------------ */
/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
.openerp .oe_mail.oe_semantic_html_override .oe_mail_compose_textarea textarea.field_text,
.openerp .oe_mail div.oe_mail_compose_message_body textarea.field_text {
width: 100%;
min-height: 120px;
height: auto;
padding: 4px;
font-size: 12px;
border: 1px solid #cccccc;
}
/* not top textarea */
.openerp .oe_mail.oe_semantic_html_override .oe_semantic_html_override .oe_mail_compose_textarea textarea.field_text {
height: 60px;
}
/* form_view: delete white background */
.openerp .oe_mail_msg_content div.oe_formview {
background-color: transparent;
}
.openerp .oe_mail_msg_content div.oe_form_nosheet {
margin: 0px;
}
.openerp .oe_mail_msg_content table.oe_form_group {
margin: 0px;
}
.openerp .oe_mail_msg_content table.oe_form_field,
.openerp .oe_mail_msg_content div.oe_form_field {
padding: 0px;
}
.openerp .oe_mail_msg_content td.oe_form_group_cell {
vertical-align: bottom;
}
/* subject: change width */
.openerp .oe_mail_msg_content .oe_form .oe_form_field input[type='text'] {
width: 472px;
}
/* body_html: cleditor */
.openerp .oe_mail_msg_content div.cleditorMain {
border: 1px solid #cccccc;
}
/* destination_partner_ids */
.openerp .oe_mail_msg_content div.text-core {
height: 22px !important;
width: 472px;
}

File diff suppressed because it is too large Load Diff

View File

@ -40,6 +40,7 @@ openerp_mail_followers = function(session, mail) {
this._check_visibility();
this.reinit();
this.bind_events();
this.display_subtypes();
},
_check_visibility: function() {
@ -53,31 +54,15 @@ openerp_mail_followers = function(session, mail) {
bind_events: function() {
var self = this;
this.$('div.oe_mouse_subtypes')
.on('mouseover', function () {
$(this).removeClass('oe_mouseout').addClass('oe_mouseover');
self.display_subtypes();
})
.on('mouseleave', function () {
$(this).removeClass('oe_mouseover').addClass('oe_mouseout');
self.display_subtypes();
});
this.$('button.oe_follower')
.on('click', function () {
if($(this).hasClass('oe_notfollow'))
self.do_follow();
else
self.do_unfollow();
})
.on('mouseover', function () {
$(this).removeClass('oe_mouseout').addClass('oe_mouseover');
})
.on('mouseleave', function () {
$(this).removeClass('oe_mouseover').addClass('oe_mouseout');
});
this.$el.on('click', 'ul.oe_subtypes input', function () { self.do_update_subscription(); })
this.$el.on('click', 'ul.oe_subtypes input', self.do_update_subscription );
this.$el.on('click', 'button.oe_invite', function(event) {
action = {
@ -173,7 +158,8 @@ openerp_mail_followers = function(session, mail) {
set_subtypes:function(data){
var self = this;
var records = data[this.view.datarecord.id].message_subtype_data;
var records = (data[this.view.datarecord.id] || data[null]).message_subtype_data;
_(records).each(function (record, record_name) {
record.name = record_name;
record.followed = record.followed || undefined;
@ -194,16 +180,10 @@ openerp_mail_followers = function(session, mail) {
},
do_follow: function () {
var self =this;
_(this.$('.oe_msg_subtype_check')).each(function(record){
$(record).attr('checked','checked');
});
var context = new session.web.CompoundContext(this.build_context(), {});
return this.ds_model.call('message_subscribe_users', [[this.view.datarecord.id], undefined, undefined, context]).pipe(function(value_){
self.read_value(value_);
if(!self.$('.oe_recthread_subtypes').is(":visible"))
self.display_subtypes(true);
});
this.do_update_subscription();
},
do_unfollow: function () {
@ -211,23 +191,28 @@ openerp_mail_followers = function(session, mail) {
$(record).attr('checked',false);
});
var context = new session.web.CompoundContext(this.build_context(), {});
return this.ds_model.call('message_unsubscribe_users', [[this.view.datarecord.id], undefined, context]).pipe(this.proxy('read_value'));
return this.ds_model.call('message_unsubscribe_users', [[this.view.datarecord.id], [this.session.uid], context]).pipe(this.proxy('read_value'));
},
do_update_subscription: function () {
var context = new session.web.CompoundContext(this.build_context(), {});
do_update_subscription: function (event) {
var self = this;
var checklist = new Array();
_(this.$('.oe_msg_subtype_check')).each(function(record){
_(this.$('.oe_mail_recthread_actions input[type="checkbox"]')).each(function(record){
if($(record).is(':checked')) {
checklist.push(parseInt($(record).data('id')))}
});
if(!checklist.length)
return this.do_unfollow();
else
return this.ds_model.call('message_subscribe_users',[[self.view.datarecord.id], undefined, checklist, context]).pipe(this.proxy('read_value'));
else{
var context = new session.web.CompoundContext(this.build_context(), {});
return this.ds_model.call('message_subscribe_users', [[this.view.datarecord.id], [this.session.uid], undefined, context]).pipe(function(value_){
self.read_value(value_);
self.display_subtypes(true);
});
}
},
});

View File

@ -1,11 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<template>
<!--
mail.compose_message template
This template holds the composition form to write a note or send
an e-mail. It contains by default a textarea, that will be replaced
by another composition form in the main wall composition form, or
for main thread composition form in document form view.
-->
<t t-name="mail.compose_message">
<div class="oe_mail_compose_textarea">
<img class="oe_mail_icon oe_mail_frame oe_left" alt="User img"/>
<div class="oe_mail_msg_content">
<!-- contains the composition form -->
<!-- default content: old basic textarea -->
<div class="oe_mail_post_header">
<t t-call="mail.thread.list_recipients"/>
<a class="oe_cancel oe_e">X</a>
</div>
<textarea class="field_text" placeholder="Add your comment here..."/>
<div class="oe_mail_post_footer">
<div class="oe_mail_compose_attachment_list"/>
<button class="oe_full">Full mail message</button>
<button class="oe_post">Post message</button>
<t t-call="mail.compose_message.add_attachment"/>
</div>
</div>
<div class="oe_clear"/>
</div>
</t>
<!--
mail.compose_message.add_attachment template
Small template to be inserted in the composition for add attachments
-->
<t t-name="mail.compose_message.add_attachment">
<div class="oe_attachment_file">
<div class="oe_add">
<!-- uploader of file -->
<button><span class="oe_e">p</span></button>
<t t-call="HiddenInputFile">
<t t-set="fileupload_id" t-value="widget.fileupload_id"/>
<t t-set="fileupload_action">/web/binary/upload_attachment</t>
<input type="hidden" name="model" value=""/>
<input type="hidden" name="id" value="0"/>
<input type="hidden" name="session_id" t-att-value="widget.session.session_id"/>
</t>
</div>
</div>
</t>
<!--
mail.thread.message.attachments template
Template used to display attachments in a mail.message
-->
<t t-name="mail.thread.message.attachments">
<ul t-attf-class="oe_mail_msg_attachments #{widget.attachment_ids[0] and widget.options.thread.show_attachment_link?'':'oe_hidden'}">
<t t-foreach="widget.attachment_ids" t-as="attachment">
<li>
<span t-if="(attachment.upload or attachment.percent_loaded&lt;100)" t-attf-title="{(attachment.name || attachment.filename) + (attachment.date?' \n('+attachment.date+')':'' )}" t-attf-name="{attachment.name || attachment.filename}">
<div class="oe_upload_in_process">
<span>Upload in progress...</span>
<div t-attf-style="{attachment.percent_loaded&gt;0?'':'display:none;'}"/>
<div t-attf-style="{attachment.percent_loaded&gt;20?'':'display:none;'}"/>
<div t-attf-style="{attachment.percent_loaded&gt;40?'':'display:none;'}"/>
<div t-attf-style="{attachment.percent_loaded&gt;60?'':'display:none;'}"/>
<div t-attf-style="{attachment.percent_loaded&gt;80?'':'display:none;'}"/>
</div>
<t t-raw="attachment.name || attachment.filename"/>
</span>
<a t-if="(!attachment.upload or attachment.percent_loaded&gt;=100)" t-att-href="attachment.url" t-attf-title="{(attachment.name || attachment.filename) + (attachment.date?' \n('+attachment.date+')':'' )}">
<t t-raw="attachment.name || attachment.filename"/>
</a>
<t t-if="widget.options.thread.show_attachment_delete and (!attachment.upload or attachment.percent_loaded&gt;=100)">
<a class="oe_right oe_mail_attachment_delete" title="Delete this attachment" t-attf-data-id="{attachment.id}">x</a>
</t>
</li>
</t>
</ul>
</t>
<t t-name="mail.thread.message.private">
<div>
<span class="oe_placeholder_checkbox_private"/>
<span class="oe_send_private">This email is private.</span>
<span class="oe_send_public">I wrote for contacts and all my followers.</span>
</div>
</t>
<!--
template to the recipients list
-->
<t t-name="mail.thread.list_recipients">
<div class="oe_mail_list_recipients">
Post to:
<span t-if="!widget.is_private" class="oe_all_follower">All Followers</span>
<t t-if="!widget.is_private and widget.partner_ids.length"> and </t>
<t t-set="inc" t-value="0"/>
<t t-if="widget.partner_ids.length" t-foreach="widget.partner_ids" t-as="partner"><span t-attf-class="oe_partner_follower #{inc>=3?'oe_hidden':''}"><t t-if="inc" t-raw="', '"/><a t-attf-href="#model=res.partner&amp;id=#{partner[0]}"><t t-raw="partner[1]"/></a></span><t t-set="inc" t-value="inc+1"/>
</t>
<t t-if="widget.partner_ids.length>=3">
<span class="oe_more">, <a><t t-raw="widget.partner_ids.length-3"/> others...</a></span>
<a class="oe_more_hidden">&lt;&lt;&lt;</a>
</t>
</div>
</t>
<!--
wall main template
Template used to display the communication history in the wall.
-->
<div t-name="mail.wall" class="oe_view_manager oe_mail_wall oe_view_manager_current">
<div t-name="mail.wall" class="oe_view_manager oe_mail_wall oe_view_manag
er_current">
<table class="oe_view_manager_header">
<colgroup>
<col width="33%"/>
@ -25,21 +132,30 @@
</td>
<td><div class="oe_view_manager_view_search" t-opentag="true"/></td>
</tr>
<tr class="oe_header_row">
<td colspan="2">
<button type="button" class="oe_write_full oe_highlight">
Compose a new message
</button>
<button type="button" class="oe_write_onwall" help="Your followers can read this message">
Write to your followers
</button>
</td>
</tr>
</tbody>
</table>
<ul class="oe_mail_wall_threads">
<!-- contains threads -->
</ul>
<!-- placeholder for the wall threads -->
<div class="oe_mail_wall_threads"/>
<div class="oe_mail_wall_aside">
<!-- contains currently nothing -->
</div>
</div>
<!--
wall_thread_container template for the wall
Each discussion thread is contained inside this template
display message on the wall when there are no message
-->
<li t-name="mail.wall_thread_container" class="oe_mail_wall_thread">
<li t-name="mail.wall_no_message" class="oe_wall_no_message">
You have no messages
</li>
<!--
@ -54,39 +170,6 @@
</ul>
</div>
<!--
mail.compose_message template
This template holds the composition form to write a note or send
an e-mail. It contains by default a textarea, that will be replaced
by another composition form in the main wall composition form, or
for main thread composition form in document form view.
-->
<t t-name="mail.compose_message">
<div class="oe_mail_compose_textarea">
<img class="oe_mail_icon oe_mail_frame oe_left" alt="User img"/>
<div class="oe_mail_msg_content">
<!-- contains the composition form -->
<!-- default content: old basic textarea -->
<textarea placeholder="Add your comment here..."/>
</div>
<div class="oe_clear"/>
</div>
</t>
<!--
mail.compose_message.add_attachment template
Small template to be inserted in the composition form to add attachments
-->
<t t-name="mail.compose_message.add_attachment">
<t t-call="HiddenInputFile">
<t t-set="fileupload_id" t-value="widget.fileupload_id"/>
<t t-set="fileupload_action">/web/binary/upload_attachment</t>
<input type="hidden" name="model" t-att-value="widget.form_view.model"/>
<input type="hidden" name="id" t-att-value="widget.form_view.datarecord.id || 0"/>
<input type="hidden" name="session_id" t-att-value="widget.session.session_id"/>
</t>
</t>
<!--
thread template
This template holds a thread of comments. It begins with an actions
@ -96,7 +179,6 @@
<div t-name="mail.thread" class="oe_mail oe_mail_thread oe_semantic_html_override">
<div class="oe_mail_thread_action">
<!-- contains the composition box (form + image) -->
<t t-call="mail.compose_message"/>
</div>
<ul class="oe_mail_thread_display">
<!-- contains the threads -->
@ -104,16 +186,15 @@
</div>
<!-- default layout -->
<li t-name="mail.thread.message" t-attf-class="oe_mail oe_mail_thread_msg #{widget.unread?'oe_mail_unread':'oe_mail_read'}" t-attf-data-msg_id="{widget.id}">
<li t-name="mail.thread.message" t-attf-class="oe_mail oe_mail_thread_msg #{widget.unread?'oe_mail_unread':'oe_mail_read'}">
<div t-attf-class="oe_mail_msg_#{widget.type} oe_semantic_html_override">
<!-- message actions (read/unread, reply, delete...) -->
<ul class="oe_header">
<li class="placeholder-mail-vote"><t t-call="mail.thread.message.vote"/></li>
<li t-if="!widget.options.thread.display_on_flat and widget.unread" title="Read"><a class="oe_read oe_e">W</a></li>
<li t-if="!widget.options.thread.display_on_flat and !widget.unread" title="Set back to unread"><a class="oe_unread oe_e">h</a></li>
<li t-if="!widget.options.message.show_reply_by_email" title="Reply"><a class="oe_reply oe_e">)</a></li>
<li t-if="widget.options.message.show_reply_by_email"><a class="oe_reply_by_email oe_e" title="Reply by mail">)</a></li>
<t t-if="(widget.options.message.show_reply || widget.options.message.show_reply_by_email || (widget.is_author and widget.options.message.show_dd_delete) || widget.type == 'email')">
<li t-if="!widget.options.thread.display_on_flat" title="Read" class="oe_read"><a class="oe_read oe_e">W</a></li>
<li t-if="!widget.options.thread.display_on_flat" title="Set back to unread" class="oe_unread"><a class="oe_unread oe_e">h</a></li>
<li title="Quick reply"><a class="oe_reply oe_e">)</a></li>
<t t-if="(widget.is_author and widget.options.message.show_dd_delete) or widget.type == 'email'">
<li>
<span class="oe_dropdown_toggle">
<a class="oe_e" title="More options">í</a>
@ -123,8 +204,6 @@
<li t-if="display['show_hide']">
<a href="#" class="oe_mail_msg_hide_type" t-attf-data-subtype='{widget.subtype}'>Hide '<t t-esc="widget.subtype"/>' for this document</a>
</li> -->
<li t-if="widget.options.message.show_reply" title="Reply"><a class="oe_reply oe_full_reply">Full reply</a></li>
<li t-if="widget.options.message.show_reply_by_email"><a class="oe_reply_by_email oe_full_reply" title="Reply by mail">Full reply</a></li>
<li t-if="widget.type == 'email'"><a class="oe_mail_msg_details" t-attf-href="#model=mail.message&amp;id=#{widget.id}" >Details</a></li>
</ul>
</span>
@ -145,7 +224,6 @@
<ul class="oe_mail_msg_footer">
<li t-if="widget.author_id"><a t-attf-href="#model=res.partner&amp;id=#{widget.author_id[0]}"><t t-raw="widget.author_id[1]"/></a></li>
<li><span t-att-title="widget.date"><t t-raw="widget.timerelative"/></span></li>
<li t-if="widget.attachment_ids.length > 0">
<a class="oe_mail_msg_view_attachments">
<t t-if="widget.attachment_ids.length == 1">1 Attachment</t>
@ -155,7 +233,7 @@
</ul>
<div class="oe_clear"/>
<div class="oe_mail_msg_body">
<t t-if="widget.options.message.show_record_name and widget.record_name and (!widget.subject) and widget.options.thread._parents.length&lt;=widget.options.thread.thread_level and widget.model!='res.partner'">
<t t-if="widget.options.message.show_record_name and widget.record_name and (!widget.subject) and !widget.options.thread.thread_level and !widget.options.thread.display_on_flat and widget.model!='res.partner'">
<a class="oe_mail_action_model" t-attf-href="#model=#{widget.model}&amp;id=#{widget.res_id}"><t t-raw="widget.record_name"/></a>
</t>
<t t-raw="widget.body"/>
@ -171,7 +249,7 @@
</li>
<!-- expandable message layout -->
<li t-name="mail.thread.expandable" t-attf-class="oe_mail oe_mail_thread_msg oe_mail_unread" t-attf-data-thread_id="{widget.id}">
<li t-name="mail.thread.expandable" class="oe_mail oe_mail_thread_msg oe_mail_unread">
<div t-attf-class="oe_mail_msg_#{widget.type} oe_semantic_html_override">
<div class="oe_mail_msg_content oe_mail_msg_more_message">
<a class="oe_mail_fetch_more">Load more messages <span t-if="widget.nb_messages>0">(<t t-raw="widget.nb_messages"/> messages not display)</span>...</a>
@ -179,23 +257,6 @@
</div>
</li>
<!--
mail.thread.message.attachments template
Template used to display attachments in a mail.message
-->
<t t-name="mail.thread.message.attachments">
<ul class="oe_mail_msg_attachments">
<t t-foreach="record.attachment_ids" t-as="attachment">
<li>
<a t-att-href="attachment.url"><t t-raw="attachment.name || attachment.filename"/></a>
<t t-if="record.show_attachment_delete">
<a class="oe_right oe_mail_attachment_delete" title="Delete this attachmentt" t-attf-data-id="{attachment.id}">x</a>
</t>
</li>
</t>
</ul>
</t>
<!-- mail.thread.message.vote
Template used to display Like/Unlike in a mail.message
-->
@ -215,7 +276,7 @@
<button t-attf-class="oe_mail_msg_vote oe_tag">
<span>
<t t-if="!widget.has_voted">Agree</t>
<t t-if="widget.has_voted">Unagree</t>
<t t-if="widget.has_voted">Undo</t>
</span>
</button>
</span>

View File

@ -13,9 +13,9 @@
<span class="oe_unfollow">Unfollow</span>
<span class="oe_following">Following</span>
</button>
<div class="oe_recthread_subtypes">
<ul class="oe_subtypes"></ul>
</div>
</div>
<div class="oe_recthread_subtypes">
<ul class="oe_subtypes"></ul>
</div>
</div>
<div class="oe_grey">

View File

@ -529,109 +529,6 @@ class test_mail(TestMailMockups):
self.assertEqual(message2.subject, _subject, 'mail.message subject incorrect')
self.assertEqual(message2.body, group_bird.description, 'mail.message body incorrect')
# FP Note: to be reviewed to be more generic, not depending on the algorythm of
# message_read
#def test_30_message_read(self):
# """ Tests designed for message_read. """
# # TDE NOTE: this test is not finished, as the message_read method is not fully specified.
# # It will be updated as soon as we have fixed specs !
# cr, uid = self.cr, self.uid
# group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
# def _compare_structures(struct1, struct2, n=0):
# # print '%scompare structure' % ('\t' * n)
# # self.assertEqual(len(struct1), len(struct2), 'message_read structure number of childs incorrect')
# for x in range(len(struct1)):
# if struct1[x].get('type') == 'expandable':
# continue
# # print '%s' % ('\t' * n), struct1[x]['id'], struct1[x]['child_nbr'], struct2[x]['id'], struct2[x].get('child_nbr', 'XX'), struct1[x].get('subject') or ''
# self.assertEqual(struct1[x]['id'], struct2[x]['id'], 'message_read failure %s' % struct1[x].get('subject'))
# _compare_structures(struct1[x]['child_ids'], struct2[x]['child_ids'], n + 1)
# # print '%send compare' % ('\t' * n)
# # ----------------------------------------
# # CASE1: Flattening test
# # ----------------------------------------
# # Create dummy message structure
# import copy
# tree = [{'id': 2, 'child_nbr': 1, 'child_ids': [
# {'id': 6, 'child_nbr': 1, 'child_ids': [
# {'id': 8, 'child_nbr': 0, 'child_ids': []},
# ]},
# ]},
# {'id': 1, 'child_nbr': 3, 'child_ids':[
# {'id': 7, 'child_nbr': 1, 'child_ids': [
# {'id': 9, 'child_nbr': 0, 'child_ids': []},
# ]},
# {'id': 4, 'child_nbr': 2, 'child_ids': [
# {'id': 10, 'child_nbr': 0, 'child_ids': []},
# {'id': 5, 'child_nbr': 0, 'child_ids': []},
# ]},
# {'id': 3, 'child_nbr': 0, 'child_ids': []},
# ]},
# ]
# # Test: completely flat
# new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 0, limit=15, add_expandable=False)
# _compare_structures(new_tree, new_tree)
# self.assertEqual(len(new_tree), 10, 'message_read_tree_flatten wrong in flat')
# # Test: 1 thread level
# tree_test = [{'id': 2, 'child_ids': [
# {'id': 8, 'child_ids': []}, {'id': 6, 'child_ids': []},
# ]},
# {'id': 1, 'child_ids': [
# {'id': 10, 'child_ids': []}, {'id': 9, 'child_ids': []},
# {'id': 7, 'child_ids': []}, {'id': 5, 'child_ids': []},
# {'id': 4, 'child_ids': []}, {'id': 3, 'child_ids': []},
# ]},
# ]
# new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 1, limit=15, add_expandable=False)
# _compare_structures(new_tree, tree_test)
# # Test: 2 thread levels
# new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 2, limit=15, add_expandable=False)
# _compare_structures(new_tree, tree)
# # ----------------------------------------
# # CASE2: message_read test
# # ----------------------------------------
# # 1. Add a few messages to pigs group
# msgid1 = group_pigs.message_post(body='1', subject='1', parent_id=False)
# msgid2 = group_pigs.message_post(body='2', subject='1-1', parent_id=msgid1)
# msgid3 = group_pigs.message_post(body='3', subject='1-2', parent_id=msgid1)
# msgid4 = group_pigs.message_post(body='4', subject='2', parent_id=False)
# msgid5 = group_pigs.message_post(body='5', subject='1-1-1', parent_id=msgid2)
# msgid6 = group_pigs.message_post(body='6', subject='2-1', parent_id=msgid4)
# # Test: read all messages flat
# tree_test = [{'id': msgid6, 'child_ids': []}, {'id': msgid5, 'child_ids': []},
# {'id': msgid4, 'child_ids': []}, {'id': msgid3, 'child_ids': []},
# {'id': msgid2, 'child_ids': []}, {'id': msgid1, 'child_ids': []}]
# tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=0, limit=15)
# _compare_structures(tree, tree_test)
# # Test: read with 1 level of thread
# tree_test = [{'id': msgid4, 'child_ids': [{'id': msgid6, 'child_ids': []}, ]},
# {'id': msgid1, 'child_ids': [
# {'id': msgid5, 'child_ids': []}, {'id': msgid3, 'child_ids': []},
# {'id': msgid2, 'child_ids': []},
# ]},
# ]
# tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=1, limit=15)
# _compare_structures(tree, tree_test)
# # Test: read with 2 levels of thread
# tree_test = [{'id': msgid4, 'child_ids': [{'id': msgid6, 'child_ids': []}, ]},
# {'id': msgid1, 'child_ids': [
# {'id': msgid3, 'child_ids': []},
# {'id': msgid2, 'child_ids': [{'id': msgid5, 'child_ids': []}, ]},
# ]},
# ]
# tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=2, limit=15)
# _compare_structures(tree, tree_test)
# # 2. Test expandables
# # TDE FIXME: add those tests when expandables are specified and implemented
def test_40_needaction(self):
""" Tests for mail.message needaction. """
cr, uid = self.cr, self.uid

View File

@ -81,7 +81,11 @@ class mail_compose_message(osv.TransientModel):
elif composition_mode == 'comment' and model and res_id:
vals = self.get_record_data(cr, uid, model, res_id, context=context)
elif composition_mode == 'mass_mail' and model and active_ids:
vals = {'model': model, 'res_id': res_id, 'content_subtype': 'html'}
if context.get('default_template_id'):
vals = self.pool.get('email.template').generate_email(cr, uid, context.get('default_template_id'), res_id, context=context)
vals.update({'content_subtype': 'html'})
else:
vals = {'model': model, 'res_id': res_id, 'content_subtype': 'html'}
else:
vals = {'model': model, 'res_id': res_id}
if composition_mode:
@ -219,7 +223,6 @@ class mail_compose_message(osv.TransientModel):
email(s), rendering any template patterns on the fly if needed. """
if context is None:
context = {}
print '**', context
active_ids = context.get('active_ids')
for wizard in self.browse(cr, uid, ids, context=context):

View File

@ -16,13 +16,11 @@
<field name="partner_ids" widget="many2many_tags" placeholder="Add contacts to notify..."
context="{'force_email':True}"
on_change="onchange_partner_ids(partner_ids)"/>
<field name="is_private" help="If this message is not private, this message will send to all your followers or all followers of the parented message."/>
</group>
<notebook>
<page string="Body">
<field name="body_text" nolabel="1"
attrs="{'invisible':[('content_subtype', '=', 'html')]}"/>
<field name="body" nolabel="1"
attrs="{'invisible':[('content_subtype', '=', 'plain')]}"/>
<field name="body" nolabel="1"/>
</page>
<page string="Attachments">
<field name="attachment_ids" colspan="4" nolabel="1"/>
@ -32,10 +30,10 @@
<button string="Send" name="send_mail" type="object" class="oe_highlight" />
or
<button string="Cancel" class="oe_link" special="cancel" />
<div class="oe_right">
<!--div class="oe_right">
<button string="" name="toggle_content_subtype" type="object" icon="/mail/static/src/img/formatting.png"
help="Toggle advanced formatting mode"/>
</div>
</div-->
</footer>
</form>
</field>
@ -68,6 +66,7 @@
context="{'force_email':True}"
on_change="onchange_partner_ids(partner_ids)"
class="oe_mail_compose_message_partner_ids"/>
<!--field name="is_private" help="If this message is not private, this message will send to all your followers or all followers of the parented message."/-->
<field name="attachment_ids" colspan="2" nolabel="1" widget="many2many_tags"
placeholder="Add attachments..." invisible="1"
class="oe_mail_compose_message_attachment_ids"/>

View File

@ -5,7 +5,7 @@
<field name="name">campaign.analysis.tree</field>
<field name="model">campaign.analysis</field>
<field name="arch" type="xml">
<tree string="Marketing Reports">
<tree string="Marketing Reports" create="false">
<field name="year" invisible="1"/>
<field name="month" invisible="1"/>
<field name="day" invisible="1"/>

View File

@ -8,7 +8,7 @@
<field name="name">report.membership.tree</field>
<field name="model">report.membership</field>
<field name="arch" type="xml">
<tree colors="blue:membership_state == 'draft';black:membership_state in ('open','free');gray:membership_state in ('done','cancel') " string="Membership">
<tree colors="blue:membership_state == 'draft';black:membership_state in ('open','free');gray:membership_state in ('done','cancel') " create="false" string="Membership">
<field name="partner_id"/>
<field name="membership_state"/>
<field name="associate_member_id" invisible="1"/>

View File

@ -29,7 +29,7 @@
'sequence': 18,
'summary': 'Manufacturing Orders, Bill of Materials, Routing',
'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/production_analysis.jpeg', 'images/production_dashboard.jpeg','images/routings.jpeg','images/work_centers.jpeg'],
'depends': ['procurement', 'stock', 'resource', 'purchase', 'product','process'],
'depends': ['product','procurement', 'stock', 'resource', 'purchase','process'],
'description': """
Manage the Manufacturing process in OpenERP
===========================================

View File

@ -952,6 +952,7 @@
<data>
<xpath expr="//field[@name='move_id']" position="before">
<field name="bom_id" domain="[('product_id','=',product_id),('bom_id','=',False)]"/>
<field name="production_id" attrs="{'invisible': [('production_id','=',False)]}"/>
</xpath>
<xpath expr="//field[@name='close_move']" position="after">
<group colspan="4" groups="product.group_mrp_properties">
@ -961,10 +962,10 @@
</data>
</field>
</record>
<record id="product.product_normal_form_supply_view" model="ir.ui.view">
<record id="product_product_normal_form_supply_view" model="ir.ui.view">
<field name="name">product.normal.form.mrp.inherit</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="inherit_id" ref="procurement.product_form_view_procurement_button"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='supply_method']" position="attributes">
<attribute name="invisible">False</attribute>
@ -975,7 +976,7 @@
order</b> using the bill of materials assigned to this product.
The delivery order will be ready once the production is done.
</p>
</group>
</group>
</field>
</record>
@ -1050,7 +1051,5 @@
</xpath>
</field>
</record>
</data>
</openerp>

View File

@ -31,6 +31,7 @@ class procurement_order(osv.osv):
_columns = {
'bom_id': fields.many2one('mrp.bom', 'BoM', ondelete='cascade', select=True),
'property_ids': fields.many2many('mrp.property', 'procurement_property_rel', 'procurement_id','property_id', 'Properties'),
'production_id': fields.many2one('mrp.production', 'Manufacturing Order'),
}
def check_produce_product(self, cr, uid, procurement, context=None):
@ -95,16 +96,22 @@ class procurement_order(osv.osv):
'move_prod_id': res_id,
'company_id': procurement.company_id.id,
})
res[procurement.id] = produce_id
self.write(cr, uid, [procurement.id], {'state': 'running'})
self.running_send_note(cr, uid, ids, context=context)
self.write(cr, uid, [procurement.id], {'state': 'running', 'production_id': produce_id})
bom_result = production_obj.action_compute(cr, uid,
[produce_id], properties=[x.id for x in procurement.property_ids])
wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
if res_id:
move_obj.write(cr, uid, [res_id],
{'location_id': procurement.location_id.id})
self.production_order_create_note(cr, uid, ids, context=context)
return res
def production_order_create_note(self, cr, uid, ids, context=None):
for procurement in self.browse(cr, uid, ids, context=context):
body = _("Manufacturing Order created.")
self.message_post(cr, uid, [procurement.id], body=body, context=context)
procurement_order()

View File

@ -9,7 +9,7 @@
<field name="name">mrp.workorder.tree</field>
<field name="model">mrp.workorder</field>
<field name="arch" type="xml">
<tree string="Work Orders">
<tree string="Work Orders" create="false">
<field name="date" invisible="1"/>
<field name="product_id" invisible="1"/>
<field name="product_qty" sum="Product Qty"/>

View File

@ -4,16 +4,12 @@ import simplejson
import os
import openerp
try:
import openerp.addons.web.common.http as openerpweb
from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template
except ImportError:
import web.common.http as openerpweb
from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template
class PointOfSaleController(openerpweb.Controller):
class PointOfSaleController(openerp.addons.web.http.Controller):
_cp_path = '/pos'
@openerpweb.httprequest
@openerp.addons.web.http.httprequest
def app(self, req, s_action=None, **kw):
js = "\n ".join('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list(req, None, 'js'))
css = "\n ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list(req, None, 'css'))
@ -29,7 +25,7 @@ class PointOfSaleController(openerpweb.Controller):
}
return r
@openerpweb.httprequest
@openerp.addons.web.http.httprequest
def manifest(self, req, **kwargs):
""" This generates a HTML5 cache manifest files that preloads the categories and products thumbnails
and other ressources necessary for the point of sale to work offline """
@ -66,12 +62,12 @@ class PointOfSaleController(openerpweb.Controller):
return m
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def dispatch(self, request, iface, **kwargs):
method = 'iface_%s' % iface
return getattr(self, method)(request, **kwargs)
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def scan_item_success(self, request, ean):
"""
A product has been scanned with success
@ -79,7 +75,7 @@ class PointOfSaleController(openerpweb.Controller):
print 'scan_item_success: ' + str(ean)
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def scan_item_error_unrecognized(self, request, ean):
"""
A product has been scanned without success
@ -87,7 +83,7 @@ class PointOfSaleController(openerpweb.Controller):
print 'scan_item_error_unrecognized: ' + str(ean)
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def help_needed(self, request):
"""
The user wants an help (ex: light is on)
@ -95,7 +91,7 @@ class PointOfSaleController(openerpweb.Controller):
print "help_needed"
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def help_canceled(self, request):
"""
The user stops the help request
@ -103,22 +99,22 @@ class PointOfSaleController(openerpweb.Controller):
print "help_canceled"
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def weighting_start(self, request):
print "weighting_start"
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def weighting_read_kg(self, request):
print "weighting_read_kg"
return 0.0
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def weighting_end(self, request):
print "weighting_end"
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def payment_request(self, request, price):
"""
The PoS will activate the method payment
@ -126,47 +122,47 @@ class PointOfSaleController(openerpweb.Controller):
print "payment_request: price:"+str(price)
return 'ok'
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def payment_status(self, request):
print "payment_status"
return { 'status':'waiting' }
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def payment_cancel(self, request):
print "payment_cancel"
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def transaction_start(self, request):
print 'transaction_start'
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def transaction_end(self, request):
print 'transaction_end'
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def cashier_mode_activated(self, request):
print 'cashier_mode_activated'
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def cashier_mode_deactivated(self, request):
print 'cashier_mode_deactivated'
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def open_cashbox(self, request):
print 'open_cashbox'
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def print_receipt(self, request, receipt):
print 'print_receipt' + str(receipt)
return
@openerpweb.jsonrequest
@openerp.addons.web.http.jsonrequest
def print_pdf_invoice(self, request, pdfinvoice):
print 'print_pdf_invoice' + str(pdfinvoice)
return

View File

@ -1300,7 +1300,7 @@ class product_product(osv.osv):
'expense_pdt': fields.boolean('Point of Sale Cash Out', help="This is a product you can use to take cash from a statement for the point of sale backend, exemple: money lost, transfer to bank, etc."),
'pos_categ_id': fields.many2one('pos.category','Point of Sale Category',
help="If you want to sell this product through the point of sale, select the category it belongs to."),
'to_weight' : fields.boolean('To Weight', help="This category contains products that should be weighted, mainly used for the self-checkout interface"),
'to_weight' : fields.boolean('To Weigh', help="This category contains products that should to be weighed, mainly used for the self-checkout interface"),
}
def _default_pos_categ_id(self, cr, uid, context=None):

View File

@ -5,7 +5,7 @@
<field name="name">report.pos.order.tree</field>
<field name="model">report.pos.order</field>
<field name="arch" type="xml">
<tree string="Point of Sale Analysis">
<tree string="Point of Sale Analysis" create="false">
<field name="date" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="year" invisible="1"/>

View File

@ -57,7 +57,7 @@ depending on the product's configuration.
'company_view.xml',
'board_mrp_procurement_view.xml',
],
'demo': ['stock_orderpoint.xml'],
'demo': ['stock_orderpoint.xml','procurement_demo.xml'],
'test': ['test/procurement.yml'],
'installable': True,
'auto_install': True,

View File

@ -102,7 +102,6 @@ class procurement_order(osv.osv):
'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', states={'draft':[('readonly',False)], 'confirmed':[('readonly',False)]},
readonly=True, required=True, help="If you encode manually a Procurement, you probably want to use" \
" a make to order method."),
'note': fields.text('Note'),
'message': fields.char('Latest error', size=124, help="Exception occurred while computing procurement orders."),
'state': fields.selection([
@ -362,11 +361,10 @@ class procurement_order(osv.osv):
""" Changes procurement state to Running and writes message.
@return: True
"""
message = _('From stock: products assigned.')
message = _('Products reserved from stock.')
self.write(cr, uid, ids, {'state': 'running',
'message': message}, context=context)
self.message_post(cr, uid, ids, body=message, context=context)
self.running_send_note(cr, uid, ids, context=context)
return True
def _check_make_to_stock_service(self, cr, uid, procurement, context=None):
@ -390,8 +388,6 @@ class procurement_order(osv.osv):
order_point_id = self.pool.get('stock.warehouse.orderpoint').search(cr, uid, [('product_id', '=', procurement.product_id.id)], context=context)
if not order_point_id and not ok:
message = _("Not enough stock and no minimum orderpoint rule defined.")
elif not order_point_id:
message = _("No minimum orderpoint rule defined.")
elif not ok:
message = _("Not enough stock.")
@ -407,7 +403,6 @@ class procurement_order(osv.osv):
"""
for procurement in self.browse(cr, uid, ids, context=context):
self.write(cr, uid, [procurement.id], {'state': 'running'})
self.running_send_note(cr, uid, ids, context=None)
return True
def action_produce_assign_product(self, cr, uid, ids, context=None):
@ -469,7 +464,6 @@ class procurement_order(osv.osv):
@return: True
"""
res = self.write(cr, uid, ids, {'state': 'ready'})
self.ready_send_note(cr, uid, ids, context=None)
return res
def action_done(self, cr, uid, ids):
@ -503,12 +497,6 @@ class procurement_order(osv.osv):
def confirm_send_note(self, cr, uid, ids, context=None):
self.message_post(cr, uid, ids, body=_("Procurement <b>confirmed</b>."), context=context)
def running_send_note(self, cr, uid, ids, context=None):
self.message_post(cr, uid, ids, body=_("Procurement set to <b>running</b>."), context=context)
def ready_send_note(self, cr, uid, ids, context=None):
self.message_post(cr, uid, ids, body=_("Procurement set to <b>ready</b>."), context=context)
def cancel_send_note(self, cr, uid, ids, context=None):
self.message_post(cr, uid, ids, body=_("Procurement <b>cancelled</b>."), context=context)
@ -641,7 +629,18 @@ class stock_warehouse_orderpoint(osv.osv):
})
return super(stock_warehouse_orderpoint, self).copy(cr, uid, id, default, context=context)
stock_warehouse_orderpoint()
class product_template(osv.osv):
_inherit="product.template"
_columns = {
'type': fields.selection([('product','Stockable Product'),('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Will change the way procurements are processed. Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."),
'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
'supply_method': fields.selection([('produce','Manufacture'),('buy','Buy')], 'Supply Method', required=True, help="Produce will generate production order or tasks, according to the product type. Buy will trigger purchase orders when requested."),
}
_defaults = {
'procure_method': 'make_to_stock',
'supply_method': 'buy',
}
class product_product(osv.osv):
_inherit="product.product"
@ -649,6 +648,6 @@ class product_product(osv.osv):
'orderpoint_ids': fields.one2many('stock.warehouse.orderpoint', 'product_id', 'Minimum Stock Rules'),
}
product_product()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="product.product_product_1" model="product.product">
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_2" model="product.product">
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_3" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_4" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_5" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_6" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_7" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_8" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_9" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
</record>
<record id="product.product_product_10" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_11" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_12" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
</record>
<record id="product.product_product_13" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_14" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_15" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_16" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_17" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_18" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_19" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_20" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_21" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_22" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_23" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_24" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_25" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_26" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_27" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_28" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_29" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_30" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_31" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_32" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_33" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
</record>
<record id="product.product_product_34" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_35" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_36" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_37" model="product.product">
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
</record>
<record id="product.product_product_38" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_39" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_44" model="product.product">
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
</record>
<record id="product.product_product_45" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_46" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_47" model="product.product">
<field name="type">product</field>
</record>
<record id="product.product_product_48" model="product.product">
<field name="type">product</field>
</record>
</data>
</openerp>

View File

@ -294,6 +294,29 @@
<field name="res_model">stock.warehouse.orderpoint</field>
</record>
<record model="ir.ui.view" id="product_template_form_view_procurement">
<field name="name">product.template.procurement</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='type']" position="after">
<field name="procure_method"/>
<field name="supply_method"/>
</xpath>
</field>
</record>
<record id="product_search_form_view_procurment" model="ir.ui.view">
<field name="name">product.search.procurment.form</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_search_form_view"/>
<field name="arch" type="xml">
<filter name="consumable" position="before">
<filter string="Products" icon="terp-accessories-archiver" domain="[('type','=','product')]" help="Stockable products"/>
</filter>
</field>
</record>
<record model="ir.ui.view" id="product_form_view_procurement_button">
<field name="name">product.product.procurement</field>
<field name="model">product.product</field>
@ -303,6 +326,33 @@
<button string="Request Procurement" name="%(act_make_procurement)d" type="action"/>
<button string="Orderpoints" name="%(product_open_orderpoint)d" type="action"/>
</xpath>
<xpath expr="//field[@name='cost_method']" position="before">
<field name="procure_method" groups="base.group_user"/>
<field name="supply_method" groups="base.group_user"/>
</xpath>
<xpath expr="//group[@name='general']" position="after" >
<group name="procurement_help" class="oe_grey" col="1" groups="base.group_user">
<p attrs="{'invisible': [('type','&lt;&gt;','service'),('procure_method','&lt;&gt;','make_to_stock')]}">
When you sell this service, nothing special will be trigered
to deliver the customer, as you set the procurement method as
'Make to Stock'.
</p>
<p attrs="{'invisible': [('type','&lt;&gt;','product'),('procure_method','&lt;&gt;','make_to_stock')]}">
When you sell this product, OpenERP will <b>use the available
inventory</b> for the delivery order.
<br/><br/>
If there are not enough quantities available, the delivery order
will wait for new products. To fulfill the inventory, you should
create others rules like orderpoints.
</p>
<p attrs="{'invisible': [('type','&lt;&gt;','consu'),('procure_method','&lt;&gt;','make_to_stock')]}">
When you sell this product, a delivery order will be created.
OpenERP will consider that the <b>required quantities are always
available</b> as it's a consumable (as a result of this, the quantity
on hand may become negative).
</p>
</group>
</xpath>
</field>
</record>

View File

@ -280,11 +280,8 @@ class product_template(osv.osv):
'description': fields.text('Description',translate=True),
'description_purchase': fields.text('Purchase Description',translate=True),
'description_sale': fields.text('Sale Description',translate=True),
'type': fields.selection([('product','Stockable Product'),('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Will change the way procurements are processed. Consumable are product where you don't manage stock."),
'supply_method': fields.selection([('produce','Manufacture'),('buy','Buy')], 'Supply Method', required=True, help="Produce will generate production order or tasks, according to the product type. Buy will trigger purchase orders when requested."),
'sale_delay': fields.float('Customer Lead Time', help="This is the average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."),
'type': fields.selection([('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."),
'produce_delay': fields.float('Manufacturing Lead Time', help="Average delay in days to produce this product. This is only for the production order and, if it is a multi-level bill of material, it's only for the level of this product. Different lead times will be summed for all levels and purchase orders."),
'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
'rental': fields.boolean('Can be Rent'),
'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),
'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Product Price'), help="Base price for computing the customer price. Sometimes called the catalog price."),
@ -296,7 +293,6 @@ class product_template(osv.osv):
help="Standard Price: the cost price is fixed and recomputed periodically (usually at the end of the year), Average Price: the cost price is recomputed at each reception of products."),
'warranty': fields.float('Warranty'),
'sale_ok': fields.boolean('Can be Sold', help="Determines if the product can be visible in the list of product within a selection from a sale order line."),
'purchase_ok': fields.boolean('Can be Purchased', help="Determine if the product is visible in the list of products within a selection from a purchase order line."),
'state': fields.selection([('',''),
('draft', 'In Development'),
('sellable','Normal'),
@ -309,11 +305,8 @@ class product_template(osv.osv):
'uos_coeff': fields.float('Unit of Measure -> UOS Coeff', digits_compute= dp.get_precision('Product UoS'),
help='Coefficient to convert Unit of Measure to UOS\n'
' uos = uom * coeff'),
'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type', required=True),
'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type'),
'seller_ids': fields.one2many('product.supplierinfo', 'product_id', 'Partners'),
'loc_rack': fields.char('Rack', size=16),
'loc_row': fields.char('Row', size=16),
'loc_case': fields.char('Case', size=16),
'company_id': fields.many2one('res.company', 'Company', select=1),
}
@ -351,21 +344,17 @@ class product_template(osv.osv):
_defaults = {
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'product.template', context=c),
'list_price': lambda *a: 1,
'cost_method': lambda *a: 'standard',
'supply_method': lambda *a: 'buy',
'standard_price': lambda *a: 0.0,
'sale_ok': lambda *a: 1,
'sale_delay': lambda *a: 7,
'produce_delay': lambda *a: 1,
'purchase_ok': lambda *a: 1,
'procure_method': lambda *a: 'make_to_stock',
'list_price': 1,
'cost_method': 'standard',
'standard_price': 0.0,
'sale_ok': 1,
'produce_delay': 1,
'uom_id': _get_uom_id,
'uom_po_id': _get_uom_id,
'uos_coeff' : lambda *a: 1.0,
'mes_type' : lambda *a: 'fixed',
'uos_coeff' : 1.0,
'mes_type' : 'fixed',
'categ_id' : _default_category,
'type' : lambda *a: 'consu',
'type' : 'consu',
}
def _check_uom(self, cursor, user, ids, context=None):

View File

@ -197,7 +197,6 @@ parameter) will see those record just disappear.
<field name="name">Service</field>
<field name="categ_id" ref="product.product_category_all"/>
<field name="type">service</field>
<field eval="False" name="purchase_ok"/>
</record>
</data>
</openerp>

View File

@ -70,8 +70,6 @@
<field name="standard_price">20.5</field>
<field name="list_price">30.75</field>
<field name="type">service</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="uom_id" ref="product_uom_hour"/>
<field name="uom_po_id" ref="product_uom_hour"/>
<field name="description">This type of service include basic monitoring of products.</field>
@ -84,8 +82,6 @@
<field name="standard_price">25.5</field>
<field name="list_price">38.25</field>
<field name="type">service</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="uom_id" ref="product_uom_hour"/>
<field name="uom_po_id" ref="product_uom_hour"/>
<field name="description">This type of service include assistance for security questions, system configuration requirements, implementation or special needs.</field>
@ -97,9 +93,7 @@
<field name="categ_id" ref="product_category_4"/>
<field name="list_price">450.0</field>
<field name="standard_price">300.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="sale_delay">4.0</field>
@ -115,9 +109,8 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_4"/>
<field name="standard_price">500.0</field>
<field name="list_price">750.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="sale_delay">4.0</field>
@ -133,9 +126,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_4"/>
<field name="standard_price">600.0</field>
<field name="list_price">900.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="sale_delay">7.0</field>
@ -148,7 +139,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">800.0</field>
<field name="list_price">1200.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -158,7 +149,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">880.0</field>
<field name="list_price">1350.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -168,7 +159,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">10.0</field>
<field name="list_price">13.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -178,8 +169,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">10.0</field>
<field name="list_price">13.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -189,7 +179,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">12.50</field>
<field name="list_price">14</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -199,7 +189,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">14</field>
<field name="list_price">16.50</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -209,8 +199,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">18</field>
<field name="list_price">12.50</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -220,7 +209,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">78.0</field>
<field name="list_price">85.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -230,7 +219,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">87.0</field>
<field name="list_price">95.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -240,7 +229,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">80.0</field>
<field name="list_price">85.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -250,9 +239,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">20.0</field>
<field name="list_price">25.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -262,7 +249,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">860.0</field>
<field name="list_price">975.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -272,9 +259,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">1020.0</field>
<field name="list_price">1150.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -284,9 +269,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">1100.0</field>
<field name="list_price">1250.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">On demand hard-disk having capacity based on requirement.</field>
@ -297,7 +280,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">1700.0</field>
<field name="list_price">1950.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -307,7 +290,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">1790.0</field>
<field name="list_price">2000.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -317,7 +300,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">2010.0</field>
<field name="list_price">2100.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -327,7 +310,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">1910.0</field>
<field name="list_price">1980.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -337,7 +320,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_8"/>
<field name="standard_price">876.0</field>
<field name="list_price">885.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -347,7 +330,7 @@ HDD SH-1</field>
<field name="categ_id" ref="product_category_4"/>
<field name="standard_price">2870.0</field>
<field name="list_price">2950.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">17" Monitor
@ -361,7 +344,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_4"/>
<field name="standard_price">3000.0</field>
<field name="list_price">3245.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">17" Monitor
@ -375,9 +358,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_4"/>
<field name="standard_price">3300.0</field>
<field name="list_price">3645.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">Custom Laptop based on customer's requirement.</field>
@ -388,7 +369,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_6"/>
<field name="standard_price">390.0</field>
<field name="list_price">405.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -399,7 +380,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_7"/>
<field name="standard_price">90.0</field>
<field name="list_price">100.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -410,7 +391,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_7"/>
<field name="standard_price">126.0</field>
<field name="list_price">145.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -420,7 +401,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_7"/>
<field name="standard_price">134.0</field>
<field name="list_price">150.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">.</field>
@ -431,7 +412,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_7"/>
<field name="standard_price">57.0</field>
<field name="list_price">62.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">Hands free headset for laptop PC with in-line microphone and headphone plug.</field>
@ -442,8 +423,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_7"/>
<field name="standard_price">60.0</field>
<field name="list_price">65.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">Headset for laptop PC with USB connector.</field>
@ -455,7 +435,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_7"/>
<field name="standard_price">38.0</field>
<field name="list_price">45.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -466,7 +446,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_7"/>
<field name="standard_price">18.40</field>
<field name="list_price">20.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_dozen"/>
<field name="uom_po_id" ref="product_uom_dozen"/>
</record>
@ -477,7 +457,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_7"/>
<field name="standard_price">21.60</field>
<field name="list_price">24.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_dozen"/>
<field name="uom_po_id" ref="product_uom_dozen"/>
</record>
@ -488,8 +468,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_6"/>
<field name="standard_price">4258.0</field>
<field name="list_price">4410.0</field>
<field name="type">product</field>
<field name="procure_method">make_to_order</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">All in one hi-speed printer with fax and scanner.</field>
@ -501,7 +480,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_6"/>
<field name="standard_price">60.0</field>
<field name="list_price">65.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -512,7 +491,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_6"/>
<field name="standard_price">66.0</field>
<field name="list_price">70.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -569,8 +548,6 @@ QWERTY keyboard</field>
<field name="standard_price">155.0</field>
<field name="list_price">173.0</field>
<field name="type">consu</field>
<field name="procure_method">make_to_order</field>
<field name="supply_method">produce</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description_sale">Full featured image editing software.</field>
@ -582,7 +559,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_6"/>
<field name="standard_price">55.0</field>
<field name="list_price">60.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -593,7 +570,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_6"/>
<field name="standard_price">35.0</field>
<field name="list_price">40.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -604,7 +581,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_6"/>
<field name="standard_price">55.0</field>
<field name="list_price">70.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
@ -615,7 +592,7 @@ QWERTY keyboard</field>
<field name="categ_id" ref="product_category_6"/>
<field name="standard_price">13.0</field>
<field name="list_price">18.0</field>
<field name="type">product</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>

View File

@ -10,11 +10,9 @@
<search string="Product">
<field name="name" string="Product" filter_domain="['|',('name','ilike',self),('default_code','ilike',self)]"/>
<filter string="Services" icon="terp-accessories-archiver" domain="[('type','=','service')]"/>
<filter string="Products" icon="terp-accessories-archiver" domain="['|',('type','=','product'),('type','=','consu')]" help="Both stockable and consumable products"/>
<filter string="Consumable" name="consumable" icon="terp-accessories-archiver" domain="[('type','=','consu')]" help="Consumable products"/>
<separator/>
<filter name="filter_to_purchase" string="To Purchase" icon="terp-accessories-archiver+" domain="[('purchase_ok', '=', 1)]"/>
<filter string="Can be Sold" name="filter_to_sell" icon="terp-accessories-archiver-minus" domain="[('sale_ok','=',1)]"/>
<filter name="filter_to_purchase" string="Can be Purchased" icon="terp-accessories-archiver+" domain="[('purchase_ok', '=', 1)]"/>
<field name="categ_id" operator="child_of"/>
<group expand="0" string="Context...">
<field name="pricelist_id" context="{'pricelist': self}" groups="product.group_sale_pricelist"/>
@ -60,7 +58,7 @@
<field name="arch" type="xml">
<form string="Product" version="7.0">
<sheet>
<field name="image_medium" widget="image" class="oe_avatar oe_right"/>
<field name="image_medium" widget="image" class="oe_avatar oe_left"/>
<div class="oe_title">
<div class="oe_edit_only">
<label for="name" string="Product Name"/>
@ -73,8 +71,6 @@
<div name="options" groups="base.group_user">
<field name="sale_ok"/>
<label for="sale_ok"/>
<field name="purchase_ok"/>
<label for="purchase_ok"/>
</div>
</div>
<div class="oe_right oe_button_box" name="buttons">
@ -104,34 +100,11 @@
</page>
<page string="Procurements" groups="base.group_user">
<group name="procurement">
<group>
<field name="procure_method" groups="base.group_user"/>
<field name="supply_method" groups="base.group_user" invisible="1"/>
<group name="general">
<field name="cost_method" groups="product.group_costing_method"/>
<field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}"/>
</group>
<group name="procurement_help" class="oe_grey" col="1" groups="base.group_user">
<p attrs="{'invisible': [('type','&lt;&gt;','service'),('procure_method','&lt;&gt;','make_to_stock')]}">
When you sell this service, nothing special will be trigered
to deliver the customer, as you set the procurement method as
'Make to Stock'.
</p>
<p attrs="{'invisible': [('type','&lt;&gt;','product'),('procure_method','&lt;&gt;','make_to_stock')]}">
When you sell this product, OpenERP will <b>use the available
inventory</b> for the delivery order.
<br/><br/>
If there are not enough quantities available, the delivery order
will wait for new products. To fulfill the inventory, you should
create others rules like orderpoints.
</p>
<p attrs="{'invisible': [('type','&lt;&gt;','consu'),('procure_method','&lt;&gt;','make_to_stock')]}">
When you sell this product, a delivery order will be created.
OpenERP will consider that the <b>required quantities are always
available</b> as it's a consumable (as a result of this, the quantity
on hand may become negative).
</p>
</group>
<group groups="product.group_uom">
<group name="procurement_uom" groups="product.group_uom">
<field name="uom_po_id"/>
</group>
</group>
@ -144,13 +117,7 @@
<field name="state"/>
<field name="product_manager"/>
</group>
<group name="store" string="Storage Localisation">
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
<field name="loc_rack" attrs="{'invisible':[('type','=','service')]}"/>
<field name="loc_row" attrs="{'invisible':[('type','=','service')]}"/>
<field name="loc_case" attrs="{'invisible':[('type','=','service')]}"/>
</group>
<group groups="product.group_stock_packaging" string="Weights">
<group name="Weights" groups="product.group_stock_packaging" string="Weights">
<field digits="(14, 3)" name="volume" attrs="{'readonly':[('type','=','service')]}"/>
<field name="weight" attrs="{'readonly':[('type','=','service')]}"/>
<field name="weight_net" attrs="{'readonly':[('type','=','service')]}"/>
@ -160,10 +127,6 @@
<page string="Sales" attrs="{'readonly':[('sale_ok','=',0)]}">
<group name="sale">
<group string="Sale Conditions">
<label for="sale_delay"/>
<div>
<field name="sale_delay" class="oe_inline"/> days
</div>
<label for="warranty"/>
<div>
<field name="warranty" class="oe_inline"/> months
@ -715,12 +678,9 @@
<group>
<group string="Product Type">
<field name="sale_ok"/>
<field name="purchase_ok"/>
</group>
<group string="Procurement">
<field name="type"/>
<field name="procure_method"/>
<field name="supply_method"/>
</group>
<group string="Base Prices">
@ -733,7 +693,7 @@
<field digits="(14, 3)" name="volume" attrs="{'readonly':[('type','=','service')]}"/>
<field digits="(14, 3)" name="weight" attrs="{'readonly':[('type','=','service')]}"/>
<field digits="(14, 3)" name="weight_net" attrs="{'readonly':[('type','=','service')]}"/>
</group>
</group>
<group name="status" string="Status">
<field name="categ_id"/>
@ -756,18 +716,12 @@
<page string="Procurement &amp; Locations">
<group>
<group name="delay" string="Delays">
<field name="sale_delay" attrs="{'readonly':[('sale_ok','=',0)]}"/>
<label for="produce_delay"/>
<div>
<field name="produce_delay" class="oe_inline"/> days
</div>
<field name="warranty"/>
</group>
<group name="store" string="Storage Localisation">
<field name="loc_rack"/>
<field name="loc_row"/>
<field name="loc_case"/>
</group>
</group>
</page>

View File

@ -19,9 +19,9 @@
<record model="ir.ui.view" id="view_product_form_expiry">
<field name="name">product.normal.form</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view" />
<field name="inherit_id" ref="stock.view_normal_procurement_locations_form" />
<field name="arch" type="xml">
<group name="inventory">
<group name="Weights" position="after">
<group string="Dates">
<field name="life_time" />
<field name="use_time" />

View File

@ -1426,7 +1426,9 @@ class project_task_history_cumulative(osv.osv):
}
def init(self, cr):
cr.execute(""" CREATE OR REPLACE VIEW project_task_history_cumulative AS (
tools.drop_view_if_exists(cr, 'report_event_registration')
cr.execute(""" CREATE VIEW project_task_history_cumulative AS (
SELECT
history.date::varchar||'-'||history.history_id::varchar AS id,
history.date AS end_date,

View File

@ -10,7 +10,7 @@
<field name="name">report.project.task.user.tree</field>
<field name="model">report.project.task.user</field>
<field name="arch" type="xml">
<tree string="Tasks Analysis">
<tree string="Tasks Analysis" create="false">
<field name="name" invisible="1"/>
<field name="project_id" invisible="1"/>
<field name="user_id" invisible="1"/>

View File

@ -6,7 +6,7 @@
<field name="name">project.issue.report.tree</field>
<field name="model">project.issue.report</field>
<field name="arch" type="xml">
<tree string="Issues Analysis">
<tree string="Issues Analysis" create="false">
<field name="name" invisible="1"/>
<field name="month" invisible="1"/>
<field name="project_id" invisible="1"/>

View File

@ -31,10 +31,10 @@
</field>
</field>
</record>
<record id="product.product_normal_form_supply_view" model="ir.ui.view">
<record id="product_product_normal_form_supply_view" model="ir.ui.view">
<field name="name">product.normal.form.project_mrp.inherit</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="inherit_id" ref="procurement.product_form_view_procurement_button"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='supply_method']" position="attributes">
<attribute name="invisible">False</attribute>

View File

@ -20,6 +20,7 @@
##############################################################################
from osv import fields, osv
from tools.translate import _
class procurement_order(osv.osv):
_name = "procurement.order"
@ -83,10 +84,15 @@ class procurement_order(osv.osv):
'project_id': project and project.id or False,
'company_id': procurement.company_id.id,
},context=context)
self.write(cr, uid, [procurement.id], {'task_id': task_id, 'state': 'running', 'message':'from project: task created.'}, context=context)
self.running_send_note(cr, uid, ids, context=None)
self.write(cr, uid, [procurement.id], {'task_id': task_id, 'state': 'running', 'message':_('Task created.')}, context=context)
self.project_task_create_note(cr, uid, ids, context=context)
return task_id
def project_task_create_note(self, cr, uid, ids, context=None):
for procurement in self.browse(cr, uid, ids, context=context):
body = _("Task created")
self.message_post(cr, uid, [procurement.id], body=body, context=context)
procurement_order()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

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