[MERGE] : with trunk
bzr revid: aja@tinyerp.com-20140303064742-klvoa7t5l6wnzrg9
This commit is contained in:
commit
e0f8d3f80a
|
@ -123,7 +123,9 @@ for a particular financial year and for preparation of vouchers there is a modul
|
|||
'edi/invoice_action_data.xml',
|
||||
'account_bank_view.xml',
|
||||
'res_config_view.xml',
|
||||
'account_pre_install.yml'
|
||||
'account_pre_install.yml',
|
||||
|
||||
'views/report_vat.xml',
|
||||
],
|
||||
'js': [
|
||||
'static/src/js/account_move_reconciliation.js',
|
||||
|
@ -135,7 +137,8 @@ for a particular financial year and for preparation of vouchers there is a modul
|
|||
],
|
||||
'css':[
|
||||
'static/src/css/account_move_reconciliation.css',
|
||||
'static/src/css/account_move_line_quickadd.css'
|
||||
'static/src/css/account_move_line_quickadd.css',
|
||||
'static/src/css/account_bank_and_cash.css',
|
||||
],
|
||||
'demo': [
|
||||
'demo/account_demo.xml',
|
||||
|
@ -146,6 +149,7 @@ for a particular financial year and for preparation of vouchers there is a modul
|
|||
'account_unit_test.xml',
|
||||
],
|
||||
'test': [
|
||||
'test/account_test_users.yml',
|
||||
'test/account_customer_invoice.yml',
|
||||
'test/account_supplier_invoice.yml',
|
||||
'test/account_change_currency.yml',
|
||||
|
@ -153,12 +157,11 @@ for a particular financial year and for preparation of vouchers there is a modul
|
|||
'test/account_period_close.yml',
|
||||
'test/account_use_model.yml',
|
||||
'test/account_validate_account_move.yml',
|
||||
'test/account_fiscalyear_close.yml',
|
||||
#'test/account_bank_statement.yml',
|
||||
#'test/account_cash_statement.yml',
|
||||
'test/test_edi_invoice.yml',
|
||||
'test/account_report.yml',
|
||||
'test/account_fiscalyear_close_state.yml', #last test, as it will definitively close the demo fiscalyear
|
||||
'test/account_fiscalyear_close.yml', #last test, as it will definitively close the demo fiscalyear
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
|
|
|
@ -28,7 +28,7 @@ import time
|
|||
import openerp
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp import tools
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.osv import fields, osv, expression
|
||||
from openerp.tools.translate import _
|
||||
from openerp.tools.float_utils import float_round
|
||||
|
||||
|
@ -137,16 +137,27 @@ class account_account_type(osv.osv):
|
|||
_name = "account.account.type"
|
||||
_description = "Account Type"
|
||||
|
||||
def _get_current_report_type(self, cr, uid, ids, name, arg, context=None):
|
||||
def _get_financial_report_ref(self, cr, uid, context=None):
|
||||
obj_data = self.pool.get('ir.model.data')
|
||||
obj_financial_report = self.pool.get('account.financial.report')
|
||||
financial_report_ref = {}
|
||||
for key, financial_report in [
|
||||
('asset','account_financial_report_assets0'),
|
||||
('liability','account_financial_report_liability0'),
|
||||
('income','account_financial_report_income0'),
|
||||
('expense','account_financial_report_expense0'),
|
||||
]:
|
||||
try:
|
||||
financial_report_ref[key] = obj_financial_report.browse(cr, uid,
|
||||
obj_data.get_object_reference(cr, uid, 'account', financial_report)[1],
|
||||
context=context)
|
||||
except ValueError:
|
||||
pass
|
||||
return financial_report_ref
|
||||
|
||||
def _get_current_report_type(self, cr, uid, ids, name, arg, context=None):
|
||||
res = {}
|
||||
financial_report_ref = {
|
||||
'asset': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_assets0')[1], context=context),
|
||||
'liability': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_liability0')[1], context=context),
|
||||
'income': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_income0')[1], context=context),
|
||||
'expense': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_expense0')[1], context=context),
|
||||
}
|
||||
financial_report_ref = self._get_financial_report_ref(cr, uid, context=context)
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
res[record.id] = 'none'
|
||||
for key, financial_report in financial_report_ref.items():
|
||||
|
@ -157,15 +168,9 @@ class account_account_type(osv.osv):
|
|||
|
||||
def _save_report_type(self, cr, uid, account_type_id, field_name, field_value, arg, context=None):
|
||||
field_value = field_value or 'none'
|
||||
obj_data = self.pool.get('ir.model.data')
|
||||
obj_financial_report = self.pool.get('account.financial.report')
|
||||
#unlink if it exists somewhere in the financial reports related to BS or PL
|
||||
financial_report_ref = {
|
||||
'asset': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_assets0')[1], context=context),
|
||||
'liability': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_liability0')[1], context=context),
|
||||
'income': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_income0')[1], context=context),
|
||||
'expense': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_expense0')[1], context=context),
|
||||
}
|
||||
financial_report_ref = self._get_financial_report_ref(cr, uid, context=context)
|
||||
for key, financial_report in financial_report_ref.items():
|
||||
list_ids = [x.id for x in financial_report.account_type_ids]
|
||||
if account_type_id in list_ids:
|
||||
|
@ -574,15 +579,18 @@ class account_account(osv.osv):
|
|||
except:
|
||||
pass
|
||||
if name:
|
||||
ids = self.search(cr, user, [('code', '=like', name+"%")]+args, limit=limit)
|
||||
if not ids:
|
||||
ids = self.search(cr, user, [('shortcut', '=', name)]+ args, limit=limit)
|
||||
if not ids:
|
||||
ids = self.search(cr, user, [('name', operator, name)]+ args, limit=limit)
|
||||
if not ids and len(name.split()) >= 2:
|
||||
#Separating code and name of account for searching
|
||||
operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A.
|
||||
ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2)]+ args, limit=limit)
|
||||
if operator not in expression.NEGATIVE_TERM_OPERATORS:
|
||||
ids = self.search(cr, user, ['|', ('code', '=like', name+"%"), '|', ('shortcut', '=', name), ('name', operator, name)]+args, limit=limit)
|
||||
if not ids and len(name.split()) >= 2:
|
||||
#Separating code and name of account for searching
|
||||
operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A.
|
||||
ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2)]+ args, limit=limit)
|
||||
else:
|
||||
ids = self.search(cr, user, ['&','!', ('code', '=like', name+"%"), ('name', operator, name)]+args, limit=limit)
|
||||
# as negation want to restric, do if already have results
|
||||
if ids and len(name.split()) >= 2:
|
||||
operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A.
|
||||
ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2), ('id', 'in', ids)]+ args, limit=limit)
|
||||
else:
|
||||
ids = self.search(cr, user, args, context=context, limit=limit)
|
||||
return self.name_get(cr, user, ids, context=context)
|
||||
|
@ -721,8 +729,7 @@ class account_journal(osv.osv):
|
|||
'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'),
|
||||
'entry_posted': fields.boolean('Autopost Created Moves', help='Check this box to automatically post entries of this journal. Note that legally, some entries may be automatically posted when the source document is validated (Invoices), whatever the status of this field.'),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True, select=1, help="Company related to this journal"),
|
||||
'allow_date':fields.boolean('Check Date in Period', help= 'If set to True then do not accept the entry if the entry date is not into the period dates'),
|
||||
|
||||
'allow_date':fields.boolean('Check Date in Period', help= 'If checked, the entry won\'t be created if the entry date is not included into the selected period'),
|
||||
'profit_account_id' : fields.many2one('account.account', 'Profit Account'),
|
||||
'loss_account_id' : fields.many2one('account.account', 'Loss Account'),
|
||||
'internal_account_id' : fields.many2one('account.account', 'Internal Transfers Account', select=1),
|
||||
|
@ -1015,7 +1022,10 @@ 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)
|
||||
model, action_id = self.pool['ir.model.data'].get_object_reference(cr, uid, 'account', 'action_account_fiscalyear')
|
||||
msg = _('There is no period defined for this date: %s.\nPlease, go to Configuration/Periods and configure a fiscal year.') % dt
|
||||
raise openerp.exceptions.RedirectWarning(msg, action_id, _('Go to the configuration panel'))
|
||||
|
||||
return result
|
||||
|
||||
def action_draft(self, cr, uid, ids, *args):
|
||||
|
@ -1258,6 +1268,10 @@ class account_move(osv.osv):
|
|||
return [('id', 'in', tuple(ids))]
|
||||
return [('id', '=', '0')]
|
||||
|
||||
def _get_move_from_lines(self, cr, uid, ids, context=None):
|
||||
line_obj = self.pool.get('account.move.line')
|
||||
return [line.move_id.id for line in line_obj.browse(cr, uid, ids, context=context)]
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Number', size=64, required=True),
|
||||
'ref': fields.char('Reference', size=64),
|
||||
|
@ -1267,7 +1281,10 @@ class account_move(osv.osv):
|
|||
help='All manually created new journal entries are usually in the status \'Unposted\', but you can set the option to skip that status on the related journal. In that case, they will behave as journal entries automatically created by the system on document validation (invoices, bank statements...) and will be created in \'Posted\' status.'),
|
||||
'line_id': fields.one2many('account.move.line', 'move_id', 'Entries', states={'posted':[('readonly',True)]}),
|
||||
'to_check': fields.boolean('To Review', help='Check this box if you are unsure of that journal entry and if you want to note it as \'to be reviewed\' by an accounting expert.'),
|
||||
'partner_id': fields.related('line_id', 'partner_id', type="many2one", relation="res.partner", string="Partner", store=True),
|
||||
'partner_id': fields.related('line_id', 'partner_id', type="many2one", relation="res.partner", string="Partner", store={
|
||||
_name: (lambda self, cr,uid,ids,c: ids, ['line_id'], 10),
|
||||
'account.move.line': (_get_move_from_lines, ['partner_id'],10)
|
||||
}),
|
||||
'amount': fields.function(_amount_compute, string='Amount', digits_compute=dp.get_precision('Account'), type='float', fnct_search=_search_amount),
|
||||
'date': fields.date('Date', required=True, states={'posted':[('readonly',True)]}, select=True),
|
||||
'narration':fields.text('Internal Note'),
|
||||
|
@ -1404,14 +1421,17 @@ class account_move(osv.osv):
|
|||
l[2]['period_id'] = default_period
|
||||
context['period_id'] = default_period
|
||||
|
||||
if 'line_id' in vals:
|
||||
if vals.get('line_id', False):
|
||||
c = context.copy()
|
||||
c['novalidate'] = True
|
||||
c['period_id'] = vals['period_id'] if 'period_id' in vals else self._get_period(cr, uid, context)
|
||||
c['journal_id'] = vals['journal_id']
|
||||
if 'date' in vals: c['date'] = vals['date']
|
||||
result = super(account_move, self).create(cr, uid, vals, c)
|
||||
self.validate(cr, uid, [result], context)
|
||||
tmp = self.validate(cr, uid, [result], context)
|
||||
journal = self.pool.get('account.journal').browse(cr, uid, vals['journal_id'], context)
|
||||
if journal.entry_posted and tmp:
|
||||
self.button_validate(cr,uid, [result], context)
|
||||
else:
|
||||
result = super(account_move, self).create(cr, uid, vals, context)
|
||||
return result
|
||||
|
@ -1432,6 +1452,8 @@ class account_move(osv.osv):
|
|||
def unlink(self, cr, uid, ids, context=None, check=True):
|
||||
if context is None:
|
||||
context = {}
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
toremove = []
|
||||
obj_move_line = self.pool.get('account.move.line')
|
||||
for move in self.browse(cr, uid, ids, context=context):
|
||||
|
@ -1556,11 +1578,6 @@ class account_move(osv.osv):
|
|||
obj_analytic_line = self.pool.get('account.analytic.line')
|
||||
obj_move_line = self.pool.get('account.move.line')
|
||||
for move in self.browse(cr, uid, ids, context):
|
||||
# Unlink old analytic lines on move_lines
|
||||
for obj_line in move.line_id:
|
||||
for obj in obj_line.analytic_lines:
|
||||
obj_analytic_line.unlink(cr,uid,obj.id)
|
||||
|
||||
journal = move.journal_id
|
||||
amount = 0
|
||||
line_ids = []
|
||||
|
@ -1633,9 +1650,11 @@ class account_move(osv.osv):
|
|||
else:
|
||||
# We can't validate it (it's unbalanced)
|
||||
# Setting the lines as draft
|
||||
obj_move_line.write(cr, uid, line_ids, {
|
||||
'state': 'draft'
|
||||
}, context, check=False)
|
||||
not_draft_line_ids = list(set(line_ids) - set(line_draft_ids))
|
||||
if not_draft_line_ids:
|
||||
obj_move_line.write(cr, uid, not_draft_line_ids, {
|
||||
'state': 'draft'
|
||||
}, context, check=False)
|
||||
# Create analytic lines for the valid moves
|
||||
for record in valid_moves:
|
||||
obj_move_line.create_analytic_lines(cr, uid, [line.id for line in record.line_id], context)
|
||||
|
@ -1911,7 +1930,7 @@ class account_tax(osv.osv):
|
|||
'child_depend':fields.boolean('Tax on Children', help="Set if the tax computation is based on the computation of child taxes rather than on the total amount."),
|
||||
'python_compute':fields.text('Python Code'),
|
||||
'python_compute_inv':fields.text('Python Code (reverse)'),
|
||||
'python_applicable':fields.text('Python Code'),
|
||||
'python_applicable':fields.text('Applicable Code'),
|
||||
|
||||
#
|
||||
# Fields used for the Tax declaration
|
||||
|
@ -1925,8 +1944,8 @@ class account_tax(osv.osv):
|
|||
|
||||
'ref_base_code_id': fields.many2one('account.tax.code', 'Refund Base Code', help="Use this code for the tax declaration."),
|
||||
'ref_tax_code_id': fields.many2one('account.tax.code', 'Refund Tax Code', help="Use this code for the tax declaration."),
|
||||
'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."),
|
||||
'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."),
|
||||
'ref_base_sign': fields.float('Refund Base Code Sign', help="Usually 1 or -1."),
|
||||
'ref_tax_sign': fields.float('Refund Tax Code Sign', help="Usually 1 or -1."),
|
||||
'include_base_amount': fields.boolean('Included in base amount', help="Indicates if the amount of tax must be included in the base amount for the computation of the next taxes"),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True),
|
||||
'description': fields.char('Tax Code'),
|
||||
|
@ -2774,6 +2793,7 @@ class account_chart_template(osv.osv):
|
|||
'parent_id': fields.many2one('account.chart.template', 'Parent Chart Template'),
|
||||
'code_digits': fields.integer('# of Digits', required=True, help="No. of Digits to use for account code"),
|
||||
'visible': fields.boolean('Can be Visible?', help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template."),
|
||||
'currency_id': fields.many2one('res.currency', 'Currency'),
|
||||
'complete_tax_set': fields.boolean('Complete Set of Taxes', help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete'),
|
||||
'account_root_id': fields.many2one('account.account.template', 'Root Account', domain=[('parent_id','=',False)]),
|
||||
'tax_code_root_id': fields.many2one('account.tax.code.template', 'Root Tax Code', domain=[('parent_id','=',False)]),
|
||||
|
@ -2815,7 +2835,7 @@ class account_tax_template(osv.osv):
|
|||
'child_depend':fields.boolean('Tax on Children', help="Set if the tax computation is based on the computation of child taxes rather than on the total amount."),
|
||||
'python_compute':fields.text('Python Code'),
|
||||
'python_compute_inv':fields.text('Python Code (reverse)'),
|
||||
'python_applicable':fields.text('Python Code'),
|
||||
'python_applicable':fields.text('Applicable Code'),
|
||||
|
||||
#
|
||||
# Fields used for the Tax declaration
|
||||
|
@ -2829,8 +2849,8 @@ class account_tax_template(osv.osv):
|
|||
|
||||
'ref_base_code_id': fields.many2one('account.tax.code.template', 'Refund Base Code', help="Use this code for the tax declaration."),
|
||||
'ref_tax_code_id': fields.many2one('account.tax.code.template', 'Refund Tax Code', help="Use this code for the tax declaration."),
|
||||
'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."),
|
||||
'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."),
|
||||
'ref_base_sign': fields.float('Refund Base Code Sign', help="Usually 1 or -1."),
|
||||
'ref_tax_sign': fields.float('Refund Tax Code Sign', help="Usually 1 or -1."),
|
||||
'include_base_amount': fields.boolean('Include in Base Amount', help="Set if the amount of tax must be included in the base amount before computing the next taxes."),
|
||||
'description': fields.char('Internal Name'),
|
||||
'type_tax_use': fields.selection([('sale','Sale'),('purchase','Purchase'),('all','All')], 'Tax Use In', required=True,),
|
||||
|
@ -3029,11 +3049,19 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
'complete_tax_set': fields.boolean('Complete Set of Taxes', help='This boolean helps you to choose if you want to propose to the user to encode the sales and purchase rates or use the usual m2o fields. This last choice assumes that the set of tax defined for the chosen template is complete'),
|
||||
}
|
||||
|
||||
def onchange_company_id(self, cr, uid, ids, company_id, context=None):
|
||||
currency_id = False
|
||||
if company_id:
|
||||
currency_id = self.pool.get('res.company').browse(cr, uid, company_id, context=context).currency_id.id
|
||||
return {'value': {'currency_id': currency_id}}
|
||||
|
||||
def _get_chart_parent_ids(self, cr, uid, chart_template, context=None):
|
||||
""" Returns the IDs of all ancestor charts, including the chart itself.
|
||||
(inverse of child_of operator)
|
||||
|
||||
:param browse_record chart_template: the account.chart.template record
|
||||
:return: the IDS of all ancestor charts, including the chart itself.
|
||||
"""
|
||||
result = [chart_template.id]
|
||||
while chart_template.parent_id:
|
||||
chart_template = chart_template.parent_id
|
||||
result.append(chart_template.id)
|
||||
return result
|
||||
|
||||
def onchange_tax_rate(self, cr, uid, ids, rate=False, context=None):
|
||||
return {'value': {'purchase_tax_rate': rate or False}}
|
||||
|
@ -3044,15 +3072,21 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
res['value'] = {'complete_tax_set': False, 'sale_tax': False, 'purchase_tax': False}
|
||||
if chart_template_id:
|
||||
data = self.pool.get('account.chart.template').browse(cr, uid, chart_template_id, context=context)
|
||||
res['value'].update({'complete_tax_set': data.complete_tax_set})
|
||||
currency_id = data.currency_id and data.currency_id.id or self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id.id
|
||||
res['value'].update({'complete_tax_set': data.complete_tax_set, 'currency_id': currency_id})
|
||||
if data.complete_tax_set:
|
||||
# default tax is given by the lowest sequence. For same sequence we will take the latest created as it will be the case for tax created while isntalling the generic chart of account
|
||||
sale_tax_ids = tax_templ_obj.search(cr, uid, [("chart_template_id"
|
||||
, "=", chart_template_id), ('type_tax_use', 'in', ('sale','all'))], order="sequence, id desc")
|
||||
purchase_tax_ids = tax_templ_obj.search(cr, uid, [("chart_template_id"
|
||||
, "=", chart_template_id), ('type_tax_use', 'in', ('purchase','all'))], order="sequence, id desc")
|
||||
res['value'].update({'sale_tax': sale_tax_ids and sale_tax_ids[0] or False, 'purchase_tax': purchase_tax_ids and purchase_tax_ids[0] or False})
|
||||
|
||||
chart_ids = self._get_chart_parent_ids(cr, uid, data, context=context)
|
||||
base_tax_domain = [("chart_template_id", "in", chart_ids), ('parent_id', '=', False)]
|
||||
sale_tax_domain = base_tax_domain + [('type_tax_use', 'in', ('sale','all'))]
|
||||
purchase_tax_domain = base_tax_domain + [('type_tax_use', 'in', ('purchase','all'))]
|
||||
sale_tax_ids = tax_templ_obj.search(cr, uid, sale_tax_domain, order="sequence, id desc")
|
||||
purchase_tax_ids = tax_templ_obj.search(cr, uid, purchase_tax_domain, order="sequence, id desc")
|
||||
res['value'].update({'sale_tax': sale_tax_ids and sale_tax_ids[0] or False,
|
||||
'purchase_tax': purchase_tax_ids and purchase_tax_ids[0] or False})
|
||||
res.setdefault('domain', {})
|
||||
res['domain']['sale_tax'] = repr(sale_tax_domain)
|
||||
res['domain']['purchase_tax'] = repr(purchase_tax_domain)
|
||||
if data.code_digits:
|
||||
res['value'].update({'code_digits': data.code_digits})
|
||||
return res
|
||||
|
@ -3060,6 +3094,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
def default_get(self, cr, uid, fields, context=None):
|
||||
res = super(wizard_multi_charts_accounts, self).default_get(cr, uid, fields, context=context)
|
||||
tax_templ_obj = self.pool.get('account.tax.template')
|
||||
account_chart_template = self.pool['account.chart.template']
|
||||
|
||||
if 'bank_accounts_id' in fields:
|
||||
res.update({'bank_accounts_id': [{'acc_name': _('Cash'), 'account_type': 'cash'},{'acc_name': _('Bank'), 'account_type': 'bank'}]})
|
||||
|
@ -3073,17 +3108,28 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
currency_id = company_obj.on_change_country(cr, uid, company_id, country_id, context=context)['value']['currency_id']
|
||||
res.update({'currency_id': currency_id})
|
||||
|
||||
ids = self.pool.get('account.chart.template').search(cr, uid, [('visible', '=', True)], context=context)
|
||||
ids = account_chart_template.search(cr, uid, [('visible', '=', True)], context=context)
|
||||
if ids:
|
||||
#in order to set default chart which was last created set max of ids.
|
||||
chart_id = max(ids)
|
||||
if context.get("default_charts"):
|
||||
model_data = self.pool.get('ir.model.data').search_read(cr, uid, [('model','=','account.chart.template'),('module','=',context.get("default_charts"))], ['res_id'], context=context)
|
||||
if model_data:
|
||||
chart_id = model_data[0]['res_id']
|
||||
chart = account_chart_template.browse(cr, uid, chart_id, context=context)
|
||||
chart_hierarchy_ids = self._get_chart_parent_ids(cr, uid, chart, context=context)
|
||||
if 'chart_template_id' in fields:
|
||||
res.update({'only_one_chart_template': len(ids) == 1, 'chart_template_id': ids[0]})
|
||||
res.update({'only_one_chart_template': len(ids) == 1,
|
||||
'chart_template_id': chart_id})
|
||||
if 'sale_tax' in fields:
|
||||
sale_tax_ids = tax_templ_obj.search(cr, uid, [("chart_template_id"
|
||||
, "=", ids[0]), ('type_tax_use', 'in', ('sale','all'))], order="sequence")
|
||||
sale_tax_ids = tax_templ_obj.search(cr, uid, [("chart_template_id", "in", chart_hierarchy_ids),
|
||||
('type_tax_use', 'in', ('sale','all'))],
|
||||
order="sequence")
|
||||
res.update({'sale_tax': sale_tax_ids and sale_tax_ids[0] or False})
|
||||
if 'purchase_tax' in fields:
|
||||
purchase_tax_ids = tax_templ_obj.search(cr, uid, [("chart_template_id"
|
||||
, "=", ids[0]), ('type_tax_use', 'in', ('purchase','all'))], order="sequence")
|
||||
purchase_tax_ids = tax_templ_obj.search(cr, uid, [("chart_template_id", "in", chart_hierarchy_ids),
|
||||
('type_tax_use', 'in', ('purchase','all'))],
|
||||
order="sequence")
|
||||
res.update({'purchase_tax': purchase_tax_ids and purchase_tax_ids[0] or False})
|
||||
res.update({
|
||||
'purchase_tax_rate': 15.0,
|
||||
|
@ -3140,11 +3186,14 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
def _get_analytic_journal(journal_type):
|
||||
# Get the analytic journal
|
||||
data = False
|
||||
if journal_type in ('sale', 'sale_refund'):
|
||||
data = obj_data.get_object_reference(cr, uid, 'account', 'analytic_journal_sale')
|
||||
elif journal_type in ('purchase', 'purchase_refund'):
|
||||
pass
|
||||
elif journal_type == 'general':
|
||||
try:
|
||||
if journal_type in ('sale', 'sale_refund'):
|
||||
data = obj_data.get_object_reference(cr, uid, 'account', 'analytic_journal_sale')
|
||||
elif journal_type in ('purchase', 'purchase_refund'):
|
||||
data = obj_data.get_object_reference(cr, uid, 'account', 'exp')
|
||||
elif journal_type == 'general':
|
||||
pass
|
||||
except ValueError:
|
||||
pass
|
||||
return data and data[1] or False
|
||||
|
||||
|
@ -3351,12 +3400,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
obj_tax_temp = self.pool.get('account.tax.template')
|
||||
chart_template = obj_wizard.chart_template_id
|
||||
vals = {}
|
||||
# get the ids of all the parents of the selected account chart template
|
||||
current_chart_template = chart_template
|
||||
all_parents = [current_chart_template.id]
|
||||
while current_chart_template.parent_id:
|
||||
current_chart_template = current_chart_template.parent_id
|
||||
all_parents.append(current_chart_template.id)
|
||||
all_parents = self._get_chart_parent_ids(cr, uid, chart_template, context=context)
|
||||
# create tax templates and tax code templates from purchase_tax_rate and sale_tax_rate fields
|
||||
if not chart_template.complete_tax_set:
|
||||
value = obj_wizard.sale_tax_rate
|
||||
|
@ -3373,6 +3417,8 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the
|
||||
accounting properties... accordingly for the chosen company.
|
||||
'''
|
||||
if uid != SUPERUSER_ID and not self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'):
|
||||
raise openerp.exceptions.AccessError(_("Only administrators can change the settings"))
|
||||
obj_data = self.pool.get('ir.model.data')
|
||||
ir_values_obj = self.pool.get('ir.values')
|
||||
obj_wizard = self.browse(cr, uid, ids[0])
|
||||
|
@ -3389,7 +3435,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
self.pool[tmp2[0]].write(cr, uid, tmp2[1], {
|
||||
'currency_id': obj_wizard.currency_id.id
|
||||
})
|
||||
except ValueError, e:
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# If the floats for sale/purchase rates have been filled, create templates from them
|
||||
|
|
|
@ -106,13 +106,13 @@ class account_bank_statement(osv.osv):
|
|||
'balance_start': fields.float('Starting Balance', digits_compute=dp.get_precision('Account'),
|
||||
states={'confirm':[('readonly',True)]}),
|
||||
'balance_end_real': fields.float('Ending Balance', digits_compute=dp.get_precision('Account'),
|
||||
states={'confirm': [('readonly', True)]}),
|
||||
states={'confirm': [('readonly', True)]}, help="Computed using the cash control lines"),
|
||||
'balance_end': fields.function(_end_balance,
|
||||
store = {
|
||||
'account.bank.statement': (lambda self, cr, uid, ids, c={}: ids, ['line_ids','move_line_ids','balance_start'], 10),
|
||||
'account.bank.statement.line': (_get_statement, ['amount'], 10),
|
||||
},
|
||||
string="Computed Balance", help='Balance as calculated based on Starting Balance and transaction lines'),
|
||||
string="Computed Balance", help='Balance as calculated based on Opening Balance and transaction lines'),
|
||||
'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
|
||||
'line_ids': fields.one2many('account.bank.statement.line',
|
||||
'statement_id', 'Statement lines',
|
||||
|
@ -128,6 +128,7 @@ class account_bank_statement(osv.osv):
|
|||
'currency': fields.function(_currency, string='Currency',
|
||||
type='many2one', relation='res.currency'),
|
||||
'account_id': fields.related('journal_id', 'default_debit_account_id', type='many2one', relation='account.account', string='Account used in this journal', readonly=True, help='used in statement reconciliation domain, but shouldn\'t be used elswhere.'),
|
||||
'cash_control': fields.related('journal_id', 'cash_control' , type='boolean', relation='account.journal',string='Cash control'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
@ -450,22 +451,25 @@ class account_bank_statement(osv.osv):
|
|||
def _compute_balance_end_real(self, cr, uid, journal_id, context=None):
|
||||
res = False
|
||||
if journal_id:
|
||||
cr.execute('SELECT balance_end_real \
|
||||
FROM account_bank_statement \
|
||||
WHERE journal_id = %s AND NOT state = %s \
|
||||
ORDER BY date DESC,id DESC LIMIT 1', (journal_id, 'draft'))
|
||||
res = cr.fetchone()
|
||||
journal = self.pool.get('account.journal').browse(cr, uid, journal_id, context=context)
|
||||
if journal.with_last_closing_balance:
|
||||
cr.execute('SELECT balance_end_real \
|
||||
FROM account_bank_statement \
|
||||
WHERE journal_id = %s AND NOT state = %s \
|
||||
ORDER BY date DESC,id DESC LIMIT 1', (journal_id, 'draft'))
|
||||
res = cr.fetchone()
|
||||
return res and res[0] or 0.0
|
||||
|
||||
def onchange_journal_id(self, cr, uid, statement_id, journal_id, context=None):
|
||||
if not journal_id:
|
||||
return {}
|
||||
balance_start = self._compute_balance_end_real(cr, uid, journal_id, context=context)
|
||||
|
||||
journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['company_id', 'currency'], context=context)
|
||||
company_id = journal_data['company_id']
|
||||
currency_id = journal_data['currency'] or self.pool.get('res.company').browse(cr, uid, company_id[0], context=context).currency_id.id
|
||||
return {'value': {'balance_start': balance_start, 'company_id': company_id, 'currency': currency_id}}
|
||||
journal = self.pool.get('account.journal').browse(cr, uid, journal_id, context=context)
|
||||
currency = journal.currency or journal.company_id.currency_id
|
||||
res = {'balance_start': balance_start, 'company_id': journal.company_id.id, 'currency': currency.id}
|
||||
if journal.type == 'cash':
|
||||
res['cash_control'] = journal.cash_control
|
||||
return {'value': res}
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
stat = self.read(cr, uid, ids, ['state'], context=context)
|
||||
|
@ -491,6 +495,7 @@ class account_bank_statement(osv.osv):
|
|||
ctx = (context or {}).copy()
|
||||
ctx['journal_id'] = self.browse(cr, uid, ids[0], context=context).journal_id.id
|
||||
return {
|
||||
'name': _('Journal Items'),
|
||||
'view_type':'form',
|
||||
'view_mode':'tree',
|
||||
'res_model':'account.move.line',
|
||||
|
@ -546,7 +551,7 @@ class account_bank_statement_line(osv.osv):
|
|||
_name = "account.bank.statement.line"
|
||||
_description = "Bank Statement Line"
|
||||
_columns = {
|
||||
'name': fields.char('OBI', required=True, help="Originator to Beneficiary Information"),
|
||||
'name': fields.char('Description', required=True),
|
||||
'date': fields.date('Date', required=True),
|
||||
'amount': fields.float('Amount', digits_compute=dp.get_precision('Account')),
|
||||
'type': fields.selection([
|
||||
|
|
|
@ -159,6 +159,10 @@ class account_cash_statement(osv.osv):
|
|||
context=context
|
||||
)
|
||||
|
||||
opening_details_ids = self._get_cash_open_box_lines(cr, uid, journal_id, context)
|
||||
if opening_details_ids:
|
||||
result['value']['opening_details_ids'] = opening_details_ids
|
||||
|
||||
if not statement_ids:
|
||||
return result
|
||||
|
||||
|
@ -172,13 +176,14 @@ class account_cash_statement(osv.osv):
|
|||
store = {
|
||||
'account.bank.statement': (lambda self, cr, uid, ids, context=None: ids, ['line_ids','move_line_ids'], 10),
|
||||
'account.bank.statement.line': (_get_statement_from_line, ['amount'], 10),
|
||||
}),
|
||||
},
|
||||
help="Total of cash transaction lines."),
|
||||
'closing_date': fields.datetime("Closed On"),
|
||||
'details_ids' : fields.one2many('account.cashbox.line', 'bank_statement_id', string='CashBox Lines'),
|
||||
'opening_details_ids' : fields.one2many('account.cashbox.line', 'bank_statement_id', string='Opening Cashbox Lines'),
|
||||
'closing_details_ids' : fields.one2many('account.cashbox.line', 'bank_statement_id', string='Closing Cashbox Lines'),
|
||||
'user_id': fields.many2one('res.users', 'Responsible', required=False),
|
||||
'difference' : fields.function(_compute_difference, method=True, string="Difference", type="float"),
|
||||
'difference' : fields.function(_compute_difference, method=True, string="Difference", type="float", help="Difference between the theoretical closing balance and the real closing balance."),
|
||||
'last_closing_balance' : fields.function(_compute_last_closing_balance, method=True, string='Last Closing Balance', type='float'),
|
||||
}
|
||||
_defaults = {
|
||||
|
@ -187,13 +192,12 @@ class account_cash_statement(osv.osv):
|
|||
'user_id': lambda self, cr, uid, context=None: uid,
|
||||
}
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
journal = False
|
||||
if vals.get('journal_id'):
|
||||
journal = self.pool.get('account.journal').browse(cr, uid, vals['journal_id'], context=context)
|
||||
if journal and (journal.type == 'cash') and not vals.get('details_ids'):
|
||||
vals['details_ids'] = []
|
||||
|
||||
def _get_cash_open_box_lines(self, cr, uid, journal_id, context):
|
||||
details_ids = []
|
||||
if not journal_id:
|
||||
return details_ids
|
||||
journal = self.pool.get('account.journal').browse(cr, uid, journal_id, context=context)
|
||||
if journal and (journal.type == 'cash'):
|
||||
last_pieces = None
|
||||
|
||||
if journal.with_last_closing_balance == True:
|
||||
|
@ -206,16 +210,19 @@ class account_cash_statement(osv.osv):
|
|||
last_pieces = dict(
|
||||
(line.pieces, line.number_closing) for line in last_bank_statement.details_ids
|
||||
)
|
||||
|
||||
for value in journal.cashbox_line_ids:
|
||||
nested_values = {
|
||||
'number_closing' : 0,
|
||||
'number_opening' : last_pieces.get(value.pieces, 0) if isinstance(last_pieces, dict) else 0,
|
||||
'pieces' : value.pieces
|
||||
}
|
||||
details_ids.append([0, False, nested_values])
|
||||
return details_ids
|
||||
|
||||
vals['details_ids'].append([0, False, nested_values])
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
journal_id = vals.get('journal_id')
|
||||
if journal_id and not vals.get('opening_details_ids'):
|
||||
vals['opening_details_ids'] = vals.get('opening_details_ids') or self._get_cash_open_box_lines(cr, uid, journal_id, context)
|
||||
res_id = super(account_cash_statement, self).create(cr, uid, vals, context=context)
|
||||
self._update_balances(cr, uid, [res_id], context)
|
||||
return res_id
|
||||
|
@ -233,7 +240,10 @@ class account_cash_statement(osv.osv):
|
|||
|
||||
@return: True on success, False otherwise
|
||||
"""
|
||||
|
||||
if vals.get('journal_id', False):
|
||||
cashbox_line_obj = self.pool.get('account.cashbox.line')
|
||||
cashbox_ids = cashbox_line_obj.search(cr, uid, [('bank_statement_id', 'in', ids)], context=context)
|
||||
cashbox_line_obj.unlink(cr, uid, cashbox_ids, context)
|
||||
res = super(account_cash_statement, self).write(cr, uid, ids, vals, context=context)
|
||||
self._update_balances(cr, uid, ids, context)
|
||||
return res
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
</form>
|
||||
<footer position="replace">
|
||||
<footer>
|
||||
<button name="action_next" type="object" string="Continue" class="oe_highlight"/>
|
||||
<button name="action_next" context="{'default_charts':charts}" type="object" string="Continue" class="oe_highlight"/>
|
||||
</footer>
|
||||
</footer>
|
||||
<separator string="title" position="replace">
|
||||
|
|
|
@ -114,7 +114,7 @@ class account_invoice(osv.osv):
|
|||
#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:
|
||||
if line.invoice and invoice.type == line.invoice.type:
|
||||
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)
|
||||
|
@ -1431,6 +1431,7 @@ class account_invoice_line(osv.osv):
|
|||
|
||||
_name = "account.invoice.line"
|
||||
_description = "Invoice Line"
|
||||
_order = "invoice_id,sequence,id"
|
||||
_columns = {
|
||||
'name': fields.text('Description', required=True),
|
||||
'origin': fields.char('Source Document', size=256, help="Reference of the document that produced this invoice."),
|
||||
|
@ -1467,6 +1468,7 @@ class account_invoice_line(osv.osv):
|
|||
'discount': 0.0,
|
||||
'price_unit': _price_unit_default,
|
||||
'account_id': _default_account_id,
|
||||
'sequence': 10,
|
||||
}
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
||||
|
|
|
@ -125,7 +125,7 @@
|
|||
<field name="journal_id" invisible="1"/>
|
||||
<field name="period_id" invisible="1" groups="account.group_account_user"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
<field name="user_id" string="Responsible"/>
|
||||
<field name="date_due"/>
|
||||
<field name="origin"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
|
@ -192,6 +192,7 @@
|
|||
<page string="Invoice">
|
||||
<field context="{'partner_id': partner_id, 'price_type': context.get('price_type') or False, 'type': type}" name="invoice_line">
|
||||
<tree string="Invoice lines" editable="bottom">
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="product_id"
|
||||
on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
|
||||
<field name="name"/>
|
||||
|
@ -250,7 +251,7 @@
|
|||
<group>
|
||||
<group>
|
||||
<field domain="[('partner_id', '=', partner_id)]" name="partner_bank_id" on_change="onchange_partner_bank(partner_bank_id)"/>
|
||||
<field name="user_id"/>
|
||||
<field name="user_id" string="Responsible" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'account.group_account_invoice']}"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<field name="payment_term" widget="selection"/>
|
||||
</group>
|
||||
|
@ -348,6 +349,7 @@
|
|||
<page string="Invoice Lines">
|
||||
<field name="invoice_line" nolabel="1" widget="one2many_list" context="{'type': type}">
|
||||
<tree string="Invoice Lines" editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="product_id"
|
||||
on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
|
||||
<field name="name"/>
|
||||
|
@ -392,7 +394,7 @@
|
|||
<group col="4">
|
||||
<group>
|
||||
<field name="company_id" on_change="onchange_company_id(company_id,partner_id,type,invoice_line,currency_id,context)" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="user_id" groups="base.group_user"/>
|
||||
<field name="user_id" groups="base.group_user" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'account.group_account_invoice']}"/>
|
||||
<field domain="[('partner_id.ref_companies', 'in', [company_id])]" name="partner_bank_id"/>
|
||||
<field name="period_id" domain="[('state', '=', 'draft'), ('company_id', '=', company_id)]"
|
||||
groups="account.group_account_manager"
|
||||
|
@ -461,14 +463,14 @@
|
|||
<separator/>
|
||||
<filter domain="[('user_id','=',uid)]" help="My Invoices"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter name="partner_id" string="Partner" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter name="group_by_partner_id" string="Partner" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter name="commercial_partner_id" string="Commercial Partner" domain="[]" context="{'group_by':'commercial_partner_id'}"/>
|
||||
<filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/>
|
||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<filter string="Period" icon="terp-go-month" domain="[]" context="{'group_by':'period_id'}"/>
|
||||
<filter string="Invoice Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_invoice'}"/>
|
||||
<filter string="Due Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_due'}"/>
|
||||
<filter string="Invoice Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_invoice'}"/>
|
||||
<filter string="Due Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_due'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
|
|
@ -26,7 +26,7 @@ from operator import itemgetter
|
|||
|
||||
from lxml import etree
|
||||
|
||||
from openerp import netsvc
|
||||
from openerp import workflow
|
||||
from openerp.osv import fields, osv, orm
|
||||
from openerp.tools.translate import _
|
||||
import openerp.addons.decimal_precision as dp
|
||||
|
@ -193,6 +193,8 @@ class account_move_line(osv.osv):
|
|||
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, ))
|
||||
if obj_line.analytic_lines:
|
||||
acc_ana_line_obj.unlink(cr,uid,[obj.id for obj in obj_line.analytic_lines])
|
||||
vals_line = self._prepare_analytic_line(cr, uid, obj_line, context=context)
|
||||
acc_ana_line_obj.create(cr, uid, vals_line)
|
||||
return True
|
||||
|
@ -311,13 +313,13 @@ class account_move_line(osv.osv):
|
|||
context = {}
|
||||
c = context.copy()
|
||||
c['initital_bal'] = True
|
||||
sql = """SELECT l2.id, SUM(l1.debit-l1.credit)
|
||||
FROM account_move_line l1, account_move_line l2
|
||||
WHERE l2.account_id = l1.account_id
|
||||
AND l1.id <= l2.id
|
||||
AND l2.id IN %s AND """ + \
|
||||
self._query_get(cr, uid, obj='l1', context=c) + \
|
||||
" GROUP BY l2.id"
|
||||
sql = """SELECT l1.id, COALESCE(SUM(l2.debit-l2.credit), 0)
|
||||
FROM account_move_line l1 LEFT JOIN account_move_line l2
|
||||
ON (l1.account_id = l2.account_id
|
||||
AND l2.id <= l1.id
|
||||
AND """ + \
|
||||
self._query_get(cr, uid, obj='l2', context=c) + \
|
||||
") WHERE l1.id IN %s GROUP BY l1.id"
|
||||
|
||||
cr.execute(sql, [tuple(ids)])
|
||||
return dict(cr.fetchall())
|
||||
|
@ -847,18 +849,17 @@ class account_move_line(osv.osv):
|
|||
(tuple(ids), ))
|
||||
r = cr.fetchall()
|
||||
#TODO: move this check to a constraint in the account_move_reconcile object
|
||||
if len(r) != 1:
|
||||
raise osv.except_osv(_('Error'), _('Entries are not of the same account or already reconciled ! '))
|
||||
if not unrec_lines:
|
||||
raise osv.except_osv(_('Error!'), _('Entry is already reconciled.'))
|
||||
account = account_obj.browse(cr, uid, account_id, context=context)
|
||||
if not account.reconcile:
|
||||
raise osv.except_osv(_('Error'), _('The account is not defined to be reconciled !'))
|
||||
if r[0][1] != None:
|
||||
raise osv.except_osv(_('Error!'), _('Some entries are already reconciled.'))
|
||||
|
||||
if context.get('fy_closing'):
|
||||
# We don't want to generate any write-off when being called from the
|
||||
# wizard used to close a fiscal year (and it doesn't give us any
|
||||
# writeoff_acc_id).
|
||||
pass
|
||||
elif (not currency_obj.is_zero(cr, uid, account.company_id.currency_id, writeoff)) or \
|
||||
if (not currency_obj.is_zero(cr, uid, account.company_id.currency_id, writeoff)) or \
|
||||
(account.currency_id and (not currency_obj.is_zero(cr, uid, account.currency_id, currency))):
|
||||
if not writeoff_acc_id:
|
||||
raise osv.except_osv(_('Warning!'), _('You have to provide an account for the write off/exchange difference entry.'))
|
||||
|
@ -932,11 +933,10 @@ class account_move_line(osv.osv):
|
|||
'line_id': map(lambda x: (4, x, False), ids),
|
||||
'line_partial_ids': map(lambda x: (3, x, False), ids)
|
||||
})
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
# the id of the move.reconcile is written in the move.line (self) by the create method above
|
||||
# because of the way the line_id are defined: (4, x, False)
|
||||
for id in ids:
|
||||
wf_service.trg_trigger(uid, 'account.move.line', id, cr)
|
||||
workflow.trg_trigger(uid, 'account.move.line', id, cr)
|
||||
|
||||
if lines and lines[0]:
|
||||
partner_id = lines[0].partner_id and lines[0].partner_id.id or False
|
||||
|
@ -1198,7 +1198,7 @@ class account_move_line(osv.osv):
|
|||
break
|
||||
# Automatically convert in the account's secondary currency if there is one and
|
||||
# the provided values were not already multi-currency
|
||||
if account.currency_id and (vals.get('amount_currency', False) is False) and account.currency_id.id != account.company_id.currency_id.id:
|
||||
if account.currency_id and 'amount_currency' not in vals and account.currency_id.id != account.company_id.currency_id.id:
|
||||
vals['currency_id'] = account.currency_id.id
|
||||
ctx = {}
|
||||
if 'date' in vals:
|
||||
|
@ -1208,20 +1208,6 @@ class account_move_line(osv.osv):
|
|||
if not ok:
|
||||
raise osv.except_osv(_('Bad Account!'), _('You cannot use this general account in this journal, check the tab \'Entry Controls\' on the related journal.'))
|
||||
|
||||
if vals.get('analytic_account_id',False):
|
||||
if journal.analytic_journal_id:
|
||||
vals['analytic_lines'] = [(0,0, {
|
||||
'name': vals['name'],
|
||||
'date': vals.get('date', time.strftime('%Y-%m-%d')),
|
||||
'account_id': vals.get('analytic_account_id', False),
|
||||
'unit_amount': vals.get('quantity', 1.0),
|
||||
'amount': vals.get('debit', 0.0) or vals.get('credit', 0.0),
|
||||
'general_account_id': vals.get('account_id', False),
|
||||
'journal_id': journal.analytic_journal_id.id,
|
||||
'ref': vals.get('ref', False),
|
||||
'user_id': uid
|
||||
})]
|
||||
|
||||
result = super(account_move_line, self).create(cr, uid, vals, context=context)
|
||||
# CREATE Taxes
|
||||
if vals.get('account_tax_id', False):
|
||||
|
@ -1283,7 +1269,7 @@ class account_move_line(osv.osv):
|
|||
self.create(cr, uid, data, context)
|
||||
del vals['account_tax_id']
|
||||
|
||||
if check and ((not context.get('no_store_function')) or journal.entry_posted):
|
||||
if check and not context.get('novalidate') and ((not context.get('no_store_function')) or journal.entry_posted):
|
||||
tmp = move_obj.validate(cr, uid, [vals['move_id']], context)
|
||||
if journal.entry_posted and tmp:
|
||||
move_obj.button_validate(cr,uid, [vals['move_id']], context)
|
||||
|
|
|
@ -27,13 +27,13 @@
|
|||
<report auto="False" id="account_intracom" menu="False" model="account.move.line" name="account.intracom" string="IntraCom"/>
|
||||
|
||||
<report
|
||||
auto="False"
|
||||
id="account_vat_declaration"
|
||||
menu="False"
|
||||
model="account.tax.code"
|
||||
name="account.vat.declaration"
|
||||
rml="account/report/account_tax_report.rml"
|
||||
string="Taxes Report"/>
|
||||
id="action_report_vat"
|
||||
model="account.tax.code"
|
||||
report_type="qweb-pdf"
|
||||
string="Account tax"
|
||||
name="account.report_vat"
|
||||
file="account.report_vat"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
id="menu_tax_report"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<field name="partner_id" ref="base.res_partner_1"/>
|
||||
<field name="journal_id" ref="account.sales_journal"/>
|
||||
<field name="state">draft</field>
|
||||
<field name="type">out_invoice</field>
|
||||
<field name="type">in_invoice</field>
|
||||
<field name="account_id" ref="account.a_recv"/>
|
||||
<field name="name">Test invoice 1</field>
|
||||
</record>
|
||||
|
|
|
@ -413,7 +413,7 @@
|
|||
<page string="Advanced Settings">
|
||||
<group>
|
||||
<group>
|
||||
<field name="user_id"/>
|
||||
<field name="user_id" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'account.group_account_user']}"/>
|
||||
<field name="sequence_id" required="0"/>
|
||||
</group>
|
||||
<group>
|
||||
|
@ -588,7 +588,7 @@
|
|||
<field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[
|
||||
'&',
|
||||
'|',('parent_id','=',False),('is_company','=',True),
|
||||
'|',('customer','=',True),('supplier','=',True)]"/>
|
||||
'|',('customer','=',True),('supplier','=',True)]" context="{'default_supplier': 1}"/>
|
||||
<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')]"/>
|
||||
|
@ -1211,6 +1211,7 @@
|
|||
<record id="view_move_line_tree_reconcile" model="ir.ui.view">
|
||||
<field name="model">account.move.line</field>
|
||||
<field eval="24" name="priority"/>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree_account_reconciliation colors="red:state == 'draft';black:state == 'valid'" string="Journal Items to Reconcile" create="false" version="7.0">
|
||||
<field name="date"/>
|
||||
|
@ -1269,12 +1270,11 @@
|
|||
<field name="model">account.move</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Account Entry" version="7.0">
|
||||
<header>
|
||||
<button name="button_validate" states="draft" string="Post" type="object" class="oe_highlight" groups="account.group_account_invoice"/>
|
||||
<button name="button_cancel" states="posted" string="Cancel Entry" type="object" groups="account.group_account_invoice"/>
|
||||
<field name="state" widget="statusbar"/>
|
||||
</header>
|
||||
<sheet string="Journal Entries" >
|
||||
<header>
|
||||
<button name="button_validate" states="draft" string="Post" type="object" class="oe_highlight" groups="account.group_account_invoice"/>
|
||||
<button name="button_cancel" states="posted" string="Cancel Entry" type="object" groups="account.group_account_invoice"/>
|
||||
<field name="state" widget="statusbar"/>
|
||||
</header>
|
||||
<label for="name" class="oe_edit_only" attrs="{'invisible':[('name','=','/')]}"/>
|
||||
<h1>
|
||||
<field name="name" readonly="True" attrs="{'invisible':[('name','=','/')]}"/>
|
||||
|
@ -1383,7 +1383,6 @@
|
|||
<field name="narration" colspan="4" placeholder="Add an internal note..." nolabel="1" height="50"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -1406,7 +1405,7 @@
|
|||
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/>
|
||||
<filter string="States" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<filter string="Period" icon="terp-go-month" domain="[]" context="{'group_by':'period_id'}"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date'}"/>
|
||||
<filter string="Entries Month" icon="terp-go-month" domain="[]" context="{'group_by':'date'}" help="Journal Entries by Month"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -1452,7 +1451,7 @@
|
|||
<act_window
|
||||
id="act_account_move_to_account_move_line_open"
|
||||
name="Journal Items"
|
||||
context="{'search_default_journal_id': active_id, 'default_journal_id': active_id}"
|
||||
context="{'search_default_move_id': active_id, 'default_move_id': active_id}"
|
||||
res_model="account.move.line"
|
||||
src_model="account.move"/>
|
||||
|
||||
|
@ -1600,7 +1599,6 @@
|
|||
<label for="value_amount" string="Amount To Pay" attrs="{'invisible':[('value','=','balance')]}"/>
|
||||
<div attrs="{'invisible':[('value','=','balance')]}">
|
||||
<field name="value_amount" class="oe_inline"/>
|
||||
<label string="%%" class="oe_inline" attrs="{'invisible':['!',('value','=','procent')]}" />
|
||||
</div>
|
||||
</group>
|
||||
<group string="Due Date Computation">
|
||||
|
@ -2120,7 +2118,7 @@
|
|||
<field name="chart_template_id" widget="selection" on_change="onchange_chart_template_id(chart_template_id)" domain="[('visible','=', True)]"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_id" widget="selection" on_change="onchange_company_id(company_id)"/> <!-- we assume that this wizard will be run only by administrators and as this field may cause problem if hidden (because of the default company of the user removed from the selection because already configured), we simply choosed to remove the group "multi company" of it -->
|
||||
<field name="company_id" widget="selection"/> <!-- we assume that this wizard will be run only by administrators and as this field may cause problem if hidden (because of the default company of the user removed from the selection because already configured), we simply choosed to remove the group "multi company" of it -->
|
||||
<field name="currency_id" class="oe_inline"/>
|
||||
<field name="sale_tax" attrs="{'invisible': [('complete_tax_set', '!=', True)]}" domain="[('chart_template_id', '=', chart_template_id),('parent_id','=',False),('type_tax_use','in',('sale','all'))]"/>
|
||||
<label for="sale_tax_rate" string="Sale Tax" attrs="{'invisible': [('complete_tax_set', '=', True)]}"/>
|
||||
|
@ -2263,8 +2261,7 @@
|
|||
<group>
|
||||
<group>
|
||||
<field name="journal_id" on_change="onchange_journal_id(journal_id)" widget="selection" domain="[('type', '=', 'cash')]" />
|
||||
<field name="user_id" readonly="1" string="Responsible"/>
|
||||
<field name="total_entry_encoding"/>
|
||||
<field name="user_id" attrs="{'readonly':[('state','!=','draft')]}" string="Responsible"/>
|
||||
<field name='company_id' widget="selection" groups="base.group_multi_company" />
|
||||
</group>
|
||||
<group>
|
||||
|
@ -2272,6 +2269,7 @@
|
|||
<field name="closing_date" readonly="1"/>
|
||||
<field name="period_id" class="oe_inline"/>
|
||||
<field name="currency" invisible="1"/>
|
||||
<field name="cash_control" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
|
@ -2305,41 +2303,64 @@
|
|||
</form>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Cash Control">
|
||||
<page string="Cash Control" attrs="{'invisible' : [('cash_control', '=', False)]}">
|
||||
<group col="2" expand="1">
|
||||
<field name="opening_details_ids" nolabel="1" colspan="4" attrs="{'invisible' : [('state', '!=', 'draft')]}">
|
||||
<tree string="Opening Cashbox Lines" editable="bottom">
|
||||
<field name="pieces"/>
|
||||
<field name="number_opening" string="Opening Unit Numbers" on_change="on_change_sub_opening(pieces, number_opening, parent.balance_end)"/>
|
||||
<field name="subtotal_opening" string="Opening Subtotal"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="closing_details_ids" nolabel="1" colspan="4" attrs="{'invisible' : [('state', '=', 'draft')]}">
|
||||
<tree string="Closing Cashbox Lines" editable="bottom">
|
||||
<field name="pieces" readonly="1" />
|
||||
<field name="number_opening" string="Opening Unit Numbers" readonly="1" />
|
||||
<field name="subtotal_opening" string="Opening Subtotal" readonly="1" />
|
||||
|
||||
<field name="number_closing" string="Closing Unit Numbers" on_change="on_change_sub_closing(pieces, number_closing, parent.balance_end)"/>
|
||||
<field name="subtotal_closing" string="Closing Subtotal"/>
|
||||
</tree>
|
||||
</field>
|
||||
<group string="Opening Cash Control" attrs="{'invisible' : [('state', '!=', 'draft')]}">
|
||||
<field name="opening_details_ids" colspan="2" nolabel="1">
|
||||
<tree string="Opening Cashbox Lines" editable="bottom">
|
||||
<field name="pieces"/>
|
||||
<field name="number_opening" on_change="on_change_sub_opening(pieces, number_opening)" />
|
||||
<field name="subtotal_opening" string="Opening Subtotal" sum="Total"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
<group>
|
||||
<group string="Opening Cash Control" attrs="{'invisible' : [('state', '=', 'draft')]}">
|
||||
<field name="details_ids" colspan="2" nolabel="1" attrs="{'readonly' : [('state', '!=', 'draft')]}">
|
||||
<tree string="Opening Cashbox Lines" editable="bottom">
|
||||
<field name="pieces"/>
|
||||
<field name="number_opening" on_change="on_change_sub_opening(pieces, number_opening)"/>
|
||||
<field name="subtotal_opening" string="Opening Subtotal" sum="Total"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
<group string="Closing Cash Control" attrs="{'invisible' : [('state', '=', 'draft')]}">
|
||||
<field name="closing_details_ids" colspan="2" nolabel="1" attrs="{'readonly' : [('state', '=', 'confirm')]}">
|
||||
<tree string="Closing Cashbox Lines" editable="bottom">
|
||||
<field name="pieces" readonly="1" />
|
||||
<field name="number_closing" on_change="on_change_sub_closing(pieces, number_closing)"/>
|
||||
<field name="subtotal_closing" string="Closing Subtotal" sum="Total"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Journal Entries" attrs="{'invisible': [('state','!=','confirm')]}">
|
||||
<field name="move_line_ids" string="Journal Entries"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<group col="6" colspan="4">
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Opening Balance" colspan="4"/>
|
||||
<field name="balance_start" readonly="1" string="Opening Cash Control" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||
<field name="last_closing_balance" readonly="1" string="Last Closing Balance" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||
<field name="total_entry_encoding" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||
</group>
|
||||
<group string="Closing Balance">
|
||||
<field name="balance_end" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||
<group>
|
||||
<group class="oe_subtotal_footer oe_right">
|
||||
<label for="balance_start" class="oe_subtotal_footer_separator oe_open_balance" string="Opening Balance" style="padding-right: 23px !important; padding-top: 6px !important;"/>
|
||||
<field name="balance_start" attrs="{'readonly' : ['|', ('cash_control', '=', True), ('state', '=', 'confirm')]}" nolabel="1" widget="monetary" class="oe_subtotal_footer_separator oe_open_balance" options="{'currency_field': 'currency'}" help="Total of opening cash control lines"/>
|
||||
<label for="total_entry_encoding" string="+ Transactions" class="oe_force_bold oe_mini_subtotal_footer_separator" style="padding-right: 20px !important;"/>
|
||||
<field name="total_entry_encoding" nolabel="1" class="oe_bold oe_account_total" widget="monetary" options="{'currency_field': 'currency'}"/>
|
||||
<label for="balance_end" string="= Theoretical Closing Balance" class="oe_force_bold oe_mini_subtotal_footer_separator" style="padding-right: 20px !important;" help="Sum of opening balance and transactions."/>
|
||||
<field name="balance_end" nolabel="1" class="oe_bold oe_account_total" widget="monetary" options="{'currency_field': 'currency'}"/>
|
||||
</group>
|
||||
<div>
|
||||
<group class="oe_subtotal_footer oe_right" attrs="{'invisible': [('state', '=', 'draft')]}">
|
||||
<label for="balance_end_real" class="oe_subtotal_footer_separator oe_real_closing_balance" string="Real Closing Balance" style="padding-right: 23px !important; padding-top: 6px !important;"/>
|
||||
<field name="balance_end_real" attrs="{'readonly' : ['|', ('cash_control', '=', True), ('state', '=', 'confirm')]}" nolabel="1" class="oe_subtotal_footer_separator oe_real_closing_balance" widget="monetary" options="{'currency_field': 'currency'}" help="Total of closing cash control lines."/>
|
||||
</group>
|
||||
<group/>
|
||||
<group/>
|
||||
<group class="oe_subtotal_footer oe_right" attrs="{'invisible': [('state', '=', 'draft')]}">
|
||||
<label for="difference" string="Difference" class="oe_subtotal_footer_separator oe_difference" style="padding-right: 20px !important;"/>
|
||||
<field name="difference" nolabel="1" class="oe_subtotal_footer_separator oe_difference" widget="monetary" options="{'currency_field': 'currency'}"/>
|
||||
</group>
|
||||
</div>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
|
@ -3,9 +3,15 @@
|
|||
<data noupdate="1">
|
||||
|
||||
<record id="analytic_journal_sale" model="account.analytic.journal">
|
||||
<field name="code">SAL</field>
|
||||
<field name="name">Sales</field>
|
||||
<field name="type">sale</field>
|
||||
</record>
|
||||
<record id="exp" model="account.analytic.journal">
|
||||
<field name="code">PUR</field>
|
||||
<field name="name">Purchases</field>
|
||||
<field name="type">purchase</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Payment term
|
||||
|
@ -16,7 +22,6 @@
|
|||
</record>
|
||||
|
||||
<record id="account_payment_term_line_immediate" model="account.payment.term.line">
|
||||
<field name="name">Immediate Payment</field>
|
||||
<field name="value">balance</field>
|
||||
<field eval="0" name="days"/>
|
||||
<field eval="0" name="days2"/>
|
||||
|
|
|
@ -18,10 +18,18 @@
|
|||
Fiscal Periods
|
||||
-->
|
||||
|
||||
<record id="period_0" model="account.period">
|
||||
<field eval="'00/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X Opening Period '+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-01-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-01-01'" name="date_stop"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
</record>
|
||||
<record id="period_1" model="account.period">
|
||||
<field eval="'01/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 01/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-01-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-01-31'" name="date_stop"/>
|
||||
|
@ -30,7 +38,6 @@
|
|||
<record id="period_2" model="account.period">
|
||||
<field eval="'02/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 02/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-02-01'" name="date_start"/>
|
||||
<!-- for the last day of February, we have to compute the day before March 1st -->
|
||||
|
@ -40,7 +47,6 @@
|
|||
<record id="period_3" model="account.period">
|
||||
<field eval="'03/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 03/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-03-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-03-31'" name="date_stop"/>
|
||||
|
@ -49,7 +55,6 @@
|
|||
<record id="period_4" model="account.period">
|
||||
<field eval="'04/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 04/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-04-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-04-30'" name="date_stop"/>
|
||||
|
@ -58,7 +63,6 @@
|
|||
<record id="period_5" model="account.period">
|
||||
<field eval="'05/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 05/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-05-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-05-31'" name="date_stop"/>
|
||||
|
@ -68,7 +72,6 @@
|
|||
<field eval="'06/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 06/'+time.strftime('%Y')" name="name"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field eval="time.strftime('%Y')+'-06-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-06-30'" name="date_stop"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
|
@ -76,7 +79,6 @@
|
|||
<record id="period_7" model="account.period">
|
||||
<field eval="'07/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 07/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-07-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-07-31'" name="date_stop"/>
|
||||
|
@ -85,7 +87,6 @@
|
|||
<record id="period_8" model="account.period">
|
||||
<field eval="'08/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 08/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-08-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-08-31'" name="date_stop"/>
|
||||
|
@ -94,7 +95,6 @@
|
|||
<record id="period_9" model="account.period">
|
||||
<field eval="'09/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 09/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-09-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-09-30'" name="date_stop"/>
|
||||
|
@ -103,7 +103,6 @@
|
|||
<record id="period_10" model="account.period">
|
||||
<field eval="'10/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 10/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-10-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-10-31'" name="date_stop"/>
|
||||
|
@ -112,7 +111,6 @@
|
|||
<record id="period_11" model="account.period">
|
||||
<field eval="'11/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 11/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-11-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-11-30'" name="date_stop"/>
|
||||
|
@ -121,7 +119,6 @@
|
|||
<record id="period_12" model="account.period">
|
||||
<field eval="'12/'+time.strftime('%Y')" name="code"/>
|
||||
<field eval="'X 12/'+time.strftime('%Y')" name="name"/>
|
||||
<field eval="True" name="special"/>
|
||||
<field name="fiscalyear_id" ref="data_fiscalyear"/>
|
||||
<field eval="time.strftime('%Y')+'-12-01'" name="date_start"/>
|
||||
<field eval="time.strftime('%Y')+'-12-31'" name="date_stop"/>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<!--Email template -->
|
||||
<record id="email_template_edi_invoice" model="email.template">
|
||||
<field name="name">Invoice - Send by Email</field>
|
||||
<field name="email_from">${object.user_id.email or object.company_id.email or 'noreply@localhost'}</field>
|
||||
<field name="email_from">${(object.user_id.email or object.company_id.email or 'noreply@localhost')|safe}</field>
|
||||
<field name="subject">${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})</field>
|
||||
<field name="partner_to">${object.partner_id.id}</field>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-07-11 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16696)\n"
|
||||
"X-Launchpad-Export-Date: 2014-01-28 05:56+0000\n"
|
||||
"X-Generator: Launchpad (build 16914)\n"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-30 05:55+0000\n"
|
||||
"X-Generator: Launchpad (build 16692)\n"
|
||||
"X-Launchpad-Export-Date: 2014-01-28 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 16914)\n"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -107,7 +107,9 @@ class res_partner(osv.osv):
|
|||
_description = 'Partner'
|
||||
|
||||
def _credit_debit_get(self, cr, uid, ids, field_names, arg, context=None):
|
||||
query = self.pool.get('account.move.line')._query_get(cr, uid, context=context)
|
||||
ctx = context.copy()
|
||||
ctx['all_fiscalyear'] = True
|
||||
query = self.pool.get('account.move.line')._query_get(cr, uid, context=ctx)
|
||||
cr.execute("""SELECT l.partner_id, a.type, SUM(l.debit-l.credit)
|
||||
FROM account_move_line l
|
||||
LEFT JOIN account_account a ON (l.account_id=a.id)
|
||||
|
|
|
@ -11,12 +11,16 @@
|
|||
<page string="Accounting" groups="account.group_account_invoice">
|
||||
<group name="properties">
|
||||
<group>
|
||||
<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"/>
|
||||
<field name="property_account_income" domain="[('type','=','other')]" groups="account.group_account_user"
|
||||
attrs="{'readonly': [('is_only_child', '=', False)]}"/>
|
||||
<field name="taxes_id" colspan="2" widget="many2many_tags"
|
||||
attrs="{'readonly':[ '|', ('sale_ok','=',0), ('is_only_child', '=', False)]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user"/>
|
||||
<field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
|
||||
<field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user"
|
||||
attrs="{'readonly': [('is_only_child', '=', False)]}"/>
|
||||
<field name="supplier_taxes_id" colspan="2" widget="many2many_tags"
|
||||
attrs="{'readonly': [('is_only_child', '=', False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
@ -31,12 +35,16 @@
|
|||
<field name="arch" type="xml">
|
||||
<notebook position="inside">
|
||||
<page string="Accounting">
|
||||
<separator string="Sales Properties" colspan="2"/>
|
||||
<separator string="Purchase Properties" colspan="2"/>
|
||||
<field name="property_account_income" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="taxes_id"/>
|
||||
<field name="supplier_taxes_id"/>
|
||||
<group name="properties">
|
||||
<group>
|
||||
<field name="property_account_income" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="taxes_id" colspan="2" widget="many2many_tags"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</field>
|
||||
|
|
|
@ -6,11 +6,6 @@
|
|||
<field name="name">Sales</field>
|
||||
<field name="type">sale</field>
|
||||
</record>
|
||||
<record id="exp" model="account.analytic.journal">
|
||||
<field name="code">PUR</field>
|
||||
<field name="name">Purchases</field>
|
||||
<field name="type">purchase</field>
|
||||
</record>
|
||||
<record id="sit" model="account.analytic.journal">
|
||||
<field name="code">START</field>
|
||||
<field name="name">Miscellaneous Operation</field>
|
||||
|
|
|
@ -133,7 +133,7 @@
|
|||
<field name="name"/>
|
||||
<field name="account_id"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="user_id" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'account.group_account_invoice']}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="date"/>
|
||||
|
@ -206,7 +206,7 @@
|
|||
<filter string="Product" context="{'group_by':'product_id'}"/>
|
||||
<filter string="User" context="{'group_by':'user_id'}"/>
|
||||
<separator/>
|
||||
<filter string="Date" context="{'group_by':'date'}" name="group_date"/>
|
||||
<filter string="Tasks Month" context="{'group_by':'date'}" name="group_date" help="Invoice Tasks by Month"/>
|
||||
|
||||
</group>
|
||||
</search>
|
||||
|
|
|
@ -7,16 +7,16 @@
|
|||
<field name="model">account.analytic.chart</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Analytic Account Charts" version="7.0">
|
||||
<header>
|
||||
<button name="analytic_account_chart_open_window" string="Open Charts" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</header>
|
||||
<group string="Select the Period for Analysis" col="4">
|
||||
<field name="from_date"/>
|
||||
<field name="to_date"/>
|
||||
<label string="(Keep empty to open the current situation)" colspan="4"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="analytic_account_chart_open_window" string="Open Charts" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -32,7 +32,7 @@ import account_print_invoice
|
|||
import account_print_overdue
|
||||
import account_aged_partner_balance
|
||||
#import tax_report
|
||||
import account_tax_report
|
||||
import report_vat
|
||||
import account_invoice_report
|
||||
import account_report
|
||||
import account_entries_report
|
||||
|
|
|
@ -28,11 +28,6 @@ class analytic_entries_report(osv.osv):
|
|||
_auto = False
|
||||
_columns = {
|
||||
'date': fields.date('Date', readonly=True),
|
||||
'year': fields.char('Year', size=4, readonly=True),
|
||||
'day': fields.char('Day', size=128, readonly=True),
|
||||
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
|
||||
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
|
||||
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
|
||||
'user_id': fields.many2one('res.users', 'User',readonly=True),
|
||||
'name': fields.char('Description', size=64, readonly=True),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
|
@ -56,9 +51,6 @@ class analytic_entries_report(osv.osv):
|
|||
min(a.id) as id,
|
||||
count(distinct a.id) as nbr,
|
||||
a.date as date,
|
||||
to_char(a.date, 'YYYY') as year,
|
||||
to_char(a.date, 'MM') as month,
|
||||
to_char(a.date, 'YYYY-MM-DD') as day,
|
||||
a.user_id as user_id,
|
||||
a.name as name,
|
||||
analytic.partner_id as partner_id,
|
||||
|
|
|
@ -1,38 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_analytic_entries_report_tree" model="ir.ui.view">
|
||||
<field name="name">analytic.entries.report.tree</field>
|
||||
<field name="model">analytic.entries.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Analytic Entries Analysis" create="false">
|
||||
<field name="date" invisible="1"/>
|
||||
<field name="year" invisible="1"/>
|
||||
<field name="day" invisible="1"/>
|
||||
<field name="month" invisible="1"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="account_id" invisible="1" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="general_account_id" invisible="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
<field name="product_id" invisible="1"/>
|
||||
<field name="product_uom_id" invisible="1"/>
|
||||
<field name="nbr" sum="Entries"/>
|
||||
<field name="unit_amount" sum="Quantity"/>
|
||||
<field name="amount" sum="Amount"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_analytic_entries_report_search" model="ir.ui.view">
|
||||
<field name="name">analytic.entries.report.search</field>
|
||||
<field name="model">analytic.entries.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Analytic Entries Analysis">
|
||||
<field name="day" string="Day"/>
|
||||
<field name="date"/>
|
||||
<filter string="My Entries" icon="terp-personal" domain="[('user_id','=',uid)]" help="My Entries"/>
|
||||
<field name="account_id" groups="analytic.group_analytic_accounting"/>
|
||||
|
@ -47,9 +20,9 @@
|
|||
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
|
||||
<filter string="Product Unit of Measure" icon="terp-mrp" context="{'group_by':'product_uom_id'}"/>
|
||||
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}"/>
|
||||
<filter string="Month" name="Month" icon="terp-go-month" context="{'group_by':'month'}"/>
|
||||
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}"/>
|
||||
<filter string="Date (day)" icon="terp-go-today" context="{'group_by':'date:day'}"/>
|
||||
<filter string="Date (month)" name="Month" icon="terp-go-month" context="{'group_by':'date:month'}"/>
|
||||
<filter string="Date (year)" icon="terp-go-year" context="{'group_by':'date:year'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -58,10 +31,11 @@
|
|||
<field name="name">account.analytic.entries.graph</field>
|
||||
<field name="model">analytic.entries.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Analytic Entries Analysis" type="bar">
|
||||
<field name="user_id"/>
|
||||
<field name="unit_amount" operator="+"/>
|
||||
<field name="amount" operator="+"/>
|
||||
<graph string="Analytic Entries Analysis" type="pivot">
|
||||
<field name="user_id" type="row"/>
|
||||
<field name="nbr" type="measure"/>
|
||||
<field name="unit_amount" type="measure"/>
|
||||
<field name="amount" type="measure"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -69,7 +43,7 @@
|
|||
<field name="name">Analytic Entries Analysis</field>
|
||||
<field name="res_model">analytic.entries.report</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="context">{'search_default_year':1,'search_default_month':1, 'group_by_no_leaf':1, 'search_default_Account':1, 'search_default_Month':1, 'group_by':[]}</field>
|
||||
<field name="search_view_id" ref="view_analytic_entries_report_search"/>
|
||||
<field name="help">From this view, have an analysis of your different analytic entries following the analytic account you defined matching your business need. Use the tool search to analyse information about analytic entries generated in the system.</field>
|
||||
|
|
|
@ -170,6 +170,7 @@
|
|||
<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_Centre_7" fontName="Helvetica" fontSize="7.0" leading="9" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue