[MERGE] sync with latest trunk
bzr revid: mat@openerp.com-20130621075406-d9syftu04k8iytcz
This commit is contained in:
+27
-17
@@ -648,10 +648,10 @@ class account_account(osv.osv):
|
||||
if line_obj.search(cr, uid, [('account_id', 'in', account_ids)]):
|
||||
#Check for 'Closed' type
|
||||
if old_type == 'closed' and new_type !='closed':
|
||||
raise osv.except_osv(_('Warning !'), _("You cannot change the type of account from 'Closed' to any other type as it contains journal items!"))
|
||||
raise osv.except_osv(_('Warning!'), _("You cannot change the type of account from 'Closed' to any other type as it contains journal items!"))
|
||||
# Forbid to change an account type for restricted_groups as it contains journal items (or if one of its children does)
|
||||
if (new_type in restricted_groups):
|
||||
raise osv.except_osv(_('Warning !'), _("You cannot change the type of account to '%s' type as it contains journal items!") % (new_type,))
|
||||
raise osv.except_osv(_('Warning!'), _("You cannot change the type of account to '%s' type as it contains journal items!") % (new_type,))
|
||||
|
||||
return True
|
||||
|
||||
@@ -1015,14 +1015,14 @@ class account_period(osv.osv):
|
||||
if not result:
|
||||
result = self.search(cr, uid, args, context=context)
|
||||
if not result:
|
||||
raise osv.except_osv(_('Error !'), _('There is no period defined for this date: %s.\nPlease create one.')%dt)
|
||||
raise osv.except_osv(_('Error!'), _('There is no period defined for this date: %s.\nPlease create one.')%dt)
|
||||
return result
|
||||
|
||||
def action_draft(self, cr, uid, ids, *args):
|
||||
mode = 'draft'
|
||||
for period in self.browse(cr, uid, ids):
|
||||
if period.fiscalyear_id.state == 'done':
|
||||
raise osv.except_osv(_('Warning !'), _('You can not re-open a period which belongs to closed fiscal year'))
|
||||
raise osv.except_osv(_('Warning!'), _('You can not re-open a period which belongs to closed fiscal year'))
|
||||
cr.execute('update account_journal_period set state=%s where period_id in %s', (mode, tuple(ids),))
|
||||
cr.execute('update account_period set state=%s where id in %s', (mode, tuple(ids),))
|
||||
return True
|
||||
@@ -1034,9 +1034,15 @@ class account_period(osv.osv):
|
||||
context = {}
|
||||
ids = []
|
||||
if name:
|
||||
ids = self.search(cr, user, [('code','ilike',name)]+ args, limit=limit)
|
||||
ids = self.search(cr, user,
|
||||
[('code', 'ilike', name)] + args,
|
||||
limit=limit,
|
||||
context=context)
|
||||
if not ids:
|
||||
ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit)
|
||||
ids = self.search(cr, user,
|
||||
[('name', operator, name)] + args,
|
||||
limit=limit,
|
||||
context=context)
|
||||
return self.name_get(cr, user, ids, context=context)
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
@@ -1059,10 +1065,14 @@ class account_period(osv.osv):
|
||||
raise osv.except_osv(_('Error!'), _('You should choose the periods that belong to the same company.'))
|
||||
if period_date_start > period_date_stop:
|
||||
raise osv.except_osv(_('Error!'), _('Start period should precede then end period.'))
|
||||
|
||||
# /!\ We do not include a criterion on the company_id field below, to allow producing consolidated reports
|
||||
# on multiple companies. It will only work when start/end periods are selected and no fiscal year is chosen.
|
||||
|
||||
#for period from = january, we want to exclude the opening period (but it has same date_from, so we have to check if period_from is special or not to include that clause or not in the search).
|
||||
if period_from.special:
|
||||
return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id)])
|
||||
return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id), ('special', '=', False)])
|
||||
return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop)])
|
||||
return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('special', '=', False)])
|
||||
|
||||
|
||||
class account_journal_period(osv.osv):
|
||||
@@ -1854,6 +1864,12 @@ class account_tax_code(osv.osv):
|
||||
_order = 'code'
|
||||
|
||||
|
||||
def get_precision_tax():
|
||||
def change_digit_tax(cr):
|
||||
res = openerp.registry(cr.dbname)['decimal.precision'].precision_get(cr, SUPERUSER_ID, 'Account')
|
||||
return (16, res+3)
|
||||
return change_digit_tax
|
||||
|
||||
class account_tax(osv.osv):
|
||||
"""
|
||||
A tax object.
|
||||
@@ -1874,12 +1890,6 @@ class account_tax(osv.osv):
|
||||
default.update({'name': name + _(' (Copy)')})
|
||||
return super(account_tax, self).copy_data(cr, uid, id, default=default, context=context)
|
||||
|
||||
def get_precision_tax():
|
||||
def change_digit_tax(cr):
|
||||
res = openerp.registry(cr.dbname)['decimal.precision'].precision_get(cr, SUPERUSER_ID, 'Account')
|
||||
return (16, res+2)
|
||||
return change_digit_tax
|
||||
|
||||
_name = 'account.tax'
|
||||
_description = 'Tax'
|
||||
_columns = {
|
||||
@@ -2307,7 +2317,7 @@ class account_model(osv.osv):
|
||||
try:
|
||||
entry['name'] = model.name%{'year': move_date.strftime('%Y'), 'month': move_date.strftime('%m'), 'date': move_date.strftime('%Y-%m')}
|
||||
except:
|
||||
raise osv.except_osv(_('Wrong model !'), _('You have a wrong expression "%(...)s" in your model !'))
|
||||
raise osv.except_osv(_('Wrong Model!'), _('You have a wrong expression "%(...)s" in your model!'))
|
||||
move_id = account_move_obj.create(cr, uid, {
|
||||
'ref': entry['name'],
|
||||
'period_id': period_id,
|
||||
@@ -2319,7 +2329,7 @@ class account_model(osv.osv):
|
||||
analytic_account_id = False
|
||||
if line.analytic_account_id:
|
||||
if not model.journal_id.analytic_journal_id:
|
||||
raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (model.journal_id.name,))
|
||||
raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (model.journal_id.name,))
|
||||
analytic_account_id = line.analytic_account_id.id
|
||||
val = {
|
||||
'move_id': move_id,
|
||||
@@ -2795,7 +2805,7 @@ class account_tax_template(osv.osv):
|
||||
'chart_template_id': fields.many2one('account.chart.template', 'Chart Template', required=True),
|
||||
'name': fields.char('Tax Name', size=64, required=True),
|
||||
'sequence': fields.integer('Sequence', required=True, help="The sequence field is used to order the taxes lines from lower sequences to higher ones. The order is important if you have a tax that has several tax children. In this case, the evaluation order is important."),
|
||||
'amount': fields.float('Amount', required=True, digits=(14,4), help="For Tax Type percent enter % ratio between 0-1."),
|
||||
'amount': fields.float('Amount', required=True, digits_compute=get_precision_tax(), help="For Tax Type percent enter % ratio between 0-1."),
|
||||
'type': fields.selection( [('percent','Percent'), ('fixed','Fixed'), ('none','None'), ('code','Python Code'), ('balance','Balance')], 'Tax Type', required=True),
|
||||
'applicable_type': fields.selection( [('true','True'), ('code','Python Code')], 'Applicable Type', required=True, help="If not applicable (computed through a Python code), the tax won't appear on the invoice."),
|
||||
'domain':fields.char('Domain', size=32, help="This field is only used if you develop your own module allowing developers to create specific taxes in a custom domain."),
|
||||
|
||||
@@ -65,12 +65,11 @@ class bank(osv.osv):
|
||||
# Find the code and parent of the bank account to create
|
||||
dig = 6
|
||||
current_num = 1
|
||||
ids = obj_acc.search(cr, uid, [('type','=','liquidity'), ('company_id', '=', bank.company_id.id)], context=context)
|
||||
ids = obj_acc.search(cr, uid, [('type','=','liquidity'), ('company_id', '=', bank.company_id.id), ('parent_id', '!=', False)], context=context)
|
||||
# No liquidity account exists, no template available
|
||||
if not ids: continue
|
||||
|
||||
ref_acc_bank_temp = obj_acc.browse(cr, uid, ids[0], context=context)
|
||||
ref_acc_bank = ref_acc_bank_temp.parent_id
|
||||
ref_acc_bank = obj_acc.browse(cr, uid, ids[0], context=context).parent_id
|
||||
while True:
|
||||
new_code = str(ref_acc_bank.code.ljust(dig-len(str(current_num)), '0')) + str(current_num)
|
||||
ids = obj_acc.search(cr, uid, [('code', '=', new_code), ('company_id', '=', bank.company_id.id)])
|
||||
@@ -82,7 +81,7 @@ class bank(osv.osv):
|
||||
'name': name,
|
||||
'code': new_code,
|
||||
'type': 'liquidity',
|
||||
'user_type': ref_acc_bank_temp.user_type.id,
|
||||
'user_type': ref_acc_bank.user_type.id,
|
||||
'reconcile': False,
|
||||
'parent_id': ref_acc_bank.id,
|
||||
'company_id': bank.company_id.id,
|
||||
|
||||
@@ -420,7 +420,7 @@ class account_bank_statement(osv.osv):
|
||||
for st_line in st.line_ids:
|
||||
if st_line.analytic_account_id:
|
||||
if not st.journal_id.analytic_journal_id:
|
||||
raise osv.except_osv(_('No Analytic Journal !'),_("You have to assign an analytic journal on the '%s' journal!") % (st.journal_id.name,))
|
||||
raise osv.except_osv(_('No Analytic Journal!'),_("You have to assign an analytic journal on the '%s' journal!") % (st.journal_id.name,))
|
||||
if not st_line.amount:
|
||||
continue
|
||||
st_line_number = self.get_next_st_line_number(cr, uid, st_number, st_line, context)
|
||||
|
||||
@@ -252,7 +252,7 @@ class account_cash_statement(osv.osv):
|
||||
for statement in statement_pool.browse(cr, uid, ids, context=context):
|
||||
vals = {}
|
||||
if not self._user_allow(cr, uid, statement.id, context=context):
|
||||
raise osv.except_osv(_('Error!'), (_('You do not have rights to open this %s journal !') % (statement.journal_id.name, )))
|
||||
raise osv.except_osv(_('Error!'), (_('You do not have rights to open this %s journal!') % (statement.journal_id.name, )))
|
||||
|
||||
if statement.name and statement.name == '/':
|
||||
c = {'fiscalyear_id': statement.period_id.fiscalyear_id.id}
|
||||
|
||||
@@ -51,9 +51,12 @@ class account_invoice(osv.osv):
|
||||
company_id = context.get('company_id', user.company_id.id)
|
||||
type2journal = {'out_invoice': 'sale', 'in_invoice': 'purchase', 'out_refund': 'sale_refund', 'in_refund': 'purchase_refund'}
|
||||
journal_obj = self.pool.get('account.journal')
|
||||
res = journal_obj.search(cr, uid, [('type', '=', type2journal.get(type_inv, 'sale')),
|
||||
('company_id', '=', company_id)],
|
||||
limit=1)
|
||||
domain = [('company_id', '=', company_id)]
|
||||
if isinstance(type_inv, list):
|
||||
domain.append(('type', 'in', [type2journal.get(type) for type in type_inv if type2journal.get(type)]))
|
||||
else:
|
||||
domain.append(('type', '=', type2journal.get(type_inv, 'sale')))
|
||||
res = journal_obj.search(cr, uid, domain, limit=1)
|
||||
return res and res[0] or False
|
||||
|
||||
def _get_currency(self, cr, uid, context=None):
|
||||
@@ -69,7 +72,7 @@ class account_invoice(osv.osv):
|
||||
tt = type2journal.get(type_inv, 'sale')
|
||||
result = self.pool.get('account.analytic.journal').search(cr, uid, [('type','=',tt)], context=context)
|
||||
if not result:
|
||||
raise osv.except_osv(_('No Analytic Journal !'),_("You must define an analytic journal of type '%s'!") % (tt,))
|
||||
raise osv.except_osv(_('No Analytic Journal!'),_("You must define an analytic journal of type '%s'!") % (tt,))
|
||||
return result[0]
|
||||
|
||||
def _get_type(self, cr, uid, context=None):
|
||||
@@ -89,13 +92,43 @@ class account_invoice(osv.osv):
|
||||
return [('none', _('Free Reference'))]
|
||||
|
||||
def _amount_residual(self, cr, uid, ids, name, args, context=None):
|
||||
"""Function of the field residua. It computes the residual amount (balance) for each invoice"""
|
||||
if context is None:
|
||||
context = {}
|
||||
ctx = context.copy()
|
||||
result = {}
|
||||
currency_obj = self.pool.get('res.currency')
|
||||
for invoice in self.browse(cr, uid, ids, context=context):
|
||||
nb_inv_in_partial_rec = max_invoice_id = 0
|
||||
result[invoice.id] = 0.0
|
||||
if invoice.move_id:
|
||||
for m in invoice.move_id.line_id:
|
||||
if m.account_id.type in ('receivable','payable'):
|
||||
result[invoice.id] += m.amount_residual_currency
|
||||
for aml in invoice.move_id.line_id:
|
||||
if aml.account_id.type in ('receivable','payable'):
|
||||
if aml.currency_id and aml.currency_id.id == invoice.currency_id.id:
|
||||
result[invoice.id] += aml.amount_residual_currency
|
||||
else:
|
||||
ctx['date'] = aml.date
|
||||
result[invoice.id] += currency_obj.compute(cr, uid, aml.company_id.currency_id.id, invoice.currency_id.id, aml.amount_residual, context=ctx)
|
||||
|
||||
if aml.reconcile_partial_id.line_partial_ids:
|
||||
#we check if the invoice is partially reconciled and if there are other invoices
|
||||
#involved in this partial reconciliation (and we sum these invoices)
|
||||
for line in aml.reconcile_partial_id.line_partial_ids:
|
||||
if line.invoice:
|
||||
nb_inv_in_partial_rec += 1
|
||||
#store the max invoice id as for this invoice we will make a balance instead of a simple division
|
||||
max_invoice_id = max(max_invoice_id, line.invoice.id)
|
||||
if nb_inv_in_partial_rec:
|
||||
#if there are several invoices in a partial reconciliation, we split the residual by the number
|
||||
#of invoice to have a sum of residual amounts that matches the partner balance
|
||||
new_value = currency_obj.round(cr, uid, invoice.currency_id, result[invoice.id] / nb_inv_in_partial_rec)
|
||||
if invoice.id == max_invoice_id:
|
||||
#if it's the last the invoice of the bunch of invoices partially reconciled together, we make a
|
||||
#balance to avoid rounding errors
|
||||
result[invoice.id] = result[invoice.id] - ((nb_inv_in_partial_rec - 1) * new_value)
|
||||
else:
|
||||
result[invoice.id] = new_value
|
||||
|
||||
#prevent the residual amount on the invoice to be less than 0
|
||||
result[invoice.id] = max(result[invoice.id], 0.0)
|
||||
return result
|
||||
@@ -548,6 +581,10 @@ class account_invoice(osv.osv):
|
||||
return {'value': {}}
|
||||
|
||||
def onchange_company_id(self, cr, uid, ids, company_id, part_id, type, invoice_line, currency_id, context=None):
|
||||
#TODO: add the missing context parameter when forward-porting in trunk so we can remove
|
||||
# this hack!
|
||||
context = self.pool['res.users'].context_get(cr, uid)
|
||||
|
||||
val = {}
|
||||
dom = {}
|
||||
obj_journal = self.pool.get('account.journal')
|
||||
@@ -600,18 +637,17 @@ class account_invoice(osv.osv):
|
||||
obj_l = account_obj.browse(cr, uid, inv_line[2]['account_id'])
|
||||
if obj_l.company_id.id != company_id:
|
||||
raise osv.except_osv(_('Configuration Error!'),
|
||||
_('Invoice line account\'s company and invoice\'s compnay does not match.'))
|
||||
_('Invoice line account\'s company and invoice\'s company does not match.'))
|
||||
else:
|
||||
continue
|
||||
if company_id and type:
|
||||
if type in ('out_invoice'):
|
||||
journal_type = 'sale'
|
||||
elif type in ('out_refund'):
|
||||
journal_type = 'sale_refund'
|
||||
elif type in ('in_refund'):
|
||||
journal_type = 'purchase_refund'
|
||||
else:
|
||||
journal_type = 'purchase'
|
||||
journal_mapping = {
|
||||
'out_invoice': 'sale',
|
||||
'out_refund': 'sale_refund',
|
||||
'in_refund': 'purchase_refund',
|
||||
'in_invoice': 'purchase',
|
||||
}
|
||||
journal_type = journal_mapping[type]
|
||||
journal_ids = obj_journal.search(cr, uid, [('company_id','=',company_id), ('type', '=', journal_type)])
|
||||
if journal_ids:
|
||||
val['journal_id'] = journal_ids[0]
|
||||
@@ -621,7 +657,12 @@ class account_invoice(osv.osv):
|
||||
if r[1] == 'journal_id' and r[2] in journal_ids:
|
||||
val['journal_id'] = r[2]
|
||||
if not val.get('journal_id', False):
|
||||
raise osv.except_osv(_('Configuration Error!'), (_('Cannot find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration\Journals\Journals.') % (journal_type)))
|
||||
journal_type_map = dict(obj_journal._columns['type'].selection)
|
||||
journal_type_label = self.pool['ir.translation']._get_source(cr, uid, None, ('code','selection'),
|
||||
context.get('lang'),
|
||||
journal_type_map.get(journal_type))
|
||||
raise osv.except_osv(_('Configuration Error!'),
|
||||
_('Cannot find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration\Journals\Journals.') % ('"%s"' % journal_type_label))
|
||||
dom = {'journal_id': [('id', 'in', journal_ids)]}
|
||||
else:
|
||||
journal_ids = obj_journal.search(cr, uid, [])
|
||||
@@ -756,7 +797,7 @@ class account_invoice(osv.osv):
|
||||
else:
|
||||
ref = self._convert_ref(cr, uid, inv.number)
|
||||
if not inv.journal_id.analytic_journal_id:
|
||||
raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (inv.journal_id.name,))
|
||||
raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (inv.journal_id.name,))
|
||||
il['analytic_lines'] = [(0,0, {
|
||||
'name': il['name'],
|
||||
'date': inv['date_invoice'],
|
||||
@@ -882,7 +923,7 @@ class account_invoice(osv.osv):
|
||||
if not inv.journal_id.sequence_id:
|
||||
raise osv.except_osv(_('Error!'), _('Please define sequence on the journal related to this invoice.'))
|
||||
if not inv.invoice_line:
|
||||
raise osv.except_osv(_('No Invoice Lines !'), _('Please create some invoice lines.'))
|
||||
raise osv.except_osv(_('No Invoice Lines!'), _('Please create some invoice lines.'))
|
||||
if inv.move_id:
|
||||
continue
|
||||
|
||||
@@ -903,7 +944,7 @@ class account_invoice(osv.osv):
|
||||
group_check_total = self.pool.get('res.groups').browse(cr, uid, group_check_total_id, context=context)
|
||||
if group_check_total and uid in [x.id for x in group_check_total.users]:
|
||||
if (inv.type in ('in_invoice', 'in_refund') and abs(inv.check_total - inv.amount_total) >= (inv.currency_id.rounding/2.0)):
|
||||
raise osv.except_osv(_('Bad total !'), _('Please verify the price of the invoice !\nThe encoded total does not match the computed total.'))
|
||||
raise osv.except_osv(_('Bad Total!'), _('Please verify the price of the invoice!\nThe encoded total does not match the computed total.'))
|
||||
|
||||
if inv.payment_term:
|
||||
total_fixed = total_percent = 0
|
||||
@@ -938,7 +979,7 @@ class account_invoice(osv.osv):
|
||||
total, total_currency, iml = self.compute_invoice_totals(cr, uid, inv, company_currency, ref, iml, context=ctx)
|
||||
acc_id = inv.account_id.id
|
||||
|
||||
name = inv['name'] or '/'
|
||||
name = inv['name'] or inv['supplier_invoice_number'] or '/'
|
||||
totlines = False
|
||||
if inv.payment_term:
|
||||
totlines = payment_term_obj.compute(cr,
|
||||
@@ -1137,12 +1178,12 @@ class account_invoice(osv.osv):
|
||||
if not ids:
|
||||
return []
|
||||
types = {
|
||||
'out_invoice': 'Invoice ',
|
||||
'in_invoice': 'Sup. Invoice ',
|
||||
'out_refund': 'Refund ',
|
||||
'in_refund': 'Supplier Refund ',
|
||||
'out_invoice': _('Invoice'),
|
||||
'in_invoice': _('Supplier Invoice'),
|
||||
'out_refund': _('Refund'),
|
||||
'in_refund': _('Supplier Refund'),
|
||||
}
|
||||
return [(r['id'], (r['number']) or types[r['type']] + (r['name'] or '')) for r in self.read(cr, uid, ids, ['type', 'number', 'name'], context, load='_classic_write')]
|
||||
return [(r['id'], '%s %s' % (r['number'] or types[r['type']], r['name'] or '')) for r in self.read(cr, uid, ids, ['type', 'number', 'name'], context, load='_classic_write')]
|
||||
|
||||
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
|
||||
if not args:
|
||||
@@ -1445,7 +1486,7 @@ class account_invoice_line(osv.osv):
|
||||
context = dict(context)
|
||||
context.update({'company_id': company_id, 'force_company': company_id})
|
||||
if not partner_id:
|
||||
raise osv.except_osv(_('No Partner Defined !'),_("You must first select a partner !") )
|
||||
raise osv.except_osv(_('No Partner Defined!'),_("You must first select a partner!") )
|
||||
if not product:
|
||||
if type in ('in_invoice', 'in_refund'):
|
||||
return {'value': {}, 'domain':{'product_uom':[]}}
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
<field name="name"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="account_id" groups="account.group_account_user"
|
||||
domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]"
|
||||
domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]"
|
||||
on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
|
||||
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"
|
||||
domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/>
|
||||
@@ -320,7 +320,7 @@
|
||||
<group>
|
||||
<field string="Customer" name="partner_id"
|
||||
on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)"
|
||||
groups="base.group_user" context="{'search_default_customer':1, 'show_address': 1}"
|
||||
context="{'search_default_customer':1, 'show_address': 1}"
|
||||
options='{"always_reload": True}'
|
||||
domain="[('customer', '=', True)]"/>
|
||||
<field name="fiscal_position" widget="selection" />
|
||||
@@ -353,7 +353,7 @@
|
||||
<field name="name"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="account_id" groups="account.group_account_user"
|
||||
domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]"
|
||||
domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]"
|
||||
on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
|
||||
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"
|
||||
domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/>
|
||||
|
||||
@@ -192,7 +192,7 @@ class account_move_line(osv.osv):
|
||||
for obj_line in self.browse(cr, uid, ids, context=context):
|
||||
if obj_line.analytic_account_id:
|
||||
if not obj_line.journal_id.analytic_journal_id:
|
||||
raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, ))
|
||||
raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, ))
|
||||
vals_line = self._prepare_analytic_line(cr, uid, obj_line, context=context)
|
||||
acc_ana_line_obj.create(cr, uid, vals_line)
|
||||
return True
|
||||
@@ -1066,12 +1066,12 @@ class account_move_line(osv.osv):
|
||||
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
ctx = context.copy()
|
||||
if ('journal_id' not in ctx):
|
||||
if not ctx.get('journal_id'):
|
||||
if line.move_id:
|
||||
ctx['journal_id'] = line.move_id.journal_id.id
|
||||
else:
|
||||
ctx['journal_id'] = line.journal_id.id
|
||||
if ('period_id' not in ctx):
|
||||
if not ctx.get('period_id'):
|
||||
if line.move_id:
|
||||
ctx['period_id'] = line.move_id.period_id.id
|
||||
else:
|
||||
@@ -1101,7 +1101,7 @@ class account_move_line(osv.osv):
|
||||
period = period_obj.browse(cr, uid, period_id, context=context)
|
||||
for (state,) in result:
|
||||
if state == 'done':
|
||||
raise osv.except_osv(_('Error !'), _('You can not add/modify entries in a closed period %s of journal %s.' % (period.name,journal.name)))
|
||||
raise osv.except_osv(_('Error!'), _('You can not add/modify entries in a closed period %s of journal %s.' % (period.name,journal.name)))
|
||||
if not result:
|
||||
jour_period_obj.create(cr, uid, {
|
||||
'name': (journal.code or journal.name)+':'+(period.name or ''),
|
||||
@@ -1181,7 +1181,7 @@ class account_move_line(osv.osv):
|
||||
move_id = move_obj.create(cr, uid, v, context)
|
||||
vals['move_id'] = move_id
|
||||
else:
|
||||
raise osv.except_osv(_('No piece number !'), _('Cannot create an automatic sequence for this piece.\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.'))
|
||||
raise osv.except_osv(_('No Piece Number!'), _('Cannot create an automatic sequence for this piece.\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.'))
|
||||
ok = not (journal.type_control_ids or journal.account_control_ids)
|
||||
if ('account_id' in vals):
|
||||
account = account_obj.browse(cr, uid, vals['account_id'], context=context)
|
||||
|
||||
@@ -585,7 +585,10 @@
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="ref"/>
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="['|',('parent_id','=',False),('is_company','=',True)]"/>
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[
|
||||
'&',
|
||||
'|',('parent_id','=',False),('is_company','=',True),
|
||||
'|',('customer','=',True),('supplier','=',True)]"/>
|
||||
<field name="type" on_change="onchange_type(partner_id, type)"/>
|
||||
<field name="account_id" options='{"no_open":True}' domain="[('journal_id','=',parent.journal_id), ('company_id', '=', parent.company_id)]"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '<>', 'view')]"/>
|
||||
@@ -907,9 +910,7 @@
|
||||
<label for="type"/>
|
||||
<div>
|
||||
<field name="type"/>
|
||||
<field name="amount" class="oe_inline"
|
||||
attrs="{'invisible':[('type','in',('none', 'code', 'balance'))]}"/>
|
||||
<label string="%%" attrs="{'invisible':[('type','<>','percent')]}"/>
|
||||
<field name="amount" attrs="{'invisible':[('type','in',('none', 'code', 'balance'))]}"/>
|
||||
</div>
|
||||
<field name="python_compute" attrs="{'invisible':[('type','!=','code')],'required':[('type','=','code')]}"/>
|
||||
<field name="python_compute_inv" attrs="{'invisible':[('type','!=','code')],'required':[('type','=','code')]}"/>
|
||||
|
||||
+283
-213
File diff suppressed because it is too large
Load Diff
+183
-168
File diff suppressed because it is too large
Load Diff
@@ -111,7 +111,7 @@ class account_installer(osv.osv_memory):
|
||||
def check_unconfigured_cmp(self, cr, uid, context=None):
|
||||
""" check if there are still unconfigured companies """
|
||||
if not self.get_unconfigured_cmp(cr, uid, context=context):
|
||||
raise osv.except_osv(_('No unconfigured company !'), _("There is currently no company without chart of account. The wizard will therefore not be executed."))
|
||||
raise osv.except_osv(_('No Unconfigured Company!'), _("There is currently no company without chart of account. The wizard will therefore not be executed."))
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
||||
if context is None: context = {}
|
||||
|
||||
@@ -61,14 +61,14 @@
|
||||
<field name="name">partner.view.buttons</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button type="action" string="Invoices"
|
||||
name="%(account.action_invoice_tree)d"
|
||||
context="{'search_default_partner_id': active_id,'default_partner_id': active_id}" groups="account.group_account_invoice"/>
|
||||
<button type="action" string="Journal Items" name="%(account.action_account_moves_all_tree)d" groups="account.group_account_user"/>
|
||||
<button type="action" string="Contracts/Analytic Accounts" name="%(account.action_open_partner_analytic_accounts)d"
|
||||
<button type="action" string="Contracts" name="%(account.action_open_partner_analytic_accounts)d"
|
||||
groups="analytic.group_analytic_accounting"/>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -96,7 +96,7 @@
|
||||
<field name="priority">2</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<page string="History" position="before" version="7.0">
|
||||
<page name="sales_purchases" position="after" version="7.0">
|
||||
<page string="Accounting" col="4" name="accounting" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}">
|
||||
<group>
|
||||
<group>
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
<page string="Accounting" groups="account.group_account_invoice">
|
||||
<group name="properties">
|
||||
<group>
|
||||
<field name="property_account_income" domain="[('type','<>','view'),('type','<>','consolidation')]" groups="account.group_account_user"/>
|
||||
<field name="property_account_income" domain="[('type','=','other')]" groups="account.group_account_user"/>
|
||||
<field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]" groups="account.group_account_user"/>
|
||||
<field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user"/>
|
||||
<field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
<field name="parent_id" invisible="1"/>
|
||||
<field name="type"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="template_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -362,7 +363,7 @@
|
||||
<field name="inherit_id" ref="account.view_account_journal_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="type" position="after">
|
||||
<field name="analytic_journal_id"/>
|
||||
<field name="analytic_journal_id" groups="analytic.group_analytic_accounting"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -239,7 +239,7 @@
|
||||
<td><para style="terp_default_8">[[ line.account_id.code ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.partner_id and strip_name(line.partner_id.name,15) ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ strip_name(line.name,25) ]]</para></td>
|
||||
<td><para style="P8">[[ line.tax_code_id and (line.tax_code_id.code + ':') ]]</para></td>
|
||||
<td><para style="P8">[[ line.tax_code_id and line.tax_code_id.code and (line.tax_code_id.code + ':') ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.tax_amount and formatLang(line.tax_amount, currency_obj=company.currency_id) ]]</para></td>
|
||||
<td><para style="P8">[[ formatLang(line.debit, currency_obj=company.currency_id) ]]</para></td>
|
||||
<td><para style="P8">[[ formatLang(line.credit, currency_obj=company.currency_id) ]]</para></td>
|
||||
@@ -292,7 +292,7 @@
|
||||
<td><para style="terp_default_8">[[ line.account_id.code ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.partner_id and strip_name(line.partner_id.name,12) ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ strip_name(line.name,16) ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.tax_code_id and (line.tax_code_id.code + ':') ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.tax_code_id and line.tax_code_id.code and (line.tax_code_id.code + ':') ]]</para></td>
|
||||
<td><para style="P8">[[ line.tax_amount and formatLang(line.tax_amount, currency_obj=company.currency_id) ]]</para></td>
|
||||
<td><para style="P8">[[ formatLang(line.debit, currency_obj=company.currency_id) ]]</para></td>
|
||||
<td><para style="P8">[[ formatLang(line.credit, currency_obj=company.currency_id) ]]</para></td>
|
||||
|
||||
@@ -99,42 +99,39 @@
|
||||
<initialize>
|
||||
<paraStyle name="all" alignment="justify"/>
|
||||
</initialize>
|
||||
<paraStyle name="Standard" fontName="Helvetica"/>
|
||||
<paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Table Contents" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Caption" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Index" fontName="Helvetica"/>
|
||||
<paraStyle name="Heading" fontName="Helvetica" fontSize="15.0" leading="19" spaceBefore="12.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="Footer" fontName="Helvetica"/>
|
||||
<paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
|
||||
<paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_default_Right_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_default_address" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="-3.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Right_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Bold_Right_9" rightIndent="0.0" leftIndent="-3.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_White_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0" textColor="#ffffff"/>
|
||||
<paraStyle name="terp_default_Note" rightIndent="0.0" leftIndent="9.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="Table" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="User Index 10" rightIndent="0.0" leftIndent="127.0" fontName="Helvetica"/>
|
||||
<paraStyle name="Preformatted Text" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="Standard"/>
|
||||
<paraStyle name="Text body" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="List" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Table Contents" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Caption" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Index"/>
|
||||
|
||||
<paraStyle name="terp_header" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="Footer"/>
|
||||
<paraStyle name="Horizontal Line" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
|
||||
|
||||
<paraStyle name="terp_tblheader_General" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_General_Right" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_Details_Right" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
|
||||
<paraStyle name="terp_default_Right_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_address" rightIndent="0.0" leftIndent="0.0" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="-3.0" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Right_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Bold_Right_9" rightIndent="0.0" leftIndent="-3.0" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_2" rightIndent="0.0" leftIndent="0.0" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_White_2" rightIndent="0.0" leftIndent="0.0" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0" textColor="#ffffff"/>
|
||||
|
||||
<paraStyle name="Table" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="User Index 10" rightIndent="0.0" leftIndent="127.0"/>
|
||||
<paraStyle name="Preformatted Text" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<images/>
|
||||
</stylesheet>
|
||||
<story>
|
||||
@@ -144,12 +141,12 @@
|
||||
<pto_header><!-- Must be after setLang() -->
|
||||
<blockTable colWidths="202.0,87.0,71.0,57.0,42.0,71.0" style="Table7">
|
||||
<tr>
|
||||
<td> <para style="terp_tblheader_Details">Description</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Centre">Taxes</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Centre">Quantity</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Unit Price </para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Disc.(%)</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Price</para> </td>
|
||||
<td><para style="terp_tblheader_Details"><b>Description</b></para></td>
|
||||
<td><para style="terp_tblheader_Details_Centre"><b>Taxes</b></para></td>
|
||||
<td><para style="terp_tblheader_Details_Centre"><b>Quantity</b></para></td>
|
||||
<td><para style="terp_tblheader_Details_Right"><b>Unit Price</b></para></td>
|
||||
<td><para style="terp_tblheader_Details_Right"><b>Disc.(%)</b></para></td>
|
||||
<td><para style="terp_tblheader_Details_Right"><b>Price</b></para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
</pto_header>
|
||||
@@ -172,29 +169,29 @@
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_header">Invoice [[ ((o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')) or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
|
||||
<para style="terp_header">PRO-FORMA [[ ((o.type == 'out_invoice' and o.state == 'proforma2') or removeParentNode('para')) and '' ]]</para>
|
||||
<para style="terp_header">Draft Invoice [[ ((o.type == 'out_invoice' and o.state == 'draft') or removeParentNode('para')) and '' ]]</para>
|
||||
<para style="terp_header">Cancelled Invoice [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
|
||||
<para style="terp_header">Refund [[ (o.type=='out_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
|
||||
<para style="terp_header">Supplier Refund [[ (o.type=='in_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
|
||||
<para style="terp_header">Supplier Invoice [[ (o.type=='in_invoice' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
|
||||
<para style="terp_header"><b>Invoice [[ ((o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')) or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
|
||||
<para style="terp_header"><b>PRO-FORMA [[ ((o.type == 'out_invoice' and o.state == 'proforma2') or removeParentNode('para')) and '' ]]</b></para>
|
||||
<para style="terp_header"><b>Draft Invoice [[ ((o.type == 'out_invoice' and o.state == 'draft') or removeParentNode('para')) and '' ]]</b></para>
|
||||
<para style="terp_header"><b>Cancelled Invoice [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
|
||||
<para style="terp_header"><b>Refund [[ (o.type=='out_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
|
||||
<para style="terp_header"><b>Supplier Refund [[ (o.type=='in_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
|
||||
<para style="terp_header"><b>Supplier Invoice [[ (o.type=='in_invoice' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="132.50,132.50,132.50,132.50" style="Table_Invoice_General_Header">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Description</para>
|
||||
<para style="terp_tblheader_General_Centre"><b>Description</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Invoice Date</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Source</para>
|
||||
<para style="terp_tblheader_General_Centre"><b>Invoice Date</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Customer Code</para>
|
||||
<para style="terp_tblheader_General_Centre"><b>Source</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre"><b>Customer Code</b></para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -220,22 +217,22 @@
|
||||
<blockTable colWidths="185.0,70.0,80.0,60.0,50.0,85.0" style="Table7">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_General">Description</para>
|
||||
<para style="terp_tblheader_General"><b>Description</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Taxes</para>
|
||||
<para style="terp_tblheader_General_Centre"><b>Taxes</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Right">Quantity</para>
|
||||
<para style="terp_tblheader_General_Right"><b>Quantity</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Right">Unit Price</para>
|
||||
<para style="terp_tblheader_General_Right"><b>Unit Price</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Right">Disc.(%)</para>
|
||||
<para style="terp_tblheader_General_Right"><b>Disc.(%)</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Right">Price</para>
|
||||
<para style="terp_tblheader_General_Right"><b>Price</b></para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -298,10 +295,10 @@
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">Total:</para>
|
||||
<para style="terp_tblheader_Details"><b>Total:</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Bold_Right_9">[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</para>
|
||||
<para style="terp_default_Bold_Right_9"><b>[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</b></para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -311,13 +308,13 @@
|
||||
<blockTable colWidths="205.0,71.0,71.0,183.0" style="Table9">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</para>
|
||||
<para style="terp_tblheader_Details"><b>Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">Base </para>
|
||||
<para style="terp_tblheader_Details_Right"><b>Base </b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">Amount </para>
|
||||
<para style="terp_tblheader_Details_Right"><b>Amount </b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_8">
|
||||
@@ -361,7 +358,7 @@
|
||||
<blockTable colWidths="120.0,410.0" style="Table1">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_Bold_9">Fiscal Position Remark : </para>
|
||||
<para style="terp_default_Bold_9"><b>Fiscal Position Remark : </b></para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ (o.fiscal_position and o.fiscal_position.note and format(o.fiscal_position.note)) or removeParentNode('blockTable') ]]</para>
|
||||
|
||||
@@ -38,7 +38,7 @@ class account_fiscalyear_close(osv.osv_memory):
|
||||
'report_name': fields.char('Name of new entries',size=64, required=True, help="Give name of the new entries"),
|
||||
}
|
||||
_defaults = {
|
||||
'report_name': _('End of Fiscal Year Entry'),
|
||||
'report_name': lambda self, cr, uid, context: _('End of Fiscal Year Entry'),
|
||||
}
|
||||
|
||||
def data_save(self, cr, uid, ids, context=None):
|
||||
|
||||
@@ -57,7 +57,7 @@ class validate_account_move_lines(osv.osv_memory):
|
||||
move_ids.append(line.move_id.id)
|
||||
move_ids = list(set(move_ids))
|
||||
if not move_ids:
|
||||
raise osv.except_osv(_('Warning!'), _('Selected Entry Lines does not have any account move enties in draft state.'))
|
||||
raise osv.except_osv(_('Warning!'), _('Selected Entry Lines does not have any account move entries in draft state.'))
|
||||
obj_move.button_validate(cr, uid, move_ids, context)
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ class CashBox(osv.osv_memory):
|
||||
|
||||
records = self.pool[active_model].browse(cr, uid, active_ids, context=context)
|
||||
|
||||
return self._run(cr, uid, ids, records, context=None)
|
||||
return self._run(cr, uid, ids, records, context=context)
|
||||
|
||||
def _run(self, cr, uid, ids, records, context=None):
|
||||
for box in self.browse(cr, uid, ids, context=context):
|
||||
|
||||
@@ -653,7 +653,7 @@ class account_analytic_account(osv.osv):
|
||||
fpos_obj = self.pool.get('account.fiscal.position')
|
||||
|
||||
if not contract.partner_id:
|
||||
raise osv.except_osv(_('No Customer Defined !'),_("You must first select a Customer for Contract %s!") % contract.name )
|
||||
raise osv.except_osv(_('No Customer Defined!'),_("You must first select a Customer for Contract %s!") % contract.name )
|
||||
|
||||
fpos = contract.partner_id.property_account_position.id or False
|
||||
journal_ids = journal_obj.search(cr, uid, [('type', '=','sale'),('company_id', '=', contract.company_id.id or False)], limit=1)
|
||||
|
||||
@@ -7,19 +7,19 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-05-31 07:35+0000\n"
|
||||
"PO-Revision-Date: 2013-06-19 13:43+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-01 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16660)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "No order to invoice, create"
|
||||
msgstr ""
|
||||
msgstr "Нет заказа для счета, создать"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
@@ -39,7 +39,7 @@ msgstr "Остаётся"
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Contracts in progress"
|
||||
msgstr ""
|
||||
msgstr "Незавершенные контракты"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,last_worked_invoiced_date:0
|
||||
@@ -88,7 +88,7 @@ msgstr "Дата последнего счета расходов"
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,fix_price_to_invoice:0
|
||||
msgid "Sum of quotations for this contract."
|
||||
msgstr ""
|
||||
msgstr "Сумма предложений по этому контракту."
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,ca_invoiced:0
|
||||
@@ -98,18 +98,18 @@ msgstr "Итого сумма к оплате заказчику для этог
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,timesheet_ca_invoiced:0
|
||||
msgid "Sum of timesheet lines invoiced for this contract."
|
||||
msgstr ""
|
||||
msgstr "Сумма позиций табеля выставленная в счет за этот контракт ."
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: code:addons/account_analytic_analysis/account_analytic_analysis.py:466
|
||||
#: code:addons/account_analytic_analysis/account_analytic_analysis.py:464
|
||||
#, python-format
|
||||
msgid "Sales Order Lines of %s"
|
||||
msgstr ""
|
||||
msgstr "Позиции заказа продаж %s"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,revenue_per_hour:0
|
||||
msgid "Computed using the formula: Invoiced Amount / Total Time"
|
||||
msgstr ""
|
||||
msgstr "Рассчитанный по формуле: Сумма по счетам / Итоговое время"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account_analytic_analysis.summary.month,account_id:0
|
||||
@@ -126,7 +126,7 @@ msgstr "Партнёр"
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Contracts that are not assigned to an account manager."
|
||||
msgstr ""
|
||||
msgstr "Контракты, которые не назначены бухгалтеру."
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue
|
||||
@@ -161,6 +161,7 @@ msgstr "Управляющий счётом"
|
||||
#: help:account.analytic.account,remaining_hours_to_invoice:0
|
||||
msgid "Computed using the formula: Maximum Time - Total Invoiced Time"
|
||||
msgstr ""
|
||||
"Рассчитанный по формуле: Максимальное время - Всё время выставленное в счетах"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
@@ -170,12 +171,12 @@ msgstr "Ожидается"
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Contracts not assigned"
|
||||
msgstr ""
|
||||
msgstr "Контракты не назначены"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,theorical_margin:0
|
||||
msgid "Computed using the formula: Theoretical Revenue - Total Costs"
|
||||
msgstr ""
|
||||
msgstr "Рассчитанный по формуле: теоретическая выручка - общие издержки"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,hours_qtt_invoiced:0
|
||||
@@ -219,17 +220,17 @@ msgstr ""
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Nothing to invoice, create"
|
||||
msgstr ""
|
||||
msgstr "Нечего выставить в счете, создать"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: model:res.groups,name:account_analytic_analysis.group_template_required
|
||||
msgid "Mandatory use of templates in contracts"
|
||||
msgstr ""
|
||||
msgstr "Обязательное использование шаблонов в контрактах"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,hours_quantity:0
|
||||
msgid "Total Worked Time"
|
||||
msgstr ""
|
||||
msgstr "Всё отработанное время"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,real_margin:0
|
||||
@@ -249,12 +250,12 @@ msgstr "Вычисляется по формуле: (Реальная маржа
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "or view"
|
||||
msgstr ""
|
||||
msgstr "или вид"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Customer Contracts"
|
||||
msgstr ""
|
||||
msgstr "Контакты заказчика"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
@@ -271,7 +272,7 @@ msgstr "Месяц"
|
||||
#: model:ir.actions.act_window,name:account_analytic_analysis.action_hr_tree_invoiced_all
|
||||
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_hr_tree_invoiced_all
|
||||
msgid "Time & Materials to Invoice"
|
||||
msgstr ""
|
||||
msgstr "Время и материалы в счет"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
@@ -343,9 +344,10 @@ msgstr "К продлению"
|
||||
#: view:account.analytic.account:0
|
||||
msgid ""
|
||||
"A contract in OpenERP is an analytic account having a partner set on it."
|
||||
msgstr ""
|
||||
msgstr "Контракт в OpenERP это аналитический счет с установленным партнером."
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
#: model:ir.actions.act_window,name:account_analytic_analysis.action_sales_order
|
||||
msgid "Sales Orders"
|
||||
msgstr "Заказы продаж"
|
||||
@@ -412,7 +414,7 @@ msgstr ""
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,revenue_per_hour:0
|
||||
msgid "Revenue per Time (real)"
|
||||
msgstr ""
|
||||
msgstr "Выручка за время (реальная)"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue_all
|
||||
@@ -578,7 +580,7 @@ msgstr ""
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,est_total:0
|
||||
msgid "Total Estimation"
|
||||
msgstr ""
|
||||
msgstr "Общая оценка"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,remaining_ca:0
|
||||
|
||||
@@ -72,8 +72,8 @@ class account_invoice_line(osv.osv):
|
||||
_inherit = "account.invoice.line"
|
||||
_description = "Invoice Line"
|
||||
|
||||
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None):
|
||||
res_prod = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, currency_id=currency_id, context=context, company_id=company_id)
|
||||
def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None):
|
||||
res_prod = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit, currency_id=currency_id, context=context, company_id=company_id)
|
||||
rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context=context)
|
||||
if rec:
|
||||
res_prod['value'].update({'account_analytic_id': rec.analytic_id.id})
|
||||
|
||||
@@ -332,7 +332,7 @@ class account_move_line(osv.osv):
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
if line.analytics_id:
|
||||
if not line.journal_id.analytic_journal_id:
|
||||
raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal.") % (line.journal_id.name,))
|
||||
raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal.") % (line.journal_id.name,))
|
||||
|
||||
toremove = analytic_line_obj.search(cr, uid, [('move_id','=',line.id)], context=context)
|
||||
if toremove:
|
||||
@@ -471,7 +471,7 @@ class account_bank_statement(osv.osv):
|
||||
for st_line in st.line_ids:
|
||||
if st_line.analytics_id:
|
||||
if not st.journal_id.analytic_journal_id:
|
||||
raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal.") % (st.journal_id.name,))
|
||||
raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal.") % (st.journal_id.name,))
|
||||
if not st_line.amount:
|
||||
continue
|
||||
return True
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<field name="inherit_id" ref="account.view_account_journal_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="centralisation" position="before">
|
||||
<field name="plan_id" />
|
||||
<field name="plan_id" groups="analytic.group_analytic_accounting"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -43,7 +43,8 @@ account.""",
|
||||
'depends': ['product', 'purchase'],
|
||||
'category': 'Accounting & Finance',
|
||||
'demo': [],
|
||||
'data': ['product_view.xml',],
|
||||
'data': ['product_view.xml'],
|
||||
'test': ['test/anglo_saxon.yml'],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -136,9 +136,9 @@ class account_invoice_line(osv.osv):
|
||||
res += diff_res
|
||||
return res
|
||||
|
||||
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None):
|
||||
def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None):
|
||||
fiscal_pool = self.pool.get('account.fiscal.position')
|
||||
res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, currency_id, context, company_id)
|
||||
res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit, currency_id, context, company_id)
|
||||
if not product:
|
||||
return res
|
||||
if type in ('in_invoice','in_refund'):
|
||||
|
||||
@@ -0,0 +1,299 @@
|
||||
-
|
||||
In order to test anglo_saxon Configure Different Accounts.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_valuation}:
|
||||
code: X3000
|
||||
name: Stock Valuation Account- (test)
|
||||
parent_id: account.cas
|
||||
type: other
|
||||
user_type: account.data_account_type_asset
|
||||
-
|
||||
Configure Stock Interim account (Received).
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_input}:
|
||||
code: X2800
|
||||
name: Stock Interim account (Received)
|
||||
parent_id: account.cos
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Stock Interim account (Delivered).
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_output}:
|
||||
code: X2801
|
||||
name: Stock Interim account (Delivered)
|
||||
parent_id: account.rev
|
||||
type: other
|
||||
user_type: account.data_account_type_income
|
||||
-
|
||||
Configure Price difference creditor Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_price_difference}:
|
||||
code: X7095
|
||||
name: Price difference creditor Account
|
||||
parent_id: account.cos
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Cash Bank Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_cash}:
|
||||
code: X5000
|
||||
name: Cash/Bank Account
|
||||
parent_id: account.cash
|
||||
type: other
|
||||
user_type: account.data_account_type_asset
|
||||
-
|
||||
Configure Creditor Account Payable.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_payable}:
|
||||
code: X440001
|
||||
name: Creditor Account Payable
|
||||
parent_id: account.a_pay
|
||||
type: other
|
||||
user_type: account.data_account_type_payable
|
||||
-
|
||||
Configure Debtor Account Receivable.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_receivable}:
|
||||
code: X400001
|
||||
name: Debtor Account Receivable
|
||||
parent_id: account.a_recv
|
||||
type: other
|
||||
user_type: account.data_account_type_receivable
|
||||
-
|
||||
Configure Cost of Good sale Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_cogs}:
|
||||
code: X7000
|
||||
name: Cost of goods sale account
|
||||
parent_id: account.o_expense
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Income Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_income}:
|
||||
code: X8000
|
||||
name: Income Account
|
||||
parent_id: account.o_income
|
||||
type: other
|
||||
user_type: account.data_account_type_income
|
||||
-
|
||||
I configure the account receivable of supplier
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_3}:
|
||||
property_account_payable: account_anglo_payable
|
||||
property_account_receivable: account_anglo_receivable
|
||||
-
|
||||
I configure the account receivable of Customer.
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_13}:
|
||||
property_account_payable: account_anglo_payable
|
||||
property_account_receivable: account_anglo_receivable
|
||||
-
|
||||
I configure the product category with stock valuation account.
|
||||
-
|
||||
!record {model: product.category, id: product.product_category_4}:
|
||||
property_stock_valuation_account_id: account_anglo_stock_valuation
|
||||
-
|
||||
I configure the product with required accounts, and cost method = standard
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
self.write(cr, uid, [ref('product.product_product_3')], {'list_price': 20.00,'standard_price': 9,'categ_id': ref('product.product_category_4'),'valuation': 'real_time',
|
||||
'property_account_income': ref('account_anglo_income'),'property_account_expense': ref('account_anglo_cogs'),
|
||||
'property_account_creditor_price_difference': ref('account_anglo_price_difference'),'property_stock_account_input': ref('account_anglo_stock_input'),
|
||||
'property_stock_account_output': ref('account_anglo_stock_output'), 'cost_method': 'standard'})
|
||||
-
|
||||
I create a draft Purchase Order.
|
||||
-
|
||||
!record {model: purchase.order, id: purchase_order_001}:
|
||||
partner_id: base.res_partner_3
|
||||
location_id: stock.stock_location_3
|
||||
pricelist_id: 1
|
||||
order_line:
|
||||
- product_id: product.product_product_3
|
||||
product_qty: 1
|
||||
price_unit: 10
|
||||
date_planned: '2013-08-31'
|
||||
-
|
||||
I confirm the purchase order.
|
||||
-
|
||||
!workflow {model: purchase.order, ref: purchase_order_001, action: purchase_confirm}
|
||||
-
|
||||
Reception is ready for process so now done the reception.
|
||||
-
|
||||
!python {model: stock.partial.picking}: |
|
||||
pick_ids = self.pool.get('purchase.order').browse(cr, uid, ref("purchase_order_001")).picking_ids
|
||||
partial_id = self.create(cr, uid, {},context={'active_model': 'stock.picking','active_ids': [pick_ids[0].id]})
|
||||
self.do_partial(cr, uid, [partial_id])
|
||||
-
|
||||
I check the Stock Interim account (Received) is credit successfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_input, string : Stock Interim account (Received) is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
I check the Stock valuation account is debit sucessfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_valuation, string : Stock valuation account is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I Validate Invoice of Purchase Order.
|
||||
-
|
||||
!python {model: purchase.order}: |
|
||||
invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_001")).invoice_ids]
|
||||
self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids)
|
||||
-
|
||||
I check the Stock Interim account (Received) is debited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_input, string : Stock Interim account (Received) is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check the Price difference creditor Account is debited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_price_difference, string : Price difference creditor Account is not debited successfully.}:
|
||||
- debit == 1
|
||||
-
|
||||
I check Payable(creditor) Account is Credited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_payable, string : Payable(creditor) Account is not Credited successfully.}:
|
||||
- credit == 10
|
||||
-
|
||||
I open the Invoice.
|
||||
-
|
||||
!python {model: purchase.order}: |
|
||||
po = self.browse(cr, uid, ref("purchase_order_001"))
|
||||
for invoice in po.invoice_ids:
|
||||
self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id])
|
||||
-
|
||||
I pay the invoice.
|
||||
-
|
||||
!python {model: purchase.order}: |
|
||||
invoice_ids = self.browse(cr, uid, ref("purchase_order_001")).invoice_ids
|
||||
order = self.browse(cr, uid, ref("purchase_order_001"))
|
||||
journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', order.company_id.id)], limit=1)
|
||||
for invoice in invoice_ids:
|
||||
invoice.pay_and_reconcile(invoice.amount_total, ref('account_anglo_cash'), ref('account.period_8'), journal_ids[0], ref('account_anglo_cash'), ref('account.period_8'), journal_ids[0], name='test')
|
||||
-
|
||||
I check Payable(Creditors) Account is Debited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_payable, string : Payable(Creditors) Account is not Debited successfully.}:
|
||||
- debit == 10
|
||||
-
|
||||
I check Bank/Cash account is credited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cash, string: Bank/Cash account is not credited successfully.}:
|
||||
- credit == 10
|
||||
-
|
||||
I create an Outgoing Picking order
|
||||
-
|
||||
!record {model: stock.picking, id: stock_picking_out001}:
|
||||
partner_id: base.res_partner_13
|
||||
invoice_state: 2binvoiced
|
||||
move_lines:
|
||||
- company_id: base.main_company
|
||||
location_id: stock.stock_location_3
|
||||
product_id: product.product_product_3
|
||||
product_qty: 1.0
|
||||
product_uom: product.product_uom_unit
|
||||
location_dest_id: stock.stock_location_customers
|
||||
move_type: direct
|
||||
type: out
|
||||
-
|
||||
I need to check the availability of the product, So I make my picking order for processing later.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.draft_force_assign(cr, uid, [ref("stock_picking_out001")], {"lang": "en_US", "search_default_available":
|
||||
1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner",
|
||||
"active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"),
|
||||
})
|
||||
-
|
||||
I check the product availability, Product is available in the stock and ready to be sent.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.action_assign(cr, uid, [ref("stock_picking_out001")], {"lang": "en_US", "search_default_available":
|
||||
1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner",
|
||||
"active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"),
|
||||
})
|
||||
-
|
||||
I process the delivery.
|
||||
-
|
||||
!python {model: stock.partial.picking}: |
|
||||
partial_id = self.create(cr, uid, {}, context={'active_model':'stock.picking','active_ids':[ref('stock_picking_out001')]})
|
||||
self.do_partial(cr, uid, [partial_id])
|
||||
-
|
||||
I check Stock Interim account (Delivery) is debited successfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_output, string : Stock Interim account (Delivery) is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check the Stock valuation account is credited sucessfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_valuation, string : Stock valuation account is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
As the Invoice state of the picking order is To be invoiced. I create invoice for my outgoing picking order.
|
||||
-
|
||||
!python {model: stock.invoice.onshipping}: |
|
||||
wiz_id = self.create(cr, uid, {'invoice_date': '2013-03-04', 'journal_id': ref('account.sales_journal')},
|
||||
{'active_ids': [ref("stock_picking_out001")], "active_model": "stock.picking"})
|
||||
self.create_invoice(cr, uid, [wiz_id], {"lang": "en_US",
|
||||
"search_default_available": 1, "tz": False, "active_model": "stock.picking",
|
||||
"contact_display": "partner", "active_ids": [ref("stock_picking_out001")], "active_id": ref("stock_picking_out001")})
|
||||
-
|
||||
I check that the customer invoice is created successfully.
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
partner_id = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).partner_id.id
|
||||
inv_ids = self.search(cr, uid, [('type','=','out_invoice'),('partner_id','=',partner_id)])
|
||||
assert inv_ids, 'No Invoice is generated!'
|
||||
-
|
||||
I open the Invoice.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).name
|
||||
account_invoice = self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)])
|
||||
self.pool.get('account.invoice').signal_invoice_open(cr, uid, account_invoice)
|
||||
-
|
||||
I check Income Account is Credited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_income, string : Income Account is not Credited successfully.}:
|
||||
- credit == 20
|
||||
-
|
||||
I check Cost of goods sold account for debit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cogs, string : Cost of goods sale is not Debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check Stock Interim account (Delivery)
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_output, string : Stock Interim account (Delivery) is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
I check Receivable(Debtor) Account for debit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_receivable, string : Receivable(Debtors) Account is not Debited successfully.}:
|
||||
- debit == 20
|
||||
-
|
||||
I pay the invoice.
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).name
|
||||
account_invoice= self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)])
|
||||
journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')], limit=1)
|
||||
pay = self.pay_and_reconcile(cr, uid, account_invoice,
|
||||
20.0, ref('account_anglo_cash'), ref('account.period_8'),
|
||||
journal_ids[0], ref('account_anglo_cash'),
|
||||
ref('account.period_8'), journal_ids[0],
|
||||
name='Payment for test customer invoice')
|
||||
assert (pay == True), "Incorrect Payment."
|
||||
-
|
||||
I check Receivable(Debtor) Account for credit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_receivable, string : Receivable(Debtors) Account is not Credited successfully.}:
|
||||
- credit == 20
|
||||
-
|
||||
I check Bank/Cash account is debited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cash, string: Bank/Cash account is not successfully credited.}:
|
||||
- debit == 20
|
||||
@@ -13,6 +13,17 @@
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_invoice_asset_category">
|
||||
<field name="name">account.invoice.supplier.form</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="account.invoice_supplier_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='invoice_line']/tree/field[@name='quantity']" position="before">
|
||||
<field name="asset_category_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -203,7 +203,9 @@
|
||||
<field name="view_id" ref="crossovered_budget_view_tree"/>
|
||||
<field name="search_view_id" ref="view_crossovered_budget_search"/>
|
||||
<field name="help" type="html">
|
||||
<p>
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new budget.
|
||||
</p><p>
|
||||
A budget is a forecast of your company's income and/or expenses
|
||||
expected for a period in the future. A budget is defined on some
|
||||
financial accounts and/or analytic accounts (that may represent
|
||||
|
||||
@@ -9,11 +9,12 @@
|
||||
<field name="model">res.partner</field>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Customer Followup">
|
||||
<tree string="Customer Followup" create="false" delete="false">
|
||||
<field name="display_name"/>
|
||||
<field name="payment_next_action_date"/>
|
||||
<field name="payment_next_action"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="country_id" invisible="1"/>
|
||||
<field name="parent_id" invisible="1"/>
|
||||
<field name="payment_responsible_id"/>
|
||||
<field name="payment_earliest_due_date"/>
|
||||
@@ -97,7 +98,7 @@
|
||||
<button name="action_done" type="object" string="⇾ Mark as Done"
|
||||
help="Click to mark the action as done." class="oe_link"
|
||||
attrs="{'invisible':[('payment_next_action_date','=', False)]}"
|
||||
groups="base.group_partner_manager"/>
|
||||
groups="account.group_account_user"/>
|
||||
<field name="payment_next_action" placeholder="Action to be taken e.g. Give a phonecall, Check if it's paid, ..."/>
|
||||
</div>
|
||||
</group>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<field name="name">account_followup.stat.tree</field>
|
||||
<field name="model">account_followup.stat</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Follow-up lines">
|
||||
<tree string="Follow-up lines" create="false">
|
||||
<field name="partner_id"/>
|
||||
<field name="date_move"/>
|
||||
<field name="date_move_last"/>
|
||||
|
||||
@@ -3,5 +3,5 @@ access_account_followup_followup_line,account_followup.followup.line,model_accou
|
||||
access_account_followup_followup_line_manager,account_followup.followup.line.manager,model_account_followup_followup_line,account.group_account_manager,1,1,1,1
|
||||
access_account_followup_followup_accountant,account_followup.followup user,model_account_followup_followup,account.group_account_invoice,1,0,0,0
|
||||
access_account_followup_followup_manager,account_followup.followup.manager,model_account_followup_followup,account.group_account_manager,1,1,1,1
|
||||
access_account_followup_stat_invoice,account_followup.stat.invoice,model_account_followup_stat,account.group_account_invoice,1,1,1,1
|
||||
access_account_followup_stat_by_partner_manager,account_followup.stat.by.partner,model_account_followup_stat_by_partner,account.group_account_user,1,1,1,1
|
||||
access_account_followup_stat_invoice,account_followup.stat.invoice,model_account_followup_stat,account.group_account_invoice,1,1,0,0
|
||||
access_account_followup_stat_by_partner_manager,account_followup.stat.by.partner,model_account_followup_stat_by_partner,account.group_account_user,1,1,0,0
|
||||
|
||||
|
@@ -23,6 +23,7 @@ import time
|
||||
from lxml import etree
|
||||
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
|
||||
class payment_order_create(osv.osv_memory):
|
||||
"""
|
||||
@@ -87,6 +88,7 @@ class payment_order_create(osv.osv_memory):
|
||||
'order_id': payment.id,
|
||||
'partner_id': line.partner_id and line.partner_id.id or False,
|
||||
'communication': line.ref or '/',
|
||||
'state': line.invoice and line.invoice.reference_type != 'none' and 'structured' or 'normal',
|
||||
'date': date_to_pay,
|
||||
'currency': (line.invoice and line.invoice.currency_id.id) or line.journal_id.currency.id or line.journal_id.company_id.currency_id.id,
|
||||
}, context=context)
|
||||
@@ -108,7 +110,7 @@ class payment_order_create(osv.osv_memory):
|
||||
context.update({'line_ids': line_ids})
|
||||
model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'view_create_payment_order_lines')], context=context)
|
||||
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
|
||||
return {'name': ('Entrie Lines'),
|
||||
return {'name': _('Entry Lines'),
|
||||
'context': context,
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form',
|
||||
|
||||
@@ -1622,7 +1622,7 @@ class account_bank_statement(osv.osv):
|
||||
for bk_st in self.browse(cr, uid, ids, context=context):
|
||||
if vals.get('journal_id') and bk_st.line_ids:
|
||||
if any([x.voucher_id and True or False for x in bk_st.line_ids]):
|
||||
raise osv.except_osv(_('Unable to change journal !'), _('You can not change the journal as you already reconciled some statement lines!'))
|
||||
raise osv.except_osv(_('Unable to Change Journal!'), _('You can not change the journal as you already reconciled some statement lines!'))
|
||||
return super(account_bank_statement, self).write(cr, uid, ids, vals, context=context)
|
||||
|
||||
|
||||
|
||||
@@ -7,14 +7,14 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-05-29 13:17+0000\n"
|
||||
"PO-Revision-Date: 2013-06-13 11:30+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-30 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16652)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-14 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16667)\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: field:account.bank.statement.line,voucher_id:0
|
||||
@@ -27,7 +27,7 @@ msgid "account.config.settings"
|
||||
msgstr "account.config.settings"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:369
|
||||
#: code:addons/account_voucher/account_voucher.py:417
|
||||
#, python-format
|
||||
msgid "Write-Off"
|
||||
msgstr "Списание"
|
||||
@@ -129,7 +129,7 @@ msgid "Voucher Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1547
|
||||
#: code:addons/account_voucher/account_voucher.py:1641
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can not change the journal as you already reconciled some statement "
|
||||
@@ -223,8 +223,8 @@ msgid "Journal Item"
|
||||
msgstr "Элемент журнала"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:508
|
||||
#: code:addons/account_voucher/account_voucher.py:981
|
||||
#: code:addons/account_voucher/account_voucher.py:558
|
||||
#: code:addons/account_voucher/account_voucher.py:1073
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr "Ошибка!"
|
||||
@@ -251,7 +251,7 @@ msgid "Cancelled"
|
||||
msgstr "Отменено"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1153
|
||||
#: code:addons/account_voucher/account_voucher.py:1249
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have to configure account base code and account tax code on the '%s' tax!"
|
||||
@@ -295,7 +295,7 @@ msgid "Tax"
|
||||
msgstr "Налог"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:879
|
||||
#: code:addons/account_voucher/account_voucher.py:971
|
||||
#, python-format
|
||||
msgid "Invalid Action!"
|
||||
msgstr "Неверное действие!"
|
||||
@@ -348,7 +348,7 @@ msgid "Import Invoices"
|
||||
msgstr "Импорт счетов"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1112
|
||||
#: code:addons/account_voucher/account_voucher.py:1208
|
||||
#, python-format
|
||||
msgid "Wrong voucher line"
|
||||
msgstr ""
|
||||
@@ -367,7 +367,7 @@ msgid "Receipt"
|
||||
msgstr "Приход"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1018
|
||||
#: code:addons/account_voucher/account_voucher.py:1110
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You should configure the 'Gain Exchange Rate Account' in the accounting "
|
||||
@@ -388,7 +388,7 @@ msgstr "Период"
|
||||
|
||||
#. module: account_voucher
|
||||
#: view:account.voucher:0
|
||||
#: code:addons/account_voucher/account_voucher.py:211
|
||||
#: code:addons/account_voucher/account_voucher.py:231
|
||||
#, python-format
|
||||
msgid "Supplier"
|
||||
msgstr "Поставщик"
|
||||
@@ -409,7 +409,7 @@ msgid "Debit"
|
||||
msgstr "Дебет"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1547
|
||||
#: code:addons/account_voucher/account_voucher.py:1641
|
||||
#, python-format
|
||||
msgid "Unable to change journal !"
|
||||
msgstr "Невозможно изменить журнал!"
|
||||
@@ -515,7 +515,7 @@ msgid "Pay Invoice"
|
||||
msgstr "Оплата счета"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1153
|
||||
#: code:addons/account_voucher/account_voucher.py:1249
|
||||
#, python-format
|
||||
msgid "No Account Base Code and Account Tax Code!"
|
||||
msgstr ""
|
||||
@@ -569,15 +569,15 @@ msgid "To Review"
|
||||
msgstr "Для проверки"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1025
|
||||
#: code:addons/account_voucher/account_voucher.py:1039
|
||||
#: code:addons/account_voucher/account_voucher.py:1194
|
||||
#: code:addons/account_voucher/account_voucher.py:1120
|
||||
#: code:addons/account_voucher/account_voucher.py:1134
|
||||
#: code:addons/account_voucher/account_voucher.py:1286
|
||||
#, python-format
|
||||
msgid "change"
|
||||
msgstr "изменить"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1014
|
||||
#: code:addons/account_voucher/account_voucher.py:1106
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You should configure the 'Loss Exchange Rate Account' in the accounting "
|
||||
@@ -631,6 +631,7 @@ msgstr "Месяц"
|
||||
#. module: account_voucher
|
||||
#: field:account.voucher,currency_id:0
|
||||
#: field:account.voucher.line,currency_id:0
|
||||
#: model:ir.model,name:account_voucher.model_res_currency
|
||||
#: field:sale.receipt.report,currency_id:0
|
||||
msgid "Currency"
|
||||
msgstr "Валюта"
|
||||
@@ -674,7 +675,7 @@ msgid "Reconcile Payment Balance"
|
||||
msgstr "Сверка платежного баланса"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:975
|
||||
#: code:addons/account_voucher/account_voucher.py:1067
|
||||
#, python-format
|
||||
msgid "Configuration Error !"
|
||||
msgstr "Ошибка конфигурации !"
|
||||
@@ -739,7 +740,7 @@ msgid "October"
|
||||
msgstr "Октябрь"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:976
|
||||
#: code:addons/account_voucher/account_voucher.py:1068
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr "Пожалуйста, включите нумерацию выбранного журнала!"
|
||||
@@ -819,7 +820,7 @@ msgid "Previous Payments ?"
|
||||
msgstr "Предыдущие платежи ?"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1112
|
||||
#: code:addons/account_voucher/account_voucher.py:1208
|
||||
#, python-format
|
||||
msgid "The invoice you are willing to pay is not valid anymore."
|
||||
msgstr "Счет, который вы готовы платить, уже не актуален ."
|
||||
@@ -851,7 +852,7 @@ msgid "Active"
|
||||
msgstr "Активно"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:982
|
||||
#: code:addons/account_voucher/account_voucher.py:1074
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "Пожалуйста, определите нумерацию журнала."
|
||||
@@ -861,7 +862,7 @@ msgstr "Пожалуйста, определите нумерацию журна
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_vendor_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_vendor_receipt
|
||||
msgid "Customer Payments"
|
||||
msgstr "Платежи клиентов"
|
||||
msgstr "Платежи заказчиков"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt_report_all
|
||||
@@ -979,7 +980,7 @@ msgid "Journal Items"
|
||||
msgstr "Элементы журнала"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:508
|
||||
#: code:addons/account_voucher/account_voucher.py:558
|
||||
#, python-format
|
||||
msgid "Please define default credit/debit accounts on the journal \"%s\"."
|
||||
msgstr ""
|
||||
@@ -1188,7 +1189,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:879
|
||||
#: code:addons/account_voucher/account_voucher.py:971
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
@@ -1251,8 +1252,8 @@ msgid "Status <b>changed</b>"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1014
|
||||
#: code:addons/account_voucher/account_voucher.py:1018
|
||||
#: code:addons/account_voucher/account_voucher.py:1106
|
||||
#: code:addons/account_voucher/account_voucher.py:1110
|
||||
#, python-format
|
||||
msgid "Insufficient Configuration!"
|
||||
msgstr ""
|
||||
|
||||
@@ -157,7 +157,7 @@ class account_analytic_account(osv.osv):
|
||||
for account in self.browse(cr, uid, ids, context=context):
|
||||
if account.company_id:
|
||||
if account.company_id.currency_id.id != value:
|
||||
raise osv.except_osv(_('Error!'), _("If you set a company, the currency selected has to be the same as it's currency. \nYou can remove the company belonging, and thus change the currency, only on analytic account of type 'view'. This can be really usefull for consolidation purposes of several companies charts with different currencies, for example."))
|
||||
raise osv.except_osv(_('Error!'), _("If you set a company, the currency selected has to be the same as it's currency. \nYou can remove the company belonging, and thus change the currency, only on analytic account of type 'view'. This can be really useful for consolidation purposes of several companies charts with different currencies, for example."))
|
||||
if value:
|
||||
return cr.execute("""update account_analytic_account set currency_id=%s where id=%s""", (value, account.id, ))
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ class hr_analytic_timesheet(osv.osv):
|
||||
a = r.product_id.categ_id.property_account_expense_categ.id
|
||||
if not a:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_('There is no expense account define ' \
|
||||
_('There is no expense account defined ' \
|
||||
'for this product: "%s" (id:%d)') % \
|
||||
(r.product_id.name, r.product_id.id,))
|
||||
# Compute based on pricetype
|
||||
@@ -133,7 +133,7 @@ class hr_analytic_timesheet(osv.osv):
|
||||
a = r.product_id.categ_id.property_account_expense_categ.id
|
||||
if not a:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_('There is no expense account define ' \
|
||||
_('There is no expense account defined ' \
|
||||
'for this product: "%s" (id:%d)') % \
|
||||
(r.product_id.name, r.product_id.id,))
|
||||
# Compute based on pricetype
|
||||
|
||||
@@ -86,11 +86,11 @@ class ir_model_fields_anonymization(osv.osv):
|
||||
if context.get('manual'):
|
||||
global_state = self._get_global_state(cr, uid, context=context)
|
||||
if global_state == 'anonymized':
|
||||
raise osv.except_osv('Error !', "The database is currently anonymized, you cannot create, modify or delete fields.")
|
||||
raise osv.except_osv('Error!', "The database is currently anonymized, you cannot create, modify or delete fields.")
|
||||
elif global_state == 'unstable':
|
||||
msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
|
||||
" while some fields are not anonymized. You should try to solve this problem before trying to create, write or delete fields.")
|
||||
raise osv.except_osv('Error !', msg)
|
||||
raise osv.except_osv('Error!', msg)
|
||||
|
||||
return True
|
||||
|
||||
@@ -357,7 +357,7 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
|
||||
else:
|
||||
msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
|
||||
" while some fields are not anonymized. You should try to solve this problem before trying to do anything else.")
|
||||
raise osv.except_osv('Error !', msg)
|
||||
raise osv.except_osv('Error!', msg)
|
||||
|
||||
res['arch'] = etree.tostring(eview)
|
||||
|
||||
@@ -521,11 +521,11 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
|
||||
# check that all the defined fields are in the 'anonymized' state
|
||||
state = ir_model_fields_anonymization_model._get_global_state(cr, uid, context=context)
|
||||
if state == 'clear':
|
||||
raise osv.except_osv_('Error !', "The database is not currently anonymized, you cannot reverse the anonymization.")
|
||||
raise osv.except_osv_('Error!', "The database is not currently anonymized, you cannot reverse the anonymization.")
|
||||
elif state == 'unstable':
|
||||
msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
|
||||
" while some fields are not anonymized. You should try to solve this problem before trying to do anything.")
|
||||
raise osv.except_osv('Error !', msg)
|
||||
raise osv.except_osv('Error!', msg)
|
||||
|
||||
wizards = self.browse(cr, uid, ids, context=context)
|
||||
for wizard in wizards:
|
||||
|
||||
@@ -102,7 +102,10 @@ class OAuthController(oeweb.Controller):
|
||||
registry = RegistryManager.get(dbname)
|
||||
with registry.cursor() as cr:
|
||||
IMD = registry['ir.model.data']
|
||||
model, provider_id = IMD.get_object_reference(cr, SUPERUSER_ID, 'auth_oauth', 'provider_openerp')
|
||||
try:
|
||||
model, provider_id = IMD.get_object_reference(cr, SUPERUSER_ID, 'auth_oauth', 'provider_openerp')
|
||||
except ValueError:
|
||||
return set_cookie_and_redirect(req, '/?db=%s' % dbname)
|
||||
assert model == 'auth.oauth.provider'
|
||||
|
||||
state = {
|
||||
|
||||
@@ -56,19 +56,22 @@ class res_partner(osv.Model):
|
||||
def _get_signup_url_for_action(self, cr, uid, ids, action='login', view_type=None, menu_id=None, res_id=None, model=None, context=None):
|
||||
""" generate a signup url for the given partner ids and action, possibly overriding
|
||||
the url state components (menu_id, id, view_type) """
|
||||
if context is None:
|
||||
context= {}
|
||||
res = dict.fromkeys(ids, False)
|
||||
base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
|
||||
for partner in self.browse(cr, uid, ids, context):
|
||||
# when required, make sure the partner has a valid signup token
|
||||
if context and context.get('signup_valid') and not partner.user_ids:
|
||||
if context.get('signup_valid') and not partner.user_ids:
|
||||
self.signup_prepare(cr, uid, [partner.id], context=context)
|
||||
partner.refresh()
|
||||
|
||||
# the parameters to encode for the query and fragment part of url
|
||||
query = {'db': cr.dbname}
|
||||
fragment = {'action': action, 'type': partner.signup_type}
|
||||
signup_type = context.get('signup_force_type_in_url', partner.signup_type or '')
|
||||
fragment = {'action': action, 'type': signup_type}
|
||||
|
||||
if partner.signup_token:
|
||||
if partner.signup_token and signup_type:
|
||||
fragment['token'] = partner.signup_token
|
||||
elif partner.user_ids:
|
||||
fragment['db'] = cr.dbname
|
||||
|
||||
@@ -7,7 +7,7 @@ openerp.auth_signup = function(instance) {
|
||||
var self = this;
|
||||
this.signup_enabled = false;
|
||||
this.reset_password_enabled = false;
|
||||
return this._super().then(function() {
|
||||
return this._super().always(function() {
|
||||
|
||||
// Switches the login box to the select mode whith mode == [default|signup|reset]
|
||||
self.on('change:login_mode', self, function() {
|
||||
|
||||
@@ -66,6 +66,7 @@ class base_action_rule(osv.osv):
|
||||
[('on_create', 'On Creation'), ('on_write', 'On Update'), ('on_time', 'Based on Timed Condition')],
|
||||
string='When to Run'),
|
||||
'trg_date_id': fields.many2one('ir.model.fields', string='Trigger Date',
|
||||
help="When should the condition be triggered. If present, will be checked by the scheduler. If empty, will be checked at creation and update.",
|
||||
domain="[('model_id', '=', model_id), ('ttype', 'in', ('date', 'datetime'))]"),
|
||||
'trg_date_range': fields.integer('Delay after trigger date',
|
||||
help="Delay after the trigger date." \
|
||||
|
||||
@@ -60,7 +60,7 @@ class crm_meeting(base_state, osv.Model):
|
||||
'categ_ids': fields.many2many('crm.meeting.type', 'meeting_category_rel',
|
||||
'event_id', 'type_id', 'Tags'),
|
||||
'attendee_ids': fields.many2many('calendar.attendee', 'meeting_attendee_rel',\
|
||||
'event_id', 'attendee_id', 'Attendees', states={'done': [('readonly', True)]}),
|
||||
'event_id', 'attendee_id', 'Invited People', states={'done': [('readonly', True)]}),
|
||||
}
|
||||
_defaults = {
|
||||
'state': 'open',
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-20 13:54+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-21 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16677)\n"
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Comments for Translator"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,job_id:0
|
||||
msgid "Gengo Job ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:114
|
||||
#, python-format
|
||||
msgid "This language is not supported by the Gengo translation services."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_comment:0
|
||||
msgid "Comments"
|
||||
msgstr "ความคิดเห็น"
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_private_key:0
|
||||
msgid "Gengo Private Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_base_gengo_translations
|
||||
msgid "base.gengo.translations"
|
||||
msgstr "base.gengo.translations"
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:res.company,gengo_auto_approve:0
|
||||
msgid "Jobs are Automatically Approved by Gengo."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:base.gengo.translations,lang_id:0
|
||||
msgid "Language"
|
||||
msgstr "ภาษา"
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,gengo_comment:0
|
||||
msgid "Comments & Activity Linked to Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:124
|
||||
#, python-format
|
||||
msgid "Gengo Sync Translation (Response)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:72
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Gengo `Public Key` or `Private Key` are missing. Enter your Gengo "
|
||||
"authentication parameters under `Settings > Companies > Gengo Parameters`."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Translation By Machine"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:155
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
"\n"
|
||||
"--\n"
|
||||
" Commented on %s by %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,gengo_translation:0
|
||||
msgid "Gengo Translation Service Level"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: constraint:ir.translation:0
|
||||
msgid ""
|
||||
"The Gengo translation service selected is not supported for this language."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:ir.translation,gengo_translation:0
|
||||
msgid ""
|
||||
"You can select here the service level you want for an automatic translation "
|
||||
"using Gengo."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:base.gengo.translations,restart_send_job:0
|
||||
msgid "Restart Sending Job"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "To Approve In Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Private Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Public Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_public_key:0
|
||||
msgid "Gengo Public Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:123
|
||||
#, python-format
|
||||
msgid "Gengo Sync Translation (Request)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "Translations"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_auto_approve:0
|
||||
msgid "Auto Approve Translation ?"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.actions.act_window,name:base_gengo.action_wizard_base_gengo_translations
|
||||
#: model:ir.ui.menu,name:base_gengo.menu_action_wizard_base_gengo_translations
|
||||
msgid "Gengo: Manual Request of Translation"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/ir_translation.py:62
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:109
|
||||
#, python-format
|
||||
msgid "Gengo Authentication Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid ""
|
||||
"Note: If the translation state is 'In Progress', it means that the "
|
||||
"translation has to be approved to be uploaded in this system. You are "
|
||||
"supposed to do that directly by using your Gengo Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:82
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Gengo connection failed with this message:\n"
|
||||
"``%s``"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Gengo Parameters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Ultra"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_ir_translation
|
||||
msgid "ir.translation"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "Gengo Translation Service"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Pro"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Gengo Request Form"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:114
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:res.company,gengo_comment:0
|
||||
msgid ""
|
||||
"This comment will be automatically be enclosed in each an every request sent "
|
||||
"to Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,9 @@
|
||||
Name,Is a company,Related company,Address type,Customer,Supplier,Street,ZIP,City,State,Country
|
||||
Aurora Shelves,1,,,1,0,25 Pacific Road,95101,San José,CA,United States
|
||||
Roger Martins,0,Aurora Shelves,Invoice,1,0,27 Pacific Road,95102,San José,CA,United States
|
||||
House Sales Direct,1,,,1,0,104 Saint Mary Avenue,94059,Redwood,CA,United States
|
||||
Yvan Holiday,0,House Sales Direct,Default,1,0,104 Saint Mary Avenue,94060,Redwood,CA,United States
|
||||
Jack Unsworth,0,House Sales Direct,Invoice,1,0,227 Jackson Road,94061,Redwood,CA,United States
|
||||
Michael Mason,0,,,1,0,16 5th Avenue,94104,San Francisco,CA,United States
|
||||
International Wood,1,,,1,0,748 White House Boulevard,20004,Washington,DC,United States
|
||||
Sharon Pecker,0,International Wood,Invoice,1,0,755 White House Boulevard,20005,Washington,DC,United States
|
||||
|
@@ -1,8 +0,0 @@
|
||||
Name,Address type,Street,City,Country,Tags,Supplier,Customer,Is a company,Companies that refers to partner / Parent company
|
||||
Wood y Wood Pecker,,"Snow Street, 25",Kainuu,Finland,Supplier,1,0,1,
|
||||
Roger Pecker,Default,"Snow Street, 27",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
|
||||
Sharon Pecker,Delivery,"Snow Street, 28",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
|
||||
Thomas Pecker,Contact,"Snow Street, 27",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
|
||||
Vicking Direct,,"Atonium Street, 45a",Brussels,Belgium,Supplier,1,0,1,
|
||||
Yvan Holiday,Invoice,"Atonium Street, 45b",Brussels,Belgium,Supplier,1,0,0,Vicking Direct
|
||||
Jack Unsworth,Contact,"Atonium Street, 45a",Brussels,Belgium,Supplier,1,0,0,Vicking Direct
|
||||
|
@@ -229,8 +229,8 @@
|
||||
orders with their respective purchase order lines:</p>
|
||||
<a href="/base_import/static/csv/o2m_purchase_order_lines.csv">Purchase orders with their respective purchase order lines</a>
|
||||
<p>The following CSV file shows how to import
|
||||
suppliers and their respective contacts</p>
|
||||
<a href="/base_import/static/csv/o2m_suppliers_contacts.csv">Suppliers and their respective contacts</a>
|
||||
customers and their respective contacts</p>
|
||||
<a href="/base_import/static/csv/o2m_customers_contacts.csv">Customers and their respective contacts</a>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
@@ -14,9 +14,13 @@
|
||||
<label string="This plug-in allows you to create/modify OpenERP Reports into OpenOffice Writer."/>
|
||||
</separator>
|
||||
<xpath expr="//button[@string='Install Modules']" position="replace">
|
||||
<button name="action_next" icon="gtk-go-forward" type="object" string="Configure" invisible="context.get('menu',False)" class="oe_highlight"/>
|
||||
<button name="action_next" type="object" string="Configure" invisible="context.get('menu',False)" class="oe_highlight"/>
|
||||
<label string="or" invisible="context.get('menu',False)" class="oe_inline"/>
|
||||
</xpath>
|
||||
<xpath expr="//button[@string='Skip']" position="replace">
|
||||
<button string="Ok" class="oe_highlight" special="cancel" invisible="context.get('active_model',False)"/>
|
||||
<button string="Skip" class="oe_link" special="cancel" invisible="context.get('menu',False)"/>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//separator[@string='title']" position="after">
|
||||
<group colspan="8" height="450" width="750">
|
||||
<field name="name" invisible="1"/>
|
||||
|
||||
@@ -61,8 +61,8 @@ class RPCSession(object):
|
||||
protocol = m.group(1)
|
||||
if not m:
|
||||
return -1
|
||||
if protocol == 'http://' or protocol == 'http://':
|
||||
self.gateway = XMLRPCGateway(host, port, 'http')
|
||||
if protocol == 'http://' or protocol == 'https://':
|
||||
self.gateway = XMLRPCGateway(host, port, protocol[:-3])
|
||||
elif protocol == 'socket://':
|
||||
|
||||
self.gateway = NETRPCGateway(host, port)
|
||||
|
||||
BIN
Binary file not shown.
@@ -7,14 +7,14 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-05-27 12:19+0000\n"
|
||||
"Last-Translator: leksei <lirgus@gmail.com>\n"
|
||||
"PO-Revision-Date: 2013-06-17 10:30+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-28 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16640)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: base_setup
|
||||
#: view:sale.config.settings:0
|
||||
@@ -92,7 +92,7 @@ msgstr "Общие настройки"
|
||||
#. module: base_setup
|
||||
#: selection:base.setup.terminology,partner:0
|
||||
msgid "Donor"
|
||||
msgstr ""
|
||||
msgstr "Спонсор"
|
||||
|
||||
#. module: base_setup
|
||||
#: view:base.config.settings:0
|
||||
@@ -147,7 +147,7 @@ msgstr "res_config_contents"
|
||||
#. module: base_setup
|
||||
#: view:sale.config.settings:0
|
||||
msgid "Customer Features"
|
||||
msgstr ""
|
||||
msgstr "Свойства заказчика"
|
||||
|
||||
#. module: base_setup
|
||||
#: view:base.config.settings:0
|
||||
@@ -157,7 +157,7 @@ msgstr "Импорт / Экспорт"
|
||||
#. module: base_setup
|
||||
#: view:sale.config.settings:0
|
||||
msgid "Sale Features"
|
||||
msgstr ""
|
||||
msgstr "Свойства продаж"
|
||||
|
||||
#. module: base_setup
|
||||
#: field:sale.config.settings,module_plugin_outlook:0
|
||||
@@ -232,7 +232,7 @@ msgstr ""
|
||||
#. module: base_setup
|
||||
#: model:ir.model,name:base_setup.model_sale_config_settings
|
||||
msgid "sale.config.settings"
|
||||
msgstr ""
|
||||
msgstr "sale.config.settings"
|
||||
|
||||
#. module: base_setup
|
||||
#: field:base.setup.terminology,partner:0
|
||||
@@ -263,7 +263,7 @@ msgstr ""
|
||||
#. module: base_setup
|
||||
#: model:ir.model,name:base_setup.model_base_setup_terminology
|
||||
msgid "base.setup.terminology"
|
||||
msgstr ""
|
||||
msgstr "base.setup.terminology"
|
||||
|
||||
#. module: base_setup
|
||||
#: selection:base.setup.terminology,partner:0
|
||||
|
||||
@@ -104,7 +104,7 @@ class base_state(object):
|
||||
if parent_id.change_responsible and parent_id.user_id:
|
||||
data['user_id'] = parent_id.user_id.id
|
||||
else:
|
||||
raise osv.except_osv(_('Error !'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
|
||||
raise osv.except_osv(_('Error!'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
|
||||
self.write(cr, uid, [case.id], data, context=context)
|
||||
case.case_escalate_send_note(parent_id, context=context)
|
||||
return True
|
||||
|
||||
@@ -83,6 +83,8 @@ class res_partner(osv.osv):
|
||||
Check the VAT number depending of the country.
|
||||
http://sima-pc.com/nif.php
|
||||
'''
|
||||
if not ustr(country_code).encode('utf-8').isalpha():
|
||||
return False
|
||||
check_func_name = 'check_vat_' + country_code
|
||||
check_func = getattr(self, check_func_name, None) or \
|
||||
getattr(vatnumber, check_func_name, None)
|
||||
|
||||
@@ -31,7 +31,7 @@ Lets the user create a custom dashboard.
|
||||
Allows users to create custom dashboard.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['base'],
|
||||
'depends': ['base', 'web'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'board_view.xml',
|
||||
|
||||
@@ -344,7 +344,7 @@ instance.board.AddToDashboard = instance.web.search.Input.extend({
|
||||
},
|
||||
load_data:function(){
|
||||
var board = new instance.web.Model('board.board');
|
||||
return board.call('list');
|
||||
return board.call('list', [board.context()]);
|
||||
},
|
||||
_x:function() {
|
||||
if (!instance.webclient) { return $.Deferred().reject(); }
|
||||
|
||||
@@ -77,12 +77,12 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||
|
||||
_track = {
|
||||
'state': {
|
||||
'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'new',
|
||||
'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['new', 'draft'],
|
||||
'crm.mt_lead_won': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done',
|
||||
'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'cancel',
|
||||
},
|
||||
'stage_id': {
|
||||
'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'cancel', 'done'],
|
||||
'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'draft', 'cancel', 'done'],
|
||||
},
|
||||
}
|
||||
|
||||
@@ -103,7 +103,9 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||
if vals.get('type'):
|
||||
ctx['default_type'] = vals['type']
|
||||
vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx)
|
||||
return super(crm_lead, self).create(cr, uid, vals, context=context)
|
||||
# context: no_log, because subtype already handle this
|
||||
create_context = dict(context, mail_create_nolog=True)
|
||||
return super(crm_lead, self).create(cr, uid, vals, context=create_context)
|
||||
|
||||
def _get_default_section_id(self, cr, uid, context=None):
|
||||
""" Gives default section by checking if present in the context """
|
||||
@@ -678,8 +680,9 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||
merged_data['stage_id'] = section_stage_ids and section_stage_ids[0] or False
|
||||
# Write merged data into first opportunity
|
||||
self.write(cr, uid, [highest.id], merged_data, context=context)
|
||||
# Delete tail opportunities
|
||||
self.unlink(cr, uid, [x.id for x in tail_opportunities], context=context)
|
||||
# Delete tail opportunities
|
||||
# We use the SUPERUSER to avoid access rights issues because as the user had the rights to see the records it should be safe to do so
|
||||
self.unlink(cr, SUPERUSER_ID, [x.id for x in tail_opportunities], context=context)
|
||||
|
||||
return highest.id
|
||||
|
||||
|
||||
+12
-7
@@ -7,14 +7,14 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-05-30 13:52+0000\n"
|
||||
"PO-Revision-Date: 2013-06-06 09:56+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-31 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16660)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-07 05:48+0000\n"
|
||||
"X-Generator: Launchpad (build 16667)\n"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
@@ -56,6 +56,11 @@ msgid ""
|
||||
"Description: [[object.description]]\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Внимание, необработанный кандидат создан более 5 дней назад.\n"
|
||||
"Название: [[object.name ]]\n"
|
||||
"Идентификатор: [[object.id ]]\n"
|
||||
"Описание: [[object.description]]\n"
|
||||
" "
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.opportunity2phonecall,action:0
|
||||
@@ -953,7 +958,7 @@ msgstr "Следующее действие"
|
||||
#: code:addons/crm/crm_lead.py:763
|
||||
#, python-format
|
||||
msgid "<b>Partner</b> set to <em>%s</em>."
|
||||
msgstr ""
|
||||
msgstr "<b>Партнер</b> установлен как <em>%s</em>."
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.lead.report,state:0
|
||||
@@ -1894,7 +1899,7 @@ msgstr "Кандидаты"
|
||||
#: code:addons/crm/crm_lead.py:563
|
||||
#, python-format
|
||||
msgid "Merged leads"
|
||||
msgstr ""
|
||||
msgstr "Объединенные кандидаты"
|
||||
|
||||
#. module: crm
|
||||
#: model:crm.case.categ,name:crm.categ_oppor5
|
||||
@@ -2721,7 +2726,7 @@ msgstr "Улица (2-я строка)"
|
||||
#. module: crm
|
||||
#: field:sale.config.settings,module_crm_helpdesk:0
|
||||
msgid "Manage Helpdesk and Support"
|
||||
msgstr ""
|
||||
msgstr "Управление поддержкой"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.lead.report,delay_open:0
|
||||
@@ -2830,7 +2835,7 @@ msgstr "Дата создания"
|
||||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
msgstr "в"
|
||||
|
||||
#. module: crm
|
||||
#: model:crm.case.stage,name:crm.stage_lead1
|
||||
|
||||
@@ -2,19 +2,6 @@
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Add section_id (Sales Team) to res.partner -->
|
||||
<record id="view_partners_form_crm1" model="ir.ui.view">
|
||||
<field name="name">view.res.partner.form.crm.inherited1</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="section_id" completion="1" groups="base.group_multi_salesteams"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- open meetings related to given partner -->
|
||||
<record id="crm_meeting_partner" model="ir.actions.act_window">
|
||||
<field name="name">Meetings</field>
|
||||
@@ -91,24 +78,31 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="res_partner_view_buttons">
|
||||
<field name="name">res.partner.view.buttons</field>
|
||||
<!-- Add section_id (SalesTeam) and contextual button on partner form view -->
|
||||
<record id="view_partners_form_crm1" model="ir.ui.view">
|
||||
<field name="name">view.res.partner.form.crm.inherited1</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button type="action"
|
||||
string="Meetings"
|
||||
name="%(base_calendar.action_crm_meeting)d"
|
||||
context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/>
|
||||
<button type="action" string="Calls"
|
||||
name="%(crm.crm_case_categ_phone_incoming0)d"
|
||||
context="{'search_default_partner_id': active_id, 'default_duration': 1.0}" />
|
||||
<button type="action" string="Opportunities" attrs="{'invisible': [('customer', '=', False)]}"
|
||||
name="%(crm.crm_case_category_act_oppor11)d" context="{'search_default_partner_id': active_id}"/>
|
||||
</xpath>
|
||||
<data>
|
||||
<field name="user_id" position="after">
|
||||
<field name="section_id" completion="1" groups="base.group_multi_salesteams"/>
|
||||
</field>
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button class="oe_inline" type="action" string="Opportunities"
|
||||
attrs="{'invisible': [('customer', '=', False)]}"
|
||||
name="%(crm.crm_case_category_act_oppor11)d"
|
||||
context="{'search_default_partner_id': active_id}"/>
|
||||
<button class="oe_inline" type="action"
|
||||
string="Meetings"
|
||||
name="%(base_calendar.action_crm_meeting)d"
|
||||
context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/>
|
||||
<button class="oe_inline" type="action" string="Calls"
|
||||
name="%(crm.crm_case_categ_phone_incoming0)d"
|
||||
context="{'search_default_partner_id': active_id, 'default_duration': 1.0}" />
|
||||
</xpath>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
|
||||
if lead.state in ['done', 'cancel']:
|
||||
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled leads cannot be converted into opportunities."))
|
||||
raise osv.except_osv(_("Warning!"), _("Closed/Cancelled leads cannot be converted into opportunities."))
|
||||
return False
|
||||
|
||||
def _convert_opportunity(self, cr, uid, ids, vals, context=None):
|
||||
|
||||
@@ -42,14 +42,20 @@ automatically new claims based on incoming emails.
|
||||
'security/ir.model.access.csv',
|
||||
'report/crm_claim_report_view.xml',
|
||||
'crm_claim_data.xml',
|
||||
'res_partner_view.xml',
|
||||
],
|
||||
'demo': ['crm_claim_demo.xml'],
|
||||
'test': ['test/process/claim.yml',
|
||||
'test/ui/claim_demo.yml'
|
||||
'test': [
|
||||
'test/process/claim.yml',
|
||||
'test/ui/claim_demo.yml'
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/claim_categories.jpeg','images/claim_stages.jpeg','images/claims.jpeg'],
|
||||
'images': [
|
||||
'images/claim_categories.jpeg',
|
||||
'images/claim_stages.jpeg',
|
||||
'images/claims.jpeg'
|
||||
],
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -15,7 +15,11 @@
|
||||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="context">{"search_default_user_id":uid, "stage_type":'claim'}</field>
|
||||
<field name="search_view_id" ref="crm_claim.view_crm_case_claims_filter"/>
|
||||
<field name="help">Record and track your customers' claims. Claims may be linked to a sales order or a lot. You can send emails with attachments and keep the full history for a claim (emails sent, intervention type and so on). Claims may automatically be linked to an email address using the mail gateway module.</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Record and track your customers' claims. Claims may be linked to a sales order or a lot.You can send emails with attachments and keep the full history for a claim (emails sent, intervention type and so on).Claims may automatically be linked to an email address using the mail gateway module.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_claim0">
|
||||
|
||||
@@ -216,35 +216,5 @@
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_claim_partner_info_form1" model="ir.ui.view">
|
||||
<field name="name">res.partner.claim.info.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='page_history']" position="attributes">
|
||||
<attribute name="invisible">False</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='page_history']" position="inside">
|
||||
<group name="grp_claim" string="Claims">
|
||||
<field name="claims_ids" colspan="4" nolabel="1">
|
||||
<tree string="Partners Claim" editable="bottom">
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_partner_id': [active_id], 'default_partner_id': active_id}"
|
||||
id="act_claim_partner"
|
||||
name="Claims"
|
||||
view_mode="tree,form"
|
||||
res_model="crm.claim"
|
||||
src_model="res.partner"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- Partners inherited form -->
|
||||
<record id="view_claim_res_partner_info_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.claim.info.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="priority" eval="50"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button class="oe_inline" type="action"
|
||||
name="%(crm_case_categ_claim0)d"
|
||||
string="Claims"
|
||||
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
|
||||
groups="base.group_sale_salesman" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2012-12-14 13:33+0000\n"
|
||||
"Last-Translator: 盈通 ccdos <ccdos@163.com>\n"
|
||||
"PO-Revision-Date: 2013-06-07 05:02+0000\n"
|
||||
"Last-Translator: PeterGao <306739889@qq.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-03-16 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16532)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-08 05:52+0000\n"
|
||||
"X-Generator: Launchpad (build 16667)\n"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk.report,delay_close:0
|
||||
@@ -656,6 +656,12 @@ msgid ""
|
||||
" \n"
|
||||
"If the case needs to be reviewed then the status is set to 'Pending'."
|
||||
msgstr ""
|
||||
"当一个“case(事件)\"被新创建后,这个“case(事件)\"的状态为“草稿”状态。 "
|
||||
" \n"
|
||||
"若这个“case(事件)\"正在处理中,这个“case(事件)\"的状态为“开启”状态。\n"
|
||||
"若这个“case(事件)\"已处理完结,这个“case(事件)\"的状态为“结单”状态。 "
|
||||
" \n"
|
||||
"若这个“case(事件)\"需暂停再议,这个“case(事件)\"的状态为“挂起”状态。"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: help:crm.helpdesk,message_ids:0
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-05-30 14:10+0000\n"
|
||||
"PO-Revision-Date: 2013-06-06 10:24+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: Russian <ru@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-31 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16660)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-07 05:48+0000\n"
|
||||
"X-Generator: Launchpad (build 16667)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,delay_close:0
|
||||
@@ -670,7 +670,7 @@ msgstr ""
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.partner.report.assign,period_id:0
|
||||
msgid "Invoice Period"
|
||||
msgstr ""
|
||||
msgstr "Период счета"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.model,name:crm_partner_assign.model_res_partner_grade
|
||||
@@ -706,6 +706,8 @@ msgid ""
|
||||
"Cannot contact geolocation servers. Please make sure that your internet "
|
||||
"connection is up and running (%s)."
|
||||
msgstr ""
|
||||
"Не удается связаться с сервером геолокации. Пожалуйста, убедитесь, что ваше "
|
||||
"подключение к интернету работает (%s)."
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
|
||||
@@ -124,6 +124,7 @@ class crm_lead_forward_to_partner(osv.TransientModel):
|
||||
lead_ids = context and context.get('active_ids', []) or []
|
||||
value = self.default_get(cr, uid, ['body', 'email_to', 'email_cc', 'subject', 'history_mode'], context=context)
|
||||
value.pop('composition_mode')
|
||||
self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner.id for partner in wizard.partner_ids], context=context)
|
||||
self.write(cr, uid, ids, value, context=context)
|
||||
|
||||
return self.send_mail(cr, uid, ids, context=context)
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
# Danish translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-19 17:34+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.model,name:crm_todo.model_project_task
|
||||
msgid "Task"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Timebox"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Lead"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "For cancelling the task"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
||||
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
||||
msgid "My Tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
#: field:crm.lead,task_ids:0
|
||||
msgid "Tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.model,name:crm_todo.model_crm_lead
|
||||
msgid "Lead/Opportunity"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: field:project.task,lead_id:0
|
||||
msgid "Lead / Opportunity"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "For changing to done state"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
@@ -51,10 +51,10 @@ class sale_order(osv.osv):
|
||||
for order in self.browse(cr, uid, ids, context=context):
|
||||
grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id)
|
||||
if not grid_id:
|
||||
raise osv.except_osv(_('No grid available !'), _('No grid matching for this carrier !'))
|
||||
raise osv.except_osv(_('No Grid Available!'), _('No grid matching for this carrier!'))
|
||||
|
||||
if not order.state in ('draft'):
|
||||
raise osv.except_osv(_('Order not in draft state !'), _('The order state have to be draft to add delivery lines.'))
|
||||
raise osv.except_osv(_('Order not in Draft State!'), _('The order state have to be draft to add delivery lines.'))
|
||||
|
||||
grid = grid_obj.browse(cr, uid, grid_id, context=context)
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<tree string="Document Page">
|
||||
<field name="name"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="create_uid" invisible="1"/>
|
||||
<field name="write_uid"/>
|
||||
<field name="write_date"/>
|
||||
</tree>
|
||||
@@ -87,7 +88,11 @@
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_wiki_tree"/>
|
||||
<field name="search_view_id" ref="view_wiki_filter"/>
|
||||
<field name="help">Create web pages</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new web page.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<menuitem id="menu_page" parent="menu_wiki" name="Pages" action="action_page" sequence="10"/>
|
||||
<record id="action_category" model="ir.actions.act_window">
|
||||
|
||||
@@ -126,7 +126,7 @@ class edi(osv.AbstractModel):
|
||||
module = edi_document.get('__import_module') or edi_document.get('__module')
|
||||
assert module, 'a `__module` or `__import_module` attribute is required in each EDI document.'
|
||||
if module != 'base' and not ir_module.search(cr, uid, [('name','=',module),('state','=','installed')]):
|
||||
raise osv.except_osv(_('Missing application.'),
|
||||
raise osv.except_osv(_('Missing Application.'),
|
||||
_("The document you are trying to import requires the OpenERP `%s` application. "
|
||||
"You can install it by connecting as the administrator and opening the configuration assistant.")%(module,))
|
||||
model = edi_document.get('__import_model') or edi_document.get('__model')
|
||||
|
||||
@@ -24,8 +24,8 @@ import base64
|
||||
import logging
|
||||
|
||||
import openerp
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp.osv import osv, fields
|
||||
from openerp.osv import fields
|
||||
from openerp import tools
|
||||
from openerp.tools.translate import _
|
||||
from urllib import urlencode, quote as quote
|
||||
@@ -191,7 +191,6 @@ class email_template(osv.osv):
|
||||
}
|
||||
|
||||
def create_action(self, cr, uid, ids, context=None):
|
||||
vals = {}
|
||||
action_obj = self.pool.get('ir.actions.act_window')
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
for template in self.browse(cr, uid, ids, context=context):
|
||||
@@ -199,7 +198,7 @@ class email_template(osv.osv):
|
||||
model_data_id = data_obj._get_id(cr, uid, 'mail', 'email_compose_message_wizard_form')
|
||||
res_id = data_obj.browse(cr, uid, model_data_id, context=context).res_id
|
||||
button_name = _('Send Mail (%s)') % template.name
|
||||
vals['ref_ir_act_window'] = action_obj.create(cr, uid, {
|
||||
act_id = action_obj.create(cr, SUPERUSER_ID, {
|
||||
'name': button_name,
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'mail.compose.message',
|
||||
@@ -211,27 +210,29 @@ class email_template(osv.osv):
|
||||
'target': 'new',
|
||||
'auto_refresh':1
|
||||
}, context)
|
||||
vals['ref_ir_value'] = self.pool.get('ir.values').create(cr, uid, {
|
||||
ir_values_id = self.pool.get('ir.values').create(cr, SUPERUSER_ID, {
|
||||
'name': button_name,
|
||||
'model': src_obj,
|
||||
'key2': 'client_action_multi',
|
||||
'value': "ir.actions.act_window," + str(vals['ref_ir_act_window']),
|
||||
'value': "ir.actions.act_window,%s" % act_id,
|
||||
'object': True,
|
||||
}, context)
|
||||
self.write(cr, uid, ids, {
|
||||
'ref_ir_act_window': vals.get('ref_ir_act_window',False),
|
||||
'ref_ir_value': vals.get('ref_ir_value',False),
|
||||
}, context)
|
||||
|
||||
template.write({
|
||||
'ref_ir_act_window': act_id,
|
||||
'ref_ir_value': ir_values_id,
|
||||
})
|
||||
|
||||
return True
|
||||
|
||||
def unlink_action(self, cr, uid, ids, context=None):
|
||||
for template in self.browse(cr, uid, ids, context=context):
|
||||
try:
|
||||
if template.ref_ir_act_window:
|
||||
self.pool.get('ir.actions.act_window').unlink(cr, uid, template.ref_ir_act_window.id, context)
|
||||
self.pool.get('ir.actions.act_window').unlink(cr, SUPERUSER_ID, template.ref_ir_act_window.id, context)
|
||||
if template.ref_ir_value:
|
||||
ir_values_obj = self.pool.get('ir.values')
|
||||
ir_values_obj.unlink(cr, uid, template.ref_ir_value.id, context)
|
||||
ir_values_obj.unlink(cr, SUPERUSER_ID, template.ref_ir_value.id, context)
|
||||
except Exception:
|
||||
raise osv.except_osv(_("Warning"), _("Deletion of the action record failed."))
|
||||
return True
|
||||
|
||||
@@ -54,18 +54,22 @@ class mail_compose_message(osv.TransientModel):
|
||||
Indeed, basic mail.compose.message wizard duplicates attachments in mass
|
||||
mailing mode. But in 'single post' mode, attachments of an email template
|
||||
also have to be duplicated to avoid changing their ownership. """
|
||||
if context is None:
|
||||
context = {}
|
||||
wizard_context = dict(context)
|
||||
for wizard in self.browse(cr, uid, ids, context=context):
|
||||
if wizard.template_id and not wizard.template_id.user_signature:
|
||||
wizard_context['mail_notify_user_signature'] = False # template user_signature is added when generating body_html
|
||||
if not wizard.attachment_ids or wizard.composition_mode == 'mass_mail' or not wizard.template_id:
|
||||
continue
|
||||
template = self.pool.get('email.template').browse(cr, uid, wizard.template_id.id, context=context)
|
||||
new_attachment_ids = []
|
||||
for attachment in wizard.attachment_ids:
|
||||
if attachment in template.attachment_ids:
|
||||
if attachment in wizard.template_id.attachment_ids:
|
||||
new_attachment_ids.append(self.pool.get('ir.attachment').copy(cr, uid, attachment.id, {'res_model': 'mail.compose.message', 'res_id': wizard.id}, context=context))
|
||||
else:
|
||||
new_attachment_ids.append(attachment.id)
|
||||
self.write(cr, uid, wizard.id, {'attachment_ids': [(6, 0, new_attachment_ids)]}, context=context)
|
||||
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
|
||||
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=wizard_context)
|
||||
|
||||
def onchange_template_id(self, cr, uid, ids, template_id, composition_mode, model, res_id, context=None):
|
||||
""" - mass_mailing: we cannot render, so return the template values
|
||||
|
||||
@@ -21,15 +21,13 @@
|
||||
|
||||
from openerp.osv import fields, osv
|
||||
|
||||
|
||||
class res_partner(osv.osv):
|
||||
_inherit = 'res.partner'
|
||||
|
||||
_columns = {
|
||||
'speaker': fields.boolean('Speaker', help="Check this box if this contact is a speaker."),
|
||||
'event_ids': fields.one2many('event.event','main_speaker_id', readonly=True),
|
||||
'event_registration_ids': fields.one2many('event.registration','partner_id', readonly=True),
|
||||
}
|
||||
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Partners inherited form -->
|
||||
|
||||
<record id="view_event_partner_info_form" model="ir.ui.view">
|
||||
<!-- Partners inherited form -->
|
||||
<record id="view_event_partner_info_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.event.info.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
@@ -12,34 +11,8 @@
|
||||
<field name="supplier" position="after">
|
||||
<field name="speaker"/>
|
||||
</field>
|
||||
<xpath expr="//page[@name='page_history']" position="attributes">
|
||||
<attribute name="invisible">False</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='page_history']" position="inside">
|
||||
<group name="grp_event" string="Events">
|
||||
<field name="event_ids" colspan="4" nolabel="1">
|
||||
<tree string="Events">
|
||||
<field name="name" string="Event"/>
|
||||
<field name="main_speaker_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
<group name="grp_registration" string="Registrations">
|
||||
<field name="event_registration_ids" colspan="4" nolabel="1">
|
||||
<tree string="Events Registration">
|
||||
<field name="event_begin_date" string="Date"/>
|
||||
<field name="event_id" />
|
||||
<field name="nb_register"/>
|
||||
<field name="state"/>
|
||||
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
|
||||
<button name="button_reg_close" string="Close Registration" states="open" type="object" icon="gtk-close"/>
|
||||
<button name="check_confirm" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
# Danish translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-19 17:36+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: event_sale
|
||||
#: model:ir.model,name:event_sale.model_product_product
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: help:product.product,event_ok:0
|
||||
msgid ""
|
||||
"Determine if a product needs to create automatically an event registration "
|
||||
"at the confirmation of a sales order line."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: help:sale.order.line,event_id:0
|
||||
msgid ""
|
||||
"Choose an event and it will automatically create a registration for this "
|
||||
"event."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: model:event.event,name:event_sale.event_technical_training
|
||||
msgid "Technical training in Grand-Rosiere"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: help:product.product,event_type_id:0
|
||||
msgid ""
|
||||
"Select event types so when we use this product in sales order lines, it will "
|
||||
"filter events of this type only."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:product.product,event_type_id:0
|
||||
msgid "Type of Event"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_ok:0
|
||||
msgid "event_ok"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:product.product,event_ok:0
|
||||
msgid "Event Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_type_id:0
|
||||
msgid "Event Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: model:product.template,name:event_sale.event_product_product_template
|
||||
msgid "Technical Training"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: code:addons/event_sale/event_sale.py:88
|
||||
#, python-format
|
||||
msgid "The registration %s has been created from the Sales Order %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_id:0
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: model:ir.model,name:event_sale.model_sale_order_line
|
||||
msgid "Sales Order Line"
|
||||
msgstr ""
|
||||
@@ -1,3 +1,2 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_fetchmail_server,fetchmail.server,model_fetchmail_server,,1,0,0,0
|
||||
access_fetchmail_server,fetchmail.server,model_fetchmail_server,base.group_system,1,1,1,1
|
||||
|
||||
|
@@ -591,6 +591,9 @@
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="context">{"search_default_groupby_vehicle" : True}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new odometer log.
|
||||
</p>
|
||||
<p>
|
||||
Here you can add various odometer entries for all vehicles.
|
||||
You can also show odometer value for a particular vehicle using
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,5 +23,6 @@ import hr_department
|
||||
import hr
|
||||
|
||||
import res_config
|
||||
import res_users
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -59,6 +59,8 @@ You can manage:
|
||||
'hr_installer.xml',
|
||||
'hr_data.xml',
|
||||
'res_config_view.xml',
|
||||
'mail_hr_view.xml',
|
||||
'res_users_view.xml',
|
||||
],
|
||||
'demo': ['hr_demo.xml'],
|
||||
'test': [
|
||||
@@ -69,5 +71,7 @@ You can manage:
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
'css': [ 'static/src/css/hr.css' ],
|
||||
'js': [ 'static/src/js/suggestions.js' ],
|
||||
'qweb': [ 'static/src/xml/suggestions.xml' ],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
+81
-26
@@ -25,9 +25,11 @@ from openerp.modules.module import get_module_resource
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
from openerp import tools
|
||||
from openerp.tools.translate import _
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class hr_employee_category(osv.osv):
|
||||
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
@@ -150,6 +152,7 @@ class hr_job(osv.osv):
|
||||
class hr_employee(osv.osv):
|
||||
_name = "hr.employee"
|
||||
_description = "Employee"
|
||||
_order = 'name_related'
|
||||
_inherits = {'resource.resource': "resource_id"}
|
||||
_inherit = ['mail.thread']
|
||||
|
||||
@@ -158,10 +161,10 @@ class hr_employee(osv.osv):
|
||||
for obj in self.browse(cr, uid, ids, context=context):
|
||||
result[obj.id] = tools.image_get_resized_images(obj.image)
|
||||
return result
|
||||
|
||||
|
||||
def _set_image(self, cr, uid, id, name, value, args, context=None):
|
||||
return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context)
|
||||
|
||||
|
||||
_columns = {
|
||||
#we need a related field in order to be able to sort the employee by name
|
||||
'name_related': fields.related('resource_id', 'name', type='char', string='Name', readonly=True, store=True),
|
||||
@@ -171,12 +174,12 @@ class hr_employee(osv.osv):
|
||||
'sinid': fields.char('SIN No', size=32, help="Social Insurance Number"),
|
||||
'identification_id': fields.char('Identification No', size=32),
|
||||
'otherid': fields.char('Other Id', size=64),
|
||||
'gender': fields.selection([('male', 'Male'),('female', 'Female')], 'Gender'),
|
||||
'gender': fields.selection([('male', 'Male'), ('female', 'Female')], 'Gender'),
|
||||
'marital': fields.selection([('single', 'Single'), ('married', 'Married'), ('widower', 'Widower'), ('divorced', 'Divorced')], 'Marital Status'),
|
||||
'department_id':fields.many2one('hr.department', 'Department'),
|
||||
'department_id': fields.many2one('hr.department', 'Department'),
|
||||
'address_id': fields.many2one('res.partner', 'Working Address'),
|
||||
'address_home_id': fields.many2one('res.partner', 'Home Address'),
|
||||
'bank_account_id':fields.many2one('res.partner.bank', 'Bank Account Number', domain="[('partner_id','=',address_home_id)]", help="Employee bank salary account"),
|
||||
'bank_account_id': fields.many2one('res.partner.bank', 'Bank Account Number', domain="[('partner_id','=',address_home_id)]", help="Employee bank salary account"),
|
||||
'work_phone': fields.char('Work Phone', size=32, readonly=False),
|
||||
'mobile_phone': fields.char('Work Mobile', size=32, readonly=False),
|
||||
'work_email': fields.char('Work Email', size=240),
|
||||
@@ -207,25 +210,42 @@ class hr_employee(osv.osv):
|
||||
help="Small-sized photo of the employee. It is automatically "\
|
||||
"resized as a 64x64px image, with aspect ratio preserved. "\
|
||||
"Use this field anywhere a small image is required."),
|
||||
'passport_id':fields.char('Passport No', size=64),
|
||||
'passport_id': fields.char('Passport No', size=64),
|
||||
'color': fields.integer('Color Index'),
|
||||
'city': fields.related('address_id', 'city', type='char', string='City'),
|
||||
'login': fields.related('user_id', 'login', type='char', string='Login', readonly=1),
|
||||
'last_login': fields.related('user_id', 'date', type='datetime', string='Latest Connection', readonly=1),
|
||||
}
|
||||
|
||||
_order='name_related'
|
||||
def _get_default_image(self, cr, uid, context=None):
|
||||
image_path = get_module_resource('hr', 'static/src/img', 'default_image.png')
|
||||
return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64'))
|
||||
|
||||
defaults = {
|
||||
'active': 1,
|
||||
'image': _get_default_image,
|
||||
'color': 0,
|
||||
}
|
||||
|
||||
def create(self, cr, uid, data, context=None):
|
||||
employee_id = super(hr_employee, self).create(cr, uid, data, context=context)
|
||||
try:
|
||||
(model, mail_group_id) = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'mail', 'group_all_employees')
|
||||
employee = self.browse(cr, uid, employee_id, context=context)
|
||||
self.pool.get('mail.group').message_post(cr, uid, [mail_group_id],
|
||||
body=_('Welcome to %s! Please help him/her take the first steps with OpenERP!') % (employee.name),
|
||||
subtype='mail.mt_comment', context=context)
|
||||
except:
|
||||
pass # group deleted: do not push a message
|
||||
if context is None:
|
||||
context = {}
|
||||
create_ctx = dict(context, mail_create_nolog=True)
|
||||
employee_id = super(hr_employee, self).create(cr, uid, data, context=create_ctx)
|
||||
employee = self.browse(cr, uid, employee_id, context=context)
|
||||
if employee.user_id:
|
||||
# send a copy to every user of the company
|
||||
company_id = employee.user_id.partner_id.company_id.id
|
||||
partner_ids = self.pool.get('res.partner').search(cr, uid, [
|
||||
('company_id', '=', company_id),
|
||||
('user_ids', '!=', False)], context=context)
|
||||
else:
|
||||
partner_ids = []
|
||||
self.message_post(cr, uid, [employee_id],
|
||||
body=_('Welcome to %s! Please help him/her take the first steps with OpenERP!') % (employee.name),
|
||||
partner_ids=partner_ids,
|
||||
subtype='mail.mt_comment', context=context
|
||||
)
|
||||
return employee_id
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
@@ -246,7 +266,7 @@ class hr_employee(osv.osv):
|
||||
company_id = self.pool.get('res.company').browse(cr, uid, company, context=context)
|
||||
address = self.pool.get('res.partner').address_get(cr, uid, [company_id.partner_id.id], ['default'])
|
||||
address_id = address and address['default'] or False
|
||||
return {'value': {'address_id' : address_id}}
|
||||
return {'value': {'address_id': address_id}}
|
||||
|
||||
def onchange_department_id(self, cr, uid, ids, department_id, context=None):
|
||||
value = {'parent_id': False}
|
||||
@@ -259,17 +279,36 @@ class hr_employee(osv.osv):
|
||||
work_email = False
|
||||
if user_id:
|
||||
work_email = self.pool.get('res.users').browse(cr, uid, user_id, context=context).email
|
||||
return {'value': {'work_email' : work_email}}
|
||||
return {'value': {'work_email': work_email}}
|
||||
|
||||
def _get_default_image(self, cr, uid, context=None):
|
||||
image_path = get_module_resource('hr', 'static/src/img', 'default_image.png')
|
||||
return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64'))
|
||||
def action_follow(self, cr, uid, ids, context=None):
|
||||
""" Wrapper because message_subscribe_users take a user_ids=None
|
||||
that receive the context without the wrapper. """
|
||||
return self.message_subscribe_users(cr, uid, ids, context=context)
|
||||
|
||||
_defaults = {
|
||||
'active': 1,
|
||||
'image': _get_default_image,
|
||||
'color': 0,
|
||||
}
|
||||
def action_unfollow(self, cr, uid, ids, context=None):
|
||||
""" Wrapper because message_unsubscribe_users take a user_ids=None
|
||||
that receive the context without the wrapper. """
|
||||
return self.message_unsubscribe_users(cr, uid, ids, context=context)
|
||||
|
||||
def get_suggested_thread(self, cr, uid, removed_suggested_threads=None, context=None):
|
||||
"""Show the suggestion of employees if display_employees_suggestions if the
|
||||
user perference allows it. """
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid, context)
|
||||
if not user.display_employees_suggestions:
|
||||
return []
|
||||
else:
|
||||
return super(hr_employee, self).get_suggested_thread(cr, uid, removed_suggested_threads, context)
|
||||
|
||||
def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
|
||||
""" Overwrite of the original method to always follow user_id field,
|
||||
even when not track_visibility so that a user will follow it's employee
|
||||
"""
|
||||
user_field_lst = []
|
||||
for name, column_info in self._all_columns.items():
|
||||
if name in auto_follow_fields and name in updated_fields and column_info.column._obj == 'res.users':
|
||||
user_field_lst.append(name)
|
||||
return user_field_lst
|
||||
|
||||
def _check_recursion(self, cr, uid, ids, context=None):
|
||||
level = 100
|
||||
@@ -285,6 +324,22 @@ class hr_employee(osv.osv):
|
||||
(_check_recursion, 'Error! You cannot create recursive hierarchy of Employee(s).', ['parent_id']),
|
||||
]
|
||||
|
||||
# ---------------------------------------------------
|
||||
# Mail gateway
|
||||
# ---------------------------------------------------
|
||||
|
||||
def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
|
||||
""" mail.message document permission rule: can post a new message if can read
|
||||
because of portal document. """
|
||||
if not model_obj:
|
||||
model_obj = self
|
||||
employee_ids = model_obj.search(cr, uid, [('user_id', '=', uid)], context=context)
|
||||
if employee_ids and operation == 'create':
|
||||
model_obj.check_access_rights(cr, uid, 'read')
|
||||
model_obj.check_access_rule(cr, uid, mids, 'read', context=context)
|
||||
else:
|
||||
return super(hr_employee, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
|
||||
|
||||
|
||||
class hr_department(osv.osv):
|
||||
_description = "Department"
|
||||
|
||||
+18
-4
@@ -27,6 +27,10 @@
|
||||
</h1>
|
||||
<label for="category_ids" class="oe_edit_only" groups="base.group_hr_user"/>
|
||||
<field name="category_ids" widget="many2many_tags" placeholder="e.g. Part Time" groups="base.group_hr_user"/>
|
||||
<label for="work_email" class="oe_edit_only"/>
|
||||
<field name="work_email" widget="email"/>
|
||||
<label for="work_phone" class="oe_edit_only"/>
|
||||
<field name="work_phone"/>
|
||||
</div>
|
||||
<div class="oe_right oe_button_box" name="button_box">
|
||||
<!-- Put here related buttons -->
|
||||
@@ -36,8 +40,6 @@
|
||||
<group>
|
||||
<group string="Contact Information">
|
||||
<field name="address_id" on_change="onchange_address_id(address_id)" context="{'show_address': 1}" options='{"always_reload": True, "highlight_first_line": True}'/>
|
||||
<field name="work_email" widget="email"/>
|
||||
<field name="work_phone"/>
|
||||
<field name="mobile_phone"/>
|
||||
<field name="work_location"/>
|
||||
</group>
|
||||
@@ -136,6 +138,9 @@
|
||||
<field name="arch" type="xml">
|
||||
<kanban>
|
||||
<field name="last_login"/>
|
||||
<field name="message_is_follower"/>
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="message_ids"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_employee_vignette">
|
||||
@@ -154,10 +159,19 @@
|
||||
</li>
|
||||
<li t-if="record.job_id.raw_value"><field name="job_id"/></li>
|
||||
<li t-if="record.work_location.raw_value"><field name="work_location"/></li>
|
||||
<li t-if="record.work_phone.raw_value">Tel: <field name="work_phone"/></li>
|
||||
<li t-if="record.mobile_phone.raw_value">Mobile: <field name="mobile_phone"/></li>
|
||||
<li t-if="record.work_email.raw_value"><a t-attf-href="mailto:#{record.work_email.value}"><field name="work_email"/></a></li>
|
||||
</ul>
|
||||
<div class="oe_kanban_footer_left">
|
||||
<span title='Messages'><span class='oe_e'>9</span><t t-esc="record.message_ids.raw_value.length"/></span>
|
||||
<span title='Followers'><span class='oe_e'>+</span><t t-esc="record.message_follower_ids.raw_value.length"/></span>
|
||||
</div>
|
||||
<div class="oe_followers" groups="base.group_user">
|
||||
<button t-if="record.message_is_follower.raw_value" name="action_unfollow" type="object" class="oe_follower oe_following">
|
||||
<span class="oe_unfollow">Unfollow</span>
|
||||
<span class="oe_following">Following</span>
|
||||
</button>
|
||||
<button t-if="! record.message_is_follower.raw_value" name="action_follow" type="object" class="oe_follower oe_notfollow">Follow</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="mail.action_mail_inbox_feeds" model="ir.actions.client">
|
||||
<field name="params" eval=""{
|
||||
'domain': [
|
||||
('to_read', '=', True),
|
||||
('starred', '=', False),
|
||||
],
|
||||
'view_mailbox': True,
|
||||
'view_inbox': True,
|
||||
'read_action': 'read',
|
||||
'show_compose_message': True
|
||||
}""/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -0,0 +1,65 @@
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
|
||||
|
||||
class res_users(osv.Model):
|
||||
""" Update of res.users class
|
||||
- if adding groups to an user, check if base.group_user is in it
|
||||
(member of 'Employee'), create an employee form linked to it.
|
||||
"""
|
||||
_name = 'res.users'
|
||||
_inherit = ['res.users']
|
||||
|
||||
_columns = {
|
||||
'display_employees_suggestions': fields.boolean("Display Employees Suggestions"),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'display_employees_suggestions': True,
|
||||
}
|
||||
|
||||
def __init__(self, pool, cr):
|
||||
""" Override of __init__ to add access rights on
|
||||
display_employees_suggestions fields. Access rights are disabled by
|
||||
default, but allowed on some specific fields defined in
|
||||
self.SELF_{READ/WRITE}ABLE_FIELDS.
|
||||
"""
|
||||
init_res = super(res_users, self).__init__(pool, cr)
|
||||
# duplicate list to avoid modifying the original reference
|
||||
self.SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS)
|
||||
self.SELF_WRITEABLE_FIELDS.append('display_employees_suggestions')
|
||||
# duplicate list to avoid modifying the original reference
|
||||
self.SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS)
|
||||
self.SELF_READABLE_FIELDS.append('display_employees_suggestions')
|
||||
return init_res
|
||||
|
||||
def stop_showing_employees_suggestions(self, cr, uid, user_id, context=None):
|
||||
"""Update display_employees_suggestions value to False"""
|
||||
if context is None:
|
||||
context = {}
|
||||
self.write(cr, uid, user_id, {"display_employees_suggestions": False}, context)
|
||||
|
||||
def _create_welcome_message(self, cr, uid, user, context=None):
|
||||
"""Do not welcome new users anymore, welcome new employees instead"""
|
||||
return True
|
||||
|
||||
def _message_post_get_eid(self, cr, uid, thread_id, context=None):
|
||||
assert thread_id, "res.users does not support posting global messages"
|
||||
if context and 'thread_model' in context:
|
||||
context['thread_model'] = 'hr.employee'
|
||||
if isinstance(thread_id, (list, tuple)):
|
||||
thread_id = thread_id[0]
|
||||
return self.pool.get('hr.employee').search(cr, uid, [('user_id', '=', thread_id)], context=context)
|
||||
|
||||
def message_post(self, cr, uid, thread_id, context=None, **kwargs):
|
||||
""" Redirect the posting of message on res.users to the related employee.
|
||||
This is done because when giving the context of Chatter on the
|
||||
various mailboxes, we do not have access to the current partner_id. """
|
||||
if kwargs.get('type') == 'email':
|
||||
return super(res_users, self).message_post(cr, uid, thread_id, context=context, **kwargs)
|
||||
employee_ids = self._message_post_get_eid(cr, uid, thread_id, context=context)
|
||||
if not employee_ids:
|
||||
pass # dpo something
|
||||
for employee_id in employee_ids:
|
||||
res = self.pool.get('hr.employee').message_post(cr, uid, employee_id, context=context, **kwargs)
|
||||
return res
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Update user form !-->
|
||||
<record id="view_users_form_mail" model="ir.ui.view">
|
||||
<field name="name">res.users.form.hr</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="mail.view_users_form_mail"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<field name="display_groups_suggestions" position="after">
|
||||
<field name="display_employees_suggestions"/>
|
||||
</field>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -0,0 +1,78 @@
|
||||
openerp.hr = function(session) {
|
||||
var _t = session.web._t;
|
||||
var QWeb = session.web.qweb;
|
||||
|
||||
var suggestions = session.suggestions;
|
||||
var removed_suggested_employee = session.suggestions.removed_suggested_employee = [];
|
||||
|
||||
suggestions.Employees = session.web.Widget.extend({
|
||||
events: {
|
||||
'click .oe_suggestion_remove.oe_suggestion_employee': 'stop_employee_suggestion',
|
||||
'click .oe_suggestion_remove_item.oe_suggestion_employee': 'remove_employee_suggestion',
|
||||
'click .oe_suggestion_follow': 'follow_employee',
|
||||
},
|
||||
|
||||
init: function () {
|
||||
this._super(this, arguments);
|
||||
this.hr_employee = new session.web.DataSetSearch(this, 'hr.employee');
|
||||
this.res_users = new session.web.DataSetSearch(this, 'res.users');
|
||||
this.employees = [];
|
||||
},
|
||||
|
||||
start: function () {
|
||||
this._super.apply(this, arguments);
|
||||
return this.fetch_suggested_employee();
|
||||
},
|
||||
|
||||
fetch_suggested_employee: function () {
|
||||
var self = this;
|
||||
var employee = self.hr_employee.call('get_suggested_thread', {'removed_suggested_threads': removed_suggested_employee}).then(function (res) {
|
||||
_(res).each(function (result) {
|
||||
result['image']=self.session.url('/web/binary/image', {model: 'hr.employee', field: 'image_small', id: result.id});
|
||||
});
|
||||
self.employees = res;
|
||||
});
|
||||
return $.when(employee).done(this.proxy('display_suggested_employees'));
|
||||
},
|
||||
|
||||
display_suggested_employees: function () {
|
||||
var suggested_employees = this.$('.oe_sidebar_suggestion.oe_suggestion_employee');
|
||||
if (suggested_employees) {
|
||||
suggested_employees.remove();
|
||||
}
|
||||
if (this.employees.length === 0) {
|
||||
return this.$el.empty();
|
||||
}
|
||||
return this.$el.empty().html(QWeb.render('hr.suggestions.employees', {'widget': this}));
|
||||
},
|
||||
|
||||
follow_employee: function (event) {
|
||||
var self = this;
|
||||
var employee_id = parseInt($(event.currentTarget).attr('id'), 10);
|
||||
return this.hr_employee.call('message_subscribe_users', [[employee_id], [this.session.uid], undefined]).then(function(res) {
|
||||
self.fetch_suggested_employee();
|
||||
});
|
||||
},
|
||||
|
||||
remove_employee_suggestion: function (event) {
|
||||
removed_suggested_employee.push($(event.currentTarget).attr('id'));
|
||||
return this.fetch_suggested_employee();
|
||||
},
|
||||
|
||||
stop_employee_suggestion: function (event) {
|
||||
var self = this;
|
||||
return this.res_users.call('stop_showing_employees_suggestions', [this.session.uid]).then(function(res) {
|
||||
self.$(".oe_sidebar_suggestion.oe_suggestion_employee").hide();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
session.mail.WallSidebar.include({
|
||||
start: function () {
|
||||
this._super.apply(this, arguments);
|
||||
var sug_employees = new suggestions.Employees(this);
|
||||
return sug_employees.appendTo(this.$('.oe_suggestions_employees'));
|
||||
},
|
||||
});
|
||||
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<template>
|
||||
|
||||
<!-- Employees placeholder in sidebar -->
|
||||
<t t-extend="mail.wall.sidebar">
|
||||
<t t-jquery=".oe_mail_wall_sidebar" t-operation="append">
|
||||
<div class="oe_suggestions_employees"></div>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<!-- Suggested employees -->
|
||||
<div t-name="hr.suggestions.employees" class="oe_sidebar_suggestion oe_suggestion_employee">
|
||||
<div class="oe_suggest_title">
|
||||
<a class="oe_suggestion_remove oe_suggestion_employee oe_e">X</a>
|
||||
<h2>Suggested Employees</h2>
|
||||
</div>
|
||||
<div class="oe_suggest_items">
|
||||
<t t-foreach="widget.employees" t-as="result">
|
||||
<div class="oe_suggested_item">
|
||||
<div class="oe_suggested_item_image">
|
||||
<a t-attf-href="#model=hr.employee&id=#{result.id}">
|
||||
<img t-attf-src="{result.image}" t-attf-alt="{result.name}"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="oe_suggested_item_content">
|
||||
<a class="oe_suggestion_item_name" t-attf-href="#model=hr.employee&id=#{result.id}"><t t-esc="result.name"/></a>
|
||||
<a class="oe_suggestion_remove_item oe_suggestion_employee oe_e" t-attf-id="{result.id}">X</a>
|
||||
<br/>
|
||||
<button class="oe_suggestion_follow" t-att-id="result.id">Follow</button>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
@@ -0,0 +1,466 @@
|
||||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-20 01:48+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-21 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16677)\n"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.model,name:hr_attendance.model_hr_attendance_month
|
||||
msgid "Print Monthly Attendance Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "Hr Attendance Search"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.employee,last_sign:0
|
||||
msgid "Last Sign"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
#: field:hr.employee,state:0
|
||||
#: model:ir.model,name:hr_attendance.model_hr_attendance
|
||||
msgid "Attendance"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#. openerp-web
|
||||
#: code:addons/hr_attendance/static/src/js/attendance.js:34
|
||||
#, python-format
|
||||
msgid "Last sign in: %s,<br />%s.<br />Click to sign out."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: constraint:hr.attendance:0
|
||||
msgid "Error ! Sign in (resp. Sign out) must follow Sign out (resp. Sign in)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: help:hr.action.reason,name:0
|
||||
msgid "Specifies the reason for Signing In/Signing Out."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid ""
|
||||
"(*) A positive delay means that the employee worked less than recorded."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.month:0
|
||||
msgid "Print Attendance Report Monthly"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/report/timesheet.py:120
|
||||
#, python-format
|
||||
msgid "Attendances by Week"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.action.reason,action_type:0
|
||||
msgid "Sign out"
|
||||
msgstr "ลงชื่อออก"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Delay"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "Group By..."
|
||||
msgstr "จัดกลุ่มตาม..."
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "October"
|
||||
msgstr "ตุลาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.employee,attendance_access:0
|
||||
msgid "Attendance Access"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/hr_attendance.py:154
|
||||
#: selection:hr.attendance,action:0
|
||||
#: view:hr.employee:0
|
||||
#, python-format
|
||||
msgid "Sign Out"
|
||||
msgstr "ออกจากระบบ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/wizard/hr_attendance_error.py:49
|
||||
#, python-format
|
||||
msgid "No records are found for your selection!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
#: view:hr.attendance.month:0
|
||||
#: view:hr.attendance.week:0
|
||||
msgid "Print"
|
||||
msgstr "พิมพ์"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
#: field:hr.attendance,employee_id:0
|
||||
#: model:ir.model,name:hr_attendance.model_hr_employee
|
||||
msgid "Employee"
|
||||
msgstr "พนักงาน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.month,month:0
|
||||
msgid "Month"
|
||||
msgstr "เดือน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Date Recorded"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/hr_attendance.py:154
|
||||
#: selection:hr.attendance,action:0
|
||||
#: view:hr.employee:0
|
||||
#, python-format
|
||||
msgid "Sign In"
|
||||
msgstr "เข้าสู่ระบบ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.error,init_date:0
|
||||
#: field:hr.attendance.week,init_date:0
|
||||
msgid "Starting Date"
|
||||
msgstr "วันที่เริ่ม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_hr_attendance
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance
|
||||
msgid "Attendances"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "March"
|
||||
msgstr "มีนาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "August"
|
||||
msgstr "สิงหาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/hr_attendance.py:161
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr "คำเตือน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: help:hr.config.settings,group_hr_attendance:0
|
||||
msgid "Allocates attendance group to all users."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "My Attendance"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "June"
|
||||
msgstr "มิถุนายน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/report/attendance_by_month.py:190
|
||||
#, python-format
|
||||
msgid "Attendances by Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_week
|
||||
msgid "Attendances By Week"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.model,name:hr_attendance.model_hr_attendance_error
|
||||
msgid "Print Error Attendance Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Total period:"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.action.reason,name:0
|
||||
msgid "Reason"
|
||||
msgstr "เหตุผล"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
msgid "Print Attendance Report Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,help:hr_attendance.open_view_attendance
|
||||
msgid ""
|
||||
"The Time Tracking functionality aims to manage employee attendances from "
|
||||
"Sign in/Sign out actions. You can also link this feature to an attendance "
|
||||
"device using OpenERP's web service features."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "Today"
|
||||
msgstr "วันนี้"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Date Signed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,name:0
|
||||
msgid "Date"
|
||||
msgstr "วันที่"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.config.settings,group_hr_attendance:0
|
||||
msgid "Track attendances for all employees"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "July"
|
||||
msgstr "กรกฎาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_error
|
||||
#: model:ir.actions.report.xml,name:hr_attendance.attendance_error_report
|
||||
msgid "Attendance Error Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
#: field:hr.attendance,day:0
|
||||
msgid "Day"
|
||||
msgstr "วัน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.employee,state:0
|
||||
msgid "Present"
|
||||
msgstr "นำเสนอ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.employee,state:0
|
||||
msgid "Absent"
|
||||
msgstr "ขาด"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "February"
|
||||
msgstr "กุมภาพันธ์"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,action_desc:0
|
||||
#: model:ir.model,name:hr_attendance.model_hr_action_reason
|
||||
msgid "Action Reason"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.month,year:0
|
||||
msgid "Year"
|
||||
msgstr "ปี"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Min Delay"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "Employee attendances"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.action.reason:0
|
||||
msgid "Define attendance reason"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.action.reason,action_type:0
|
||||
msgid "Sign in"
|
||||
msgstr "ลงชื่อเข้าใช้"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
msgid "Analysis Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_month
|
||||
msgid "Attendances By Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "January"
|
||||
msgstr "มกราคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/wizard/hr_attendance_error.py:49
|
||||
#, python-format
|
||||
msgid "No Data Available !"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "April"
|
||||
msgstr "เมษายน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.week:0
|
||||
msgid "Print Attendance Report Weekly"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Attendance Errors"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,action:0
|
||||
#: selection:hr.attendance,action:0
|
||||
msgid "Action"
|
||||
msgstr "ปฏิบัติ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_hr_time_tracking
|
||||
msgid "Time Tracking"
|
||||
msgstr "ติดตามเวลา"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance_reason
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance_reason
|
||||
msgid "Attendance Reasons"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "November"
|
||||
msgstr "พฤศจิกายน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
msgid "Bellow this delay, the error is considered to be voluntary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.error,max_delay:0
|
||||
msgid "Max. Delay (Min)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.error,end_date:0
|
||||
#: field:hr.attendance.week,end_date:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "September"
|
||||
msgstr "กันยายน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.action.reason:0
|
||||
msgid "Attendance reasons"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.model,name:hr_attendance.model_hr_attendance_week
|
||||
msgid "Print Week Attendance Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.model,name:hr_attendance.model_hr_config_settings
|
||||
msgid "hr.config.settings"
|
||||
msgstr "hr.config.settings"
|
||||
|
||||
#. module: hr_attendance
|
||||
#. openerp-web
|
||||
#: code:addons/hr_attendance/static/src/js/attendance.js:36
|
||||
#, python-format
|
||||
msgid "Click to Sign In at %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.action.reason,action_type:0
|
||||
msgid "Action Type"
|
||||
msgstr "ชนิดการทำงาน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "May"
|
||||
msgstr "พฤษภาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/hr_attendance.py:161
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You tried to %s with a date anterior to another event !\n"
|
||||
"Try to contact the HR Manager to correct attendances."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "December"
|
||||
msgstr "ธันวาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
#: view:hr.attendance.month:0
|
||||
#: view:hr.attendance.week:0
|
||||
msgid "Cancel"
|
||||
msgstr "ยกเลิก"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Operation"
|
||||
msgstr "ปฏิบัติการ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid ""
|
||||
"(*) A negative delay means that the employee worked more than encoded."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
#: view:hr.attendance.month:0
|
||||
#: view:hr.attendance.week:0
|
||||
msgid "or"
|
||||
msgstr "หรือ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: help:hr.attendance,action_desc:0
|
||||
msgid ""
|
||||
"Specifies the reason for Signing In/Signing Out in case of extra hours."
|
||||
msgstr ""
|
||||
@@ -46,7 +46,7 @@ class hr_attendance_error(osv.osv_memory):
|
||||
cr.execute("SELECT id FROM hr_attendance WHERE employee_id IN %s AND to_char(name,'YYYY-mm-dd')<=%s AND to_char(name,'YYYY-mm-dd')>=%s AND action IN %s ORDER BY name" ,(tuple(context['active_ids']), date_to, date_from, tuple(['sign_in','sign_out'])))
|
||||
attendance_ids = [x[0] for x in cr.fetchall()]
|
||||
if not attendance_ids:
|
||||
raise osv.except_osv(_('No Data Available !'), _('No records are found for your selection!'))
|
||||
raise osv.except_osv(_('No Data Available!'), _('No records are found for your selection!'))
|
||||
attendance_records = self.pool.get('hr.attendance').browse(cr, uid, attendance_ids, context=context)
|
||||
|
||||
for rec in attendance_records:
|
||||
|
||||
@@ -0,0 +1,232 @@
|
||||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-15 17:09+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-16 04:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16667)\n"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,wage:0
|
||||
msgid "Wage"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Information"
|
||||
msgstr "ข้อมูล"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,trial_date_start:0
|
||||
msgid "Trial Start Date"
|
||||
msgstr "วันที่เริ่มต้นการทดลอง"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,vehicle:0
|
||||
msgid "Company Vehicle"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Group By..."
|
||||
msgstr "จัดกลุ่มตาม..."
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,department_id:0
|
||||
msgid "Department"
|
||||
msgstr "แผนก"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,employee_id:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_employee
|
||||
msgid "Employee"
|
||||
msgstr "พนักงาน"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Search Contract"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: view:hr.employee:0
|
||||
#: field:hr.employee,contract_ids:0
|
||||
#: model:ir.actions.act_window,name:hr_contract.act_hr_employee_2_hr_contract
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract
|
||||
msgid "Contracts"
|
||||
msgstr "สัญญา"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,children:0
|
||||
msgid "Number of Children"
|
||||
msgstr "จำนวนบุตร"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.employee,contract_id:0
|
||||
msgid "Latest contract of the employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Job"
|
||||
msgstr "งาน"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,advantages:0
|
||||
msgid "Advantages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Work Permit"
|
||||
msgstr "ใบอนุญาตทำงาน"
|
||||
|
||||
#. module: hr_contract
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_type
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_type
|
||||
msgid "Contract Types"
|
||||
msgstr "ประเภทสัญญา"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.employee:0
|
||||
msgid "Medical Exam"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,date_end:0
|
||||
msgid "End Date"
|
||||
msgstr "วันสิ้นสุด"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.contract,wage:0
|
||||
msgid "Basic Salary of the employee"
|
||||
msgstr "เงินเดือนของพนักงาน"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,name:0
|
||||
msgid "Contract Reference"
|
||||
msgstr "อ้างอิงตามสัญญา"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.employee,vehicle_distance:0
|
||||
msgid "In kilometers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,notes:0
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,permit_no:0
|
||||
msgid "Work Permit No"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: view:hr.employee:0
|
||||
#: field:hr.employee,contract_id:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract
|
||||
#: model:ir.ui.menu,name:hr_contract.next_id_56
|
||||
msgid "Contract"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,type_id:0
|
||||
#: view:hr.contract.type:0
|
||||
#: field:hr.contract.type,name:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract_type
|
||||
msgid "Contract Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,working_hours:0
|
||||
msgid "Working Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Salary and Advantages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,job_id:0
|
||||
msgid "Job Title"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: constraint:hr.contract:0
|
||||
msgid "Error! Contract start-date must be less than contract end-date."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,manager:0
|
||||
msgid "Is a Manager"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,date_start:0
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,visa_no:0
|
||||
msgid "Visa No"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,vehicle_distance:0
|
||||
msgid "Home-Work Dist."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,place_of_birth:0
|
||||
msgid "Place of Birth"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Trial Period Duration"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Duration"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,visa_expire:0
|
||||
msgid "Visa Expire Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,medic_exam:0
|
||||
msgid "Medical Examination Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,trial_date_end:0
|
||||
msgid "Trial End Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract.type:0
|
||||
msgid "Search Contract Type"
|
||||
msgstr ""
|
||||
@@ -165,9 +165,14 @@
|
||||
</header>
|
||||
<sheet>
|
||||
<label for="employee_id" class="oe_edit_only"/>
|
||||
<h1><field name="employee_id" on_change="onchange_employee_id(employee_id)" class="oe_inline"/>, <field name="date" class="oe_inline"/></h1>
|
||||
<h1><field name="employee_id" class="oe_inline"
|
||||
attrs="{'readonly': [('state', '=', 'done')]}"
|
||||
on_change="onchange_employee_id(employee_id)"/>,
|
||||
<field name="date"
|
||||
attrs="{'readonly': [('state', '=', 'done')]}"/>
|
||||
</h1>
|
||||
<label for="plan_id" class="oe_edit_only"/>
|
||||
<h2><field name="plan_id"/></h2>
|
||||
<h2><field name="plan_id" attrs="{'readonly': [('state', '=', 'done')]}"/></h2>
|
||||
<group>
|
||||
<group colspan="4" attrs="{'invisible':['|', ('state','=','draft'), ('state', '=', 'wait')]}">
|
||||
<field name="rating" attrs="{'readonly':[('state','<>','progress')]}"/>
|
||||
@@ -175,7 +180,7 @@
|
||||
</group>
|
||||
</group>
|
||||
<group string="Appraisal Forms" attrs="{'invisible':[('state','=','draft')]}">
|
||||
<field nolabel="1" name="survey_request_ids">
|
||||
<field nolabel="1" name="survey_request_ids" attrs="{'readonly': [('state', '=', 'done')]}">
|
||||
<form string="Interview Appraisal" version="7.0">
|
||||
<div class="oe_right oe_button_box">
|
||||
<button name="%(survey.action_view_survey_question_message)d" string="Answer Survey" type="action" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response,'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
|
||||
|
||||
@@ -57,10 +57,7 @@ class hr_expense_expense(osv.osv):
|
||||
|
||||
def _get_currency(self, cr, uid, context=None):
|
||||
user = self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0]
|
||||
if user.company_id:
|
||||
return user.company_id.currency_id.id
|
||||
else:
|
||||
return self.pool.get('res.currency').search(cr, uid, [('rate','=',1.0)], context=context)[0]
|
||||
return user.company_id.currency_id.id
|
||||
|
||||
_name = "hr.expense.expense"
|
||||
_inherit = ['mail.thread']
|
||||
@@ -99,11 +96,13 @@ class hr_expense_expense(osv.osv):
|
||||
('cancelled', 'Refused'),
|
||||
('confirm', 'Waiting Approval'),
|
||||
('accepted', 'Approved'),
|
||||
('done', 'Done'),
|
||||
('done', 'Waiting Payment'),
|
||||
('paid', 'Paid'),
|
||||
],
|
||||
'Status', readonly=True, track_visibility='onchange',
|
||||
help='When the expense request is created the status is \'Draft\'.\n It is confirmed by the user and request is sent to admin, the status is \'Waiting Confirmation\'.\
|
||||
\nIf the admin accepts it, the status is \'Accepted\'.\n If a receipt is made for the expense request, the status is \'Done\'.'),
|
||||
\nIf the admin accepts it, the status is \'Accepted\'.\n If the accounting entries are made for the expense request, the status is \'Waiting Payment\'.'),
|
||||
|
||||
}
|
||||
_defaults = {
|
||||
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.employee', context=c),
|
||||
@@ -114,6 +113,12 @@ class hr_expense_expense(osv.osv):
|
||||
'currency_id': _get_currency,
|
||||
}
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
default.update(account_move_id=False)
|
||||
return super(hr_expense_expense, self).copy(cr, uid, id, default=default, context=context)
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
for rec in self.browse(cr, uid, ids, context=context):
|
||||
if rec.state != 'draft':
|
||||
@@ -282,7 +287,6 @@ class hr_expense_expense(osv.osv):
|
||||
tax_code_found= False
|
||||
|
||||
#Calculate tax according to default tax on product
|
||||
|
||||
taxes = []
|
||||
#Taken from product_id_onchange in account.invoice
|
||||
if line.product_id:
|
||||
@@ -319,8 +323,11 @@ class hr_expense_expense(osv.osv):
|
||||
tax_code_found = True
|
||||
res[-1]['tax_code_id'] = tax_code_id
|
||||
res[-1]['tax_amount'] = cur_obj.compute(cr, uid, exp.currency_id.id, company_currency, tax_amount, context={'date': exp.date_confirm})
|
||||
|
||||
#Will create the tax here as we don't have the access
|
||||
##
|
||||
is_price_include = tax_obj.read(cr,uid,tax['id'],['price_include'],context)['price_include']
|
||||
if is_price_include:
|
||||
## We need to deduce the price for the tax
|
||||
res[-1]['price'] = res[-1]['price'] - (tax['amount'] * tax['base_sign'] or 0.0)
|
||||
assoc_tax = {
|
||||
'type':'tax',
|
||||
'name':tax['name'],
|
||||
@@ -449,4 +456,26 @@ class hr_expense_line(osv.osv):
|
||||
return res
|
||||
|
||||
|
||||
class account_move_line(osv.osv):
|
||||
_inherit = "account.move.line"
|
||||
|
||||
def reconcile(self, cr, uid, ids, type='auto', writeoff_acc_id=False, writeoff_period_id=False, writeoff_journal_id=False, context=None):
|
||||
res = super(account_move_line, self).reconcile(cr, uid, ids, type=type, writeoff_acc_id=writeoff_acc_id, writeoff_period_id=writeoff_period_id, writeoff_journal_id=writeoff_journal_id, context=context)
|
||||
#when making a full reconciliation of account move lines 'ids', we may need to recompute the state of some hr.expense
|
||||
account_move_ids = [aml.move_id.id for aml in self.browse(cr, uid, ids, context=context)]
|
||||
expense_obj = self.pool.get('hr.expense.expense')
|
||||
currency_obj = self.pool.get('res.currency')
|
||||
if account_move_ids:
|
||||
expense_ids = expense_obj.search(cr, uid, [('account_move_id', 'in', account_move_ids)], context=context)
|
||||
for expense in expense_obj.browse(cr, uid, expense_ids, context=context):
|
||||
if expense.state == 'done':
|
||||
#making the postulate it has to be set paid, then trying to invalidate it
|
||||
new_status_is_paid = True
|
||||
for aml in expense.account_move_id.line_id:
|
||||
if aml.account_id.type == 'payable' and not currency_obj.is_zero(cr, uid, expense.company_id.currency_id, aml.amount_residual):
|
||||
new_status_is_paid = False
|
||||
if new_status_is_paid:
|
||||
expense_obj.write(cr, uid, [expense.id], {'state': 'paid'}, context=context)
|
||||
return res
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<button name="draft" states="confirm,cancelled" string="Set to Draft" type="workflow" groups="base.group_hr_user" />
|
||||
<button name="done" states="accepted" string="Generate Accounting Entries" type="workflow" groups="account.group_account_invoice" class="oe_highlight"/>
|
||||
<button name="action_view_move" states="done" string="Open Accounting Entries" type="object" groups="account.group_account_invoice"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,accepted,done" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,accepted,done,paid" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group>
|
||||
@@ -210,6 +210,11 @@
|
||||
<field name="context">{"default_hr_expense_ok":1}</field>
|
||||
<field name="domain">[('hr_expense_ok','=',True)]</field>
|
||||
<field name="search_view_id" ref="product.product_search_form_view"/>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new expense category.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_hr_product" name="Expense Categories" parent="hr.menu_hr_configuration" action="hr_expense_product"/>
|
||||
|
||||
@@ -0,0 +1,939 @@
|
||||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-06-20 10:09+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-21 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16677)\n"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:process.node,name:hr_expense.process_node_confirmedexpenses0
|
||||
msgid "Confirmed Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.model,name:hr_expense.model_hr_expense_line
|
||||
msgid "Expense Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_reimbursement0
|
||||
msgid "The accoutant reimburse the expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:mail.message.subtype,description:hr_expense.mt_expense_approved
|
||||
msgid "Expense approved"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,date_confirm:0
|
||||
#: field:hr.expense.report,date_confirm:0
|
||||
msgid "Confirmation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Group By..."
|
||||
msgstr "จัดกลุ่มตาม..."
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:product.template,name:hr_expense.air_ticket_product_template
|
||||
msgid "Air Ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Validated By"
|
||||
msgstr "ตรวจสอบโดย"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,department_id:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,department_id:0
|
||||
msgid "Department"
|
||||
msgstr "แผนก"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "New Expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,uom_id:0
|
||||
#: view:product.product:0
|
||||
msgid "Unit of Measure"
|
||||
msgstr "หน่วยของการวัด"
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "March"
|
||||
msgstr "มีนาคม"
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_unread:0
|
||||
msgid "Unread Messages"
|
||||
msgstr "ข้อความที่ไม่ได้อ่าน"
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,company_id:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "บริษัท"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Set to Draft"
|
||||
msgstr "กำหนดให้เป็นแบบร่าง"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "To Pay"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:172
|
||||
#, python-format
|
||||
msgid ""
|
||||
"No expense journal found. Please make sure you have a journal with type "
|
||||
"'purchase' configured."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.model,name:hr_expense.model_hr_expense_report
|
||||
msgid "Expenses Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Open Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,day:0
|
||||
msgid "Day"
|
||||
msgstr "วัน"
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,date_valid:0
|
||||
msgid ""
|
||||
"Date of the acceptation of the sheet expense. It's filled when the button "
|
||||
"Accept is pressed."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Notes"
|
||||
msgstr "บันทึกย่อ"
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr "ข้อความ"
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:172
|
||||
#: code:addons/hr_expense/hr_expense.py:238
|
||||
#: code:addons/hr_expense/hr_expense.py:240
|
||||
#: code:addons/hr_expense/hr_expense.py:349
|
||||
#: code:addons/hr_expense/hr_expense.py:353
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:mail.message.subtype,description:hr_expense.mt_expense_refused
|
||||
msgid "Expense refused"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.act_window,name:hr_expense.hr_expense_product
|
||||
#: view:product.product:0
|
||||
msgid "Products"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Confirm Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "ยกเลิกแล้ว"
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_refused0
|
||||
msgid "The direct manager refuses the sheet.Reset as draft."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,message_unread:0
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Waiting confirmation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Accepted"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,ref:0
|
||||
msgid "Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Certified honest and conform,"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,state:0
|
||||
msgid ""
|
||||
"When the expense request is created the status is 'Draft'.\n"
|
||||
" It is confirmed by the user and request is sent to admin, the status is "
|
||||
"'Waiting Confirmation'. \n"
|
||||
"If the admin accepts it, the status is 'Accepted'.\n"
|
||||
" If a receipt is made for the expense request, the status is 'Done'."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,date_confirm:0
|
||||
msgid ""
|
||||
"Date of the confirmation of the sheet expense. It's filled when the button "
|
||||
"Confirm is pressed."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,nbr:0
|
||||
msgid "# of Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,message_summary:0
|
||||
msgid ""
|
||||
"Holds the Chatter summary (number of messages, ...). This summary is "
|
||||
"directly in html format in order to be inserted in kanban views."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:453
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "(Date and signature)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Total:"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_refuseexpense0
|
||||
msgid "Refuse expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,price_average:0
|
||||
msgid "Average Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:process.transition.action,name:hr_expense.process_transition_action_confirm0
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_supplierinvoice0
|
||||
msgid "The accoutant validates the sheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,delay_valid:0
|
||||
msgid "Delay to Valid"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.line,sequence:0
|
||||
msgid "Gives the sequence order when displaying a list of expense lines."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,state:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,analytic_account:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,analytic_account:0
|
||||
msgid "Analytic account"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,date:0
|
||||
msgid "Date "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Waiting"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_follower_ids:0
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,employee_id:0
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: selection:hr.expense.expense,state:0
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: field:hr.expense.report,product_qty:0
|
||||
msgid "Qty"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,price_total:0
|
||||
msgid "Total Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_reinvoicing0
|
||||
msgid "Some costs may be reinvoices to the customer"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:238
|
||||
#, python-format
|
||||
msgid "The employee must have a home address."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:board.board:0
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:ir.actions.act_window,name:hr_expense.action_my_expense
|
||||
msgid "My Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Creation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.report.xml,name:hr_expense.hr_expenses
|
||||
msgid "HR expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,id:0
|
||||
msgid "Sheet ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_reimburseexpense0
|
||||
msgid "Reimburse expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,journal_id:0
|
||||
#: field:hr.expense.report,journal_id:0
|
||||
msgid "Force Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,no_of_products:0
|
||||
msgid "# of Products"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_reimburseexpense0
|
||||
msgid "After creating invoice, reimburse expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:121
|
||||
#, python-format
|
||||
msgid "Warning!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,name:hr_expense.process_node_reimbursement0
|
||||
msgid "Reimbursement"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,date_valid:0
|
||||
#: field:hr.expense.report,date_valid:0
|
||||
msgid "Validation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:226
|
||||
#, python-format
|
||||
msgid "Expense Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: model:ir.actions.act_window,name:hr_expense.action_hr_expense_report_all
|
||||
#: model:ir.ui.menu,name:hr_expense.menu_hr_expense_report_all
|
||||
msgid "Expenses Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.line,expense_id:0
|
||||
#: model:ir.model,name:hr_expense.model_hr_expense_expense
|
||||
#: model:process.process,name:hr_expense.process_process_expenseprocess0
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,line_ids:0
|
||||
#: view:hr.expense.line:0
|
||||
msgid "Expense Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,delay_confirm:0
|
||||
msgid "Delay to Confirm"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,month:0
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,currency_id:0
|
||||
#: field:hr.expense.report,currency_id:0
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,voucher_id:0
|
||||
msgid "Employee's Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.expense,state:0
|
||||
msgid "Waiting Approval"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_draftexpenses0
|
||||
msgid "Employee encode all his expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:453
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Selected Unit of Measure does not belong to the same category as the product "
|
||||
"Unit of Measure"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,journal_id:0
|
||||
msgid "The journal used when the expense is done."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,note:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_reimbursereinvoice0
|
||||
msgid "Create Customer invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:353
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please configure Default Expense account for Product purchase: "
|
||||
"`property_account_expense_categ`."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_approveexpense0
|
||||
msgid "Expense is approved."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_approved0
|
||||
msgid "The direct manager approves the sheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,amount:0
|
||||
msgid "Total Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,name:hr_expense.process_node_draftexpenses0
|
||||
msgid "Draft Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_is_follower:0
|
||||
msgid "Is a Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.act_window,name:hr_expense.product_normal_form_view_installer
|
||||
msgid "Review Your Expenses Products"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: field:hr.expense.expense,date:0
|
||||
#: field:hr.expense.line,date_value:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,user_id:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.ui.menu,name:hr_expense.menu_hr_product
|
||||
msgid "Expense Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.act_window,help:hr_expense.expense_all
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to register new expenses. \n"
|
||||
" </p><p>\n"
|
||||
" OpenERP will ensure the whole process is followed; the "
|
||||
"expense\n"
|
||||
" sheet is validated by manager(s), the employee is "
|
||||
"reimbursed\n"
|
||||
" from his expenses, some expenses must be re-invoiced to the\n"
|
||||
" customers.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Generate Accounting Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "HR Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:product.template,name:hr_expense.car_travel_product_template
|
||||
msgid "Car Travel Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Submit to Manager"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Done Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_confirmedexpenses0
|
||||
msgid "The employee validates his expense sheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Expenses to Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,name:hr_expense.process_node_supplierinvoice0
|
||||
#: model:process.transition,name:hr_expense.process_transition_approveinvoice0
|
||||
msgid "Supplier Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Expenses Sheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,voucher_id:0
|
||||
msgid "Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Approved Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: field:hr.expense.line,unit_amount:0
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition.action,name:hr_expense.process_transition_action_supplierinvoice0
|
||||
msgid "Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,year:0
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_reimbursereinvoice0
|
||||
msgid "Reinvoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Expense Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,user_valid:0
|
||||
msgid "Validation By"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:process.transition.action,name:hr_expense.process_transition_action_refuse0
|
||||
msgid "Refuse"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_confirmexpense0
|
||||
msgid "Confirm expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_approveexpense0
|
||||
msgid "Approve expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition.action,name:hr_expense.process_transition_action_accept0
|
||||
msgid "Accept"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "This document must be dated and signed for reimbursement"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_refuseexpense0
|
||||
msgid "Expense is refused."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.act_window,help:hr_expense.product_normal_form_view_installer
|
||||
msgid ""
|
||||
"Define one product for each expense type allowed for an employee (travel by "
|
||||
"car, hostel, restaurant, etc). If you reimburse the employees at a fixed "
|
||||
"rate, set a cost and a unit of measure on the product. If you reimburse "
|
||||
"based on real costs, set the cost at 0.00. The user will set the real price "
|
||||
"when recording his expense sheet."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.expense,state:0
|
||||
#: view:hr.expense.report:0
|
||||
#: model:mail.message.subtype,name:hr_expense.mt_expense_approved
|
||||
#: model:process.node,name:hr_expense.process_node_approved0
|
||||
msgid "Approved"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,product_id:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,product_id:0
|
||||
#: model:ir.model,name:hr_expense.model_product_product
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,name:0
|
||||
#: field:hr.expense.line,description:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,unit_quantity:0
|
||||
msgid "Quantities"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,no_of_account:0
|
||||
msgid "# of Accounts"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.expense,state:0
|
||||
#: model:mail.message.subtype,name:hr_expense.mt_expense_refused
|
||||
#: model:process.node,name:hr_expense.process_node_refused0
|
||||
msgid "Refused"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:product.product,hr_expense_ok:0
|
||||
msgid "Can be Expensed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:mail.message.subtype,description:hr_expense.mt_expense_confirmed
|
||||
msgid "Expense confirmed, waiting confirmation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Ref."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,employee_id:0
|
||||
msgid "Employee's Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,user_id:0
|
||||
msgid "Validation User"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Accounting Data"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:121
|
||||
#, python-format
|
||||
msgid "You can only delete draft expenses!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,account_move_id:0
|
||||
msgid "Ledger Posting"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_approveinvoice0
|
||||
msgid "Creates supplier invoice."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:product.template,name:hr_expense.hotel_rent_product_template
|
||||
msgid "Hotel Accommodation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,name:0
|
||||
msgid "Expense Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Approve"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,message_ids:0
|
||||
msgid "Messages and communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_confirmexpense0
|
||||
msgid "Expense is confirmed."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:ir.actions.act_window,name:hr_expense.expense_all
|
||||
#: model:ir.ui.menu,name:hr_expense.menu_expense_all
|
||||
#: model:ir.ui.menu,name:hr_expense.next_id_49
|
||||
#: model:product.category,name:hr_expense.cat_expense
|
||||
msgid "Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:product.product,hr_expense_ok:0
|
||||
msgid "Specify if the product can be selected in an HR expense line."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Accounting"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:mail.message.subtype,name:hr_expense.mt_expense_confirmed
|
||||
msgid "To Approve"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: view:hr.expense.line:0
|
||||
#: field:hr.expense.line,total_amount:0
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,name:hr_expense.process_node_reinvoicing0
|
||||
msgid "Reinvoicing"
|
||||
msgstr ""
|
||||
@@ -40,8 +40,8 @@
|
||||
<field name="name">Leave Request</field>
|
||||
<field name="model">hr.holidays</field>
|
||||
<field name="arch" type="xml">
|
||||
<calendar string="Leave Request" color="user_id" date_start="date_from" date_stop="date_to">
|
||||
<field name="user_id"/>
|
||||
<calendar string="Leave Request" color="employee_id" date_start="date_from" date_stop="date_to">
|
||||
<field name="employee_id"/>
|
||||
<field name="holiday_status_id"/>
|
||||
</calendar>
|
||||
</field>
|
||||
@@ -146,6 +146,7 @@
|
||||
<field name="number_of_days" string="Allocated Days" sum="Remaining Days"/>
|
||||
<field name="manager_id" invisible="1"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="date_from" invisible="1"/>
|
||||
<!--field name="type"/-->
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
|
||||
@@ -49,7 +49,7 @@ class hr_payslip_employees(osv.osv_memory):
|
||||
to_date = run_data.get('date_end', False)
|
||||
credit_note = run_data.get('credit_note', False)
|
||||
if not data['employee_ids']:
|
||||
raise osv.except_osv(_("Warning !"), _("You must select employee(s) to generate payslip(s)."))
|
||||
raise osv.except_osv(_("Warning!"), _("You must select employee(s) to generate payslip(s)."))
|
||||
for emp in emp_pool.browse(cr, uid, data['employee_ids'], context=context):
|
||||
slip_data = slip_pool.onchange_employee_id(cr, uid, [], from_date, to_date, emp.id, contract_id=False, context=context)
|
||||
res = {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,669 @@
|
||||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-06-17 06:13+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.act_window,help:hr_timesheet.act_analytic_cost_revenue
|
||||
msgid ""
|
||||
"<p>\n"
|
||||
" No activity yet on this contract.\n"
|
||||
" </p><p>\n"
|
||||
" In OpenERP, contracts and projects are implemented using\n"
|
||||
" analytic account. So, you can track costs and revenues to "
|
||||
"analyse\n"
|
||||
" your margins easily.\n"
|
||||
" </p><p>\n"
|
||||
" Costs will be created automatically when you register "
|
||||
"supplier\n"
|
||||
" invoices, expenses or timesheets.\n"
|
||||
" </p><p>\n"
|
||||
" Revenues will be created automatically when you create "
|
||||
"customer\n"
|
||||
" invoices. Customer invoices can be created based on sale "
|
||||
"orders\n"
|
||||
" (fixed price invoices), on timesheets (based on the work "
|
||||
"done) or\n"
|
||||
" on expenses (e.g. reinvoicing of travel costs).\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:44
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:77
|
||||
#, python-format
|
||||
msgid "Wed"
|
||||
msgstr "พุธ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.out.project:0
|
||||
msgid "(Keep empty for current_time)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Group By..."
|
||||
msgstr "จัดกลุ่มตาม..."
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.act_window,help:hr_timesheet.action_hr_timesheet_sign_in
|
||||
msgid ""
|
||||
"Employees can encode their time spent on the different projects. A project "
|
||||
"is an analytic account and the time spent on a project generate costs on the "
|
||||
"analytic account. This feature allows to record at the same time the "
|
||||
"attendance and the timesheet."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.employee,uom_id:0
|
||||
msgid "Unit of Measure"
|
||||
msgstr "หน่วยของการวัด"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.employee,journal_id:0
|
||||
msgid "Analytic Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.out.project:0
|
||||
msgid "Stop Working"
|
||||
msgstr "หยุดทำงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_employee
|
||||
#: model:ir.ui.menu,name:hr_timesheet.menu_hr_timesheet_employee
|
||||
msgid "Employee Timesheet"
|
||||
msgstr "เวลาทำงาน พนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
#: model:ir.ui.menu,name:hr_timesheet.menu_hr_timesheet_reports
|
||||
msgid "Timesheet"
|
||||
msgstr "เวลาทำงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/wizard/hr_timesheet_print_employee.py:43
|
||||
#, python-format
|
||||
msgid "Please define employee for this user!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:44
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:77
|
||||
#, python-format
|
||||
msgid "Mon"
|
||||
msgstr "จัน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.in.project:0
|
||||
msgid "Sign in"
|
||||
msgstr "ลงชื่อเข้าใช้"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:44
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:77
|
||||
#, python-format
|
||||
msgid "Fri"
|
||||
msgstr "ศุกร์"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
#: model:ir.actions.act_window,name:hr_timesheet.act_hr_timesheet_line_evry1_all_form
|
||||
#: model:ir.ui.menu,name:hr_timesheet.menu_hr_working_hours
|
||||
msgid "Timesheet Activities"
|
||||
msgstr "กิจกรรม เวลาทำงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.out.project,analytic_amount:0
|
||||
msgid "Minimum Analytic Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytical.timesheet.employee:0
|
||||
msgid "Monthly Employee Timesheet"
|
||||
msgstr "รายเดือน เวลาทำงานพนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.out.project:0
|
||||
msgid "Work done in the last period"
|
||||
msgstr "งานที่ทำทั้งหมดในระยะเวลาสุดท้าย"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.in.project,name:0
|
||||
#: field:hr.sign.out.project,name:0
|
||||
msgid "Employees name"
|
||||
msgstr "ชื่อพนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.out.project,account_id:0
|
||||
msgid "Project / Analytic Account"
|
||||
msgstr "โครงการ /วิเคราะห์ บัญชี"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.model,name:hr_timesheet.model_hr_analytical_timesheet_users
|
||||
msgid "Print Employees Timesheet"
|
||||
msgstr "พิมพ์ เวลาทำงาน พนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:132
|
||||
#, python-format
|
||||
msgid "Please define employee for your user."
|
||||
msgstr "กรุณากำหนดพนักงานสำหรับผู้ใช้ของคุณ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.act_window,name:hr_timesheet.act_analytic_cost_revenue
|
||||
msgid "Costs & Revenues"
|
||||
msgstr "ค่าใช้จ่ายและรายได้"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:44
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:77
|
||||
#, python-format
|
||||
msgid "Tue"
|
||||
msgstr "อังคาร"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.model,name:hr_timesheet.model_account_analytic_account
|
||||
msgid "Analytic Account"
|
||||
msgstr "วิเคราะห์บัญชี"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Costs and Revenues"
|
||||
msgstr "ค่าใช้จ่ายและรายได้"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/hr_timesheet.py:150
|
||||
#: code:addons/hr_timesheet/hr_timesheet.py:155
|
||||
#: code:addons/hr_timesheet/hr_timesheet.py:186
|
||||
#: code:addons/hr_timesheet/hr_timesheet.py:188
|
||||
#: code:addons/hr_timesheet/wizard/hr_timesheet_print_employee.py:43
|
||||
#, python-format
|
||||
msgid "Warning!"
|
||||
msgstr "คำเตือน!"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.analytic.timesheet,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr "พาร์ทเนอร์"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:44
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:77
|
||||
#, python-format
|
||||
msgid "Sat"
|
||||
msgstr "เสาร์"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:44
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:77
|
||||
#, python-format
|
||||
msgid "Sun"
|
||||
msgstr "อาทิตย์"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: xsl:hr.analytical.timesheet:0
|
||||
msgid "Sum"
|
||||
msgstr "ผลรวม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Analytic account"
|
||||
msgstr "วิเคราะห์บัญชี"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.act_window,help:hr_timesheet.act_hr_timesheet_line_evry1_all_form
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to record activities.\n"
|
||||
" </p><p>\n"
|
||||
" You can register and track your workings hours by project "
|
||||
"every\n"
|
||||
" day. Every time spent on a project will become a cost in "
|
||||
"the\n"
|
||||
" analytic accounting/contract and can be re-invoiced to\n"
|
||||
" customers if required.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytical.timesheet.employee:0
|
||||
#: view:hr.analytical.timesheet.users:0
|
||||
msgid "Print"
|
||||
msgstr "พิมพ์"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: help:account.analytic.account,use_timesheets:0
|
||||
msgid "Check this field if this project manages timesheets"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytical.timesheet.users:0
|
||||
msgid "Monthly Employees Timesheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "July"
|
||||
msgstr "กรกฎาคม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.in.project,date:0
|
||||
#: field:hr.sign.out.project,date_start:0
|
||||
msgid "Starting Date"
|
||||
msgstr "วันที่เริ่ม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:77
|
||||
#, python-format
|
||||
msgid "Please define cost unit for this employee."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: help:hr.employee,product_id:0
|
||||
msgid "Specifies employee's designation as a product with type 'service'."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/hr_timesheet.py:188
|
||||
#, python-format
|
||||
msgid ""
|
||||
"No analytic account is defined on the project.\n"
|
||||
"Please set one or we cannot automatically fill the timesheet."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Total cost"
|
||||
msgstr "รวมค่าใช้จ่าย"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/hr_timesheet.py:186
|
||||
#, python-format
|
||||
msgid ""
|
||||
"No 'Analytic Journal' is defined for employee %s \n"
|
||||
"Define an employee for the selected user and assign an 'Analytic Journal'!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "September"
|
||||
msgstr "กันยายน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "December"
|
||||
msgstr "ธันวาคม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.analytical.timesheet.users,employee_ids:0
|
||||
msgid "employees"
|
||||
msgstr "พนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.analytical.timesheet.employee,month:0
|
||||
#: field:hr.analytical.timesheet.users,month:0
|
||||
msgid "Month"
|
||||
msgstr "เดือน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.out.project,info:0
|
||||
msgid "Work Description"
|
||||
msgstr "รายละเอียดการทำงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytical.timesheet.employee:0
|
||||
#: view:hr.analytical.timesheet.users:0
|
||||
#: view:hr.sign.in.project:0
|
||||
#: view:hr.sign.out.project:0
|
||||
msgid "or"
|
||||
msgstr "หรือ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: xsl:hr.analytical.timesheet:0
|
||||
msgid "Timesheet by Employee"
|
||||
msgstr "บันทึกเวลา โดยพนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.report.xml,name:hr_timesheet.report_user_timesheet
|
||||
msgid "Employee timesheet"
|
||||
msgstr "บันทึกเวลาของพนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_sign_in
|
||||
#: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_sign_out
|
||||
msgid "Sign in / Sign out by project"
|
||||
msgstr "เข้าสู่ระบบ / ออกจากระบบ โดยโครงการ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.act_window,name:hr_timesheet.action_define_analytic_structure
|
||||
msgid "Define your Analytic Structure"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:146
|
||||
#: view:hr.sign.in.project:0
|
||||
#, python-format
|
||||
msgid "Sign in / Sign out"
|
||||
msgstr "เข้าสู่ระบบ / ออกจากระบบ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.in.project:0
|
||||
msgid "(Keep empty for current time)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:account.analytic.account,use_timesheets:0
|
||||
#: view:hr.employee:0
|
||||
msgid "Timesheets"
|
||||
msgstr "ตารางเวลา"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.actions.act_window,help:hr_timesheet.action_define_analytic_structure
|
||||
msgid ""
|
||||
"You should create an analytic account structure depending on your needs to "
|
||||
"analyse costs and revenues. In OpenERP, analytic accounts are also used to "
|
||||
"track customer contracts."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.analytic.timesheet,line_id:0
|
||||
msgid "Analytic Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "August"
|
||||
msgstr "สิงหาคม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/hr_timesheet.py:155
|
||||
#, python-format
|
||||
msgid ""
|
||||
"No analytic journal defined for '%s'.\n"
|
||||
"You should assign an analytic journal on the employee form."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "June"
|
||||
msgstr "มิถุนายน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.in.project,state:0
|
||||
#: field:hr.sign.out.project,state:0
|
||||
msgid "Current Status"
|
||||
msgstr "สถานะปัจจุบัน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Date"
|
||||
msgstr "วันที่"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "November"
|
||||
msgstr "พฤศจิกายน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.out.project,date:0
|
||||
msgid "Closing Date"
|
||||
msgstr "ปิดวันที่"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "October"
|
||||
msgstr "ตุลาคม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "January"
|
||||
msgstr "มกราคม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:44
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:77
|
||||
#, python-format
|
||||
msgid "Thu"
|
||||
msgstr "พฤหัสบดี"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.in.project:0
|
||||
#: view:hr.sign.out.project:0
|
||||
msgid "Sign In/Out by Project"
|
||||
msgstr "ลงซื่อ เข้า/ออก ตามโครงการ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.model,name:hr_timesheet.model_hr_analytical_timesheet_employee
|
||||
msgid "Print Employee Timesheet & Print My Timesheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.in.project,emp_id:0
|
||||
#: field:hr.sign.out.project,emp_id:0
|
||||
msgid "Employee ID"
|
||||
msgstr "หมายเลข พนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytical.timesheet.users:0
|
||||
msgid "Period"
|
||||
msgstr "คาบ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.out.project:0
|
||||
msgid "General Information"
|
||||
msgstr "ข้อมูลทั่วไป"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytical.timesheet.employee:0
|
||||
#: view:hr.analytical.timesheet.users:0
|
||||
#: view:hr.sign.in.project:0
|
||||
#: view:hr.sign.out.project:0
|
||||
msgid "Cancel"
|
||||
msgstr "ยกเลิก"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: xsl:hr.analytical.timesheet_users:0
|
||||
#: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_users
|
||||
#: model:ir.actions.report.xml,name:hr_timesheet.report_users_timesheet
|
||||
#: model:ir.ui.menu,name:hr_timesheet.menu_hr_timesheet_users
|
||||
msgid "Employees Timesheet"
|
||||
msgstr "เวลาทำงาน พนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Information"
|
||||
msgstr "รายละเอียด"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.analytical.timesheet.employee,employee_id:0
|
||||
#: model:ir.model,name:hr_timesheet.model_hr_employee
|
||||
msgid "Employee"
|
||||
msgstr "พนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.in.project:0
|
||||
msgid ""
|
||||
"Employees can encode their time spent on the different projects they are "
|
||||
"assigned on. A project is an analytic account and the time spent on a "
|
||||
"project generates costs on the analytic account. This feature allows to "
|
||||
"record at the same time the attendance and the timesheet."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.sign.in.project,server_date:0
|
||||
#: field:hr.sign.out.project,server_date:0
|
||||
msgid "Current Date"
|
||||
msgstr "วันที่ปัจจุบัน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.model,name:hr_timesheet.model_hr_analytic_timesheet
|
||||
msgid "Timesheet Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
#: field:hr.employee,product_id:0
|
||||
msgid "Product"
|
||||
msgstr "ผลิตภัณฑ์"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Users"
|
||||
msgstr "ผู้ใช้"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "May"
|
||||
msgstr "พฤษภาคม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Total time"
|
||||
msgstr "เวลารวม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.in.project:0
|
||||
msgid "(local time on the server side)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.model,name:hr_timesheet.model_hr_sign_in_project
|
||||
msgid "Sign In By Project"
|
||||
msgstr "เข้าสู่ระบบตามโครงการ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "February"
|
||||
msgstr "กุมภาพันธ์"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: model:ir.model,name:hr_timesheet.model_hr_sign_out_project
|
||||
msgid "Sign Out By Project"
|
||||
msgstr "ลงชื่อออก ตามโครงการ"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/hr_timesheet.py:150
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please create an employee for this user, using the menu: Human Resources > "
|
||||
"Employees."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytical.timesheet.users:0
|
||||
msgid "Employees"
|
||||
msgstr "พนักงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "March"
|
||||
msgstr "มีนาคม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/report/user_timesheet.py:41
|
||||
#: code:addons/hr_timesheet/report/users_timesheet.py:73
|
||||
#: selection:hr.analytical.timesheet.employee,month:0
|
||||
#: selection:hr.analytical.timesheet.users,month:0
|
||||
#, python-format
|
||||
msgid "April"
|
||||
msgstr "เมษายน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:77
|
||||
#: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:132
|
||||
#, python-format
|
||||
msgid "User Error!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.in.project:0
|
||||
msgid "Start Working"
|
||||
msgstr "เริ่มทำงาน"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: field:hr.analytical.timesheet.employee,year:0
|
||||
#: field:hr.analytical.timesheet.users,year:0
|
||||
msgid "Year"
|
||||
msgstr "ปี"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Duration"
|
||||
msgstr "ระยะเวลา"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.analytic.timesheet:0
|
||||
msgid "Accounting"
|
||||
msgstr "บัญชี"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: xsl:hr.analytical.timesheet:0
|
||||
#: xsl:hr.analytical.timesheet_users:0
|
||||
msgid "Total"
|
||||
msgstr "รวม"
|
||||
|
||||
#. module: hr_timesheet
|
||||
#: view:hr.sign.out.project:0
|
||||
msgid "Change Work"
|
||||
msgstr "เปลี่ยนงาน"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user