2010-01-06 15:24:08 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
##############################################################################
|
|
|
|
#
|
|
|
|
# OpenERP, Open Source Management Solution
|
|
|
|
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
|
|
|
#
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU Affero General Public License as
|
|
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
|
|
# License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU Affero General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
##############################################################################
|
2010-08-13 04:12:51 +00:00
|
|
|
|
2010-04-30 06:13:14 +00:00
|
|
|
import time
|
|
|
|
import datetime
|
|
|
|
from dateutil.relativedelta import relativedelta
|
2010-06-18 07:23:59 +00:00
|
|
|
from os.path import join as opj
|
2010-04-30 06:13:14 +00:00
|
|
|
from operator import itemgetter
|
2010-08-13 04:12:51 +00:00
|
|
|
|
2010-06-18 07:23:59 +00:00
|
|
|
from tools.translate import _
|
2010-01-06 15:24:08 +00:00
|
|
|
from osv import fields, osv
|
[imp] account, base_setup: move chart of accounts selection from base_setup installer to account's
Also remove it from account's config item as it's redundant
Rationale: account can be installed due to dependency chains, not just
direct installation from base_setup: project, stock, purchase and
profile_auction all depend on account, mrp depends on stock which
depends on account, so from base_setup's installer alone there are 5
different ways to end up with account installed and need to configure
charts of accounts.
Therefore having chart of accounts config in base_setup's installer is
dumb (as we need a second one anyway), and since it's (in a way) a
problem of module installation, the most coherent way is to move it to
account/installer.py, and remove it from the config screen where it
was (which becomes redundant).
Made it required, because it was required in the config item, not sure
it's actually mandatory to install a chart of accounts but whatever.
bzr revid: xmo@tinyerp.com-20100126140830-h4c7hlvmzzos69ls
2010-01-26 14:08:30 +00:00
|
|
|
import netsvc
|
2010-05-11 09:40:59 +00:00
|
|
|
import tools
|
2010-01-06 15:24:08 +00:00
|
|
|
|
|
|
|
class account_installer(osv.osv_memory):
|
|
|
|
_name = 'account.installer'
|
|
|
|
_inherit = 'res.config.installer'
|
|
|
|
|
2010-05-12 14:07:19 +00:00
|
|
|
def _get_default_accounts(self, cr, uid, context=None):
|
2010-07-23 10:46:25 +00:00
|
|
|
accounts = [{'acc_name':'Current','account_type':'bank'},
|
|
|
|
{'acc_name':'Deposit','account_type':'bank'},
|
|
|
|
{'acc_name':'Cash','account_type':'cash'}]
|
2010-05-12 14:07:19 +00:00
|
|
|
return accounts
|
|
|
|
|
[imp] account, base_setup: move chart of accounts selection from base_setup installer to account's
Also remove it from account's config item as it's redundant
Rationale: account can be installed due to dependency chains, not just
direct installation from base_setup: project, stock, purchase and
profile_auction all depend on account, mrp depends on stock which
depends on account, so from base_setup's installer alone there are 5
different ways to end up with account installed and need to configure
charts of accounts.
Therefore having chart of accounts config in base_setup's installer is
dumb (as we need a second one anyway), and since it's (in a way) a
problem of module installation, the most coherent way is to move it to
account/installer.py, and remove it from the config screen where it
was (which becomes redundant).
Made it required, because it was required in the config item, not sure
it's actually mandatory to install a chart of accounts but whatever.
bzr revid: xmo@tinyerp.com-20100126140830-h4c7hlvmzzos69ls
2010-01-26 14:08:30 +00:00
|
|
|
def _get_charts(self, cr, uid, context=None):
|
|
|
|
modules = self.pool.get('ir.module.module')
|
|
|
|
ids = modules.search(cr, uid, [('category_id','=','Account Charts')])
|
2010-04-30 06:13:14 +00:00
|
|
|
charts = list(
|
[imp] account, base_setup: move chart of accounts selection from base_setup installer to account's
Also remove it from account's config item as it's redundant
Rationale: account can be installed due to dependency chains, not just
direct installation from base_setup: project, stock, purchase and
profile_auction all depend on account, mrp depends on stock which
depends on account, so from base_setup's installer alone there are 5
different ways to end up with account installed and need to configure
charts of accounts.
Therefore having chart of accounts config in base_setup's installer is
dumb (as we need a second one anyway), and since it's (in a way) a
problem of module installation, the most coherent way is to move it to
account/installer.py, and remove it from the config screen where it
was (which becomes redundant).
Made it required, because it was required in the config item, not sure
it's actually mandatory to install a chart of accounts but whatever.
bzr revid: xmo@tinyerp.com-20100126140830-h4c7hlvmzzos69ls
2010-01-26 14:08:30 +00:00
|
|
|
sorted(((m.name, m.shortdesc)
|
|
|
|
for m in modules.browse(cr, uid, ids)),
|
|
|
|
key=itemgetter(1)))
|
2010-05-13 11:50:52 +00:00
|
|
|
charts.insert(0,('configurable','Generic Chart Of Account'))
|
2010-04-30 06:13:14 +00:00
|
|
|
return charts
|
[imp] account, base_setup: move chart of accounts selection from base_setup installer to account's
Also remove it from account's config item as it's redundant
Rationale: account can be installed due to dependency chains, not just
direct installation from base_setup: project, stock, purchase and
profile_auction all depend on account, mrp depends on stock which
depends on account, so from base_setup's installer alone there are 5
different ways to end up with account installed and need to configure
charts of accounts.
Therefore having chart of accounts config in base_setup's installer is
dumb (as we need a second one anyway), and since it's (in a way) a
problem of module installation, the most coherent way is to move it to
account/installer.py, and remove it from the config screen where it
was (which becomes redundant).
Made it required, because it was required in the config item, not sure
it's actually mandatory to install a chart of accounts but whatever.
bzr revid: xmo@tinyerp.com-20100126140830-h4c7hlvmzzos69ls
2010-01-26 14:08:30 +00:00
|
|
|
|
2010-01-06 15:24:08 +00:00
|
|
|
_columns = {
|
|
|
|
# Accounting
|
[imp] account, base_setup: move chart of accounts selection from base_setup installer to account's
Also remove it from account's config item as it's redundant
Rationale: account can be installed due to dependency chains, not just
direct installation from base_setup: project, stock, purchase and
profile_auction all depend on account, mrp depends on stock which
depends on account, so from base_setup's installer alone there are 5
different ways to end up with account installed and need to configure
charts of accounts.
Therefore having chart of accounts config in base_setup's installer is
dumb (as we need a second one anyway), and since it's (in a way) a
problem of module installation, the most coherent way is to move it to
account/installer.py, and remove it from the config screen where it
was (which becomes redundant).
Made it required, because it was required in the config item, not sure
it's actually mandatory to install a chart of accounts but whatever.
bzr revid: xmo@tinyerp.com-20100126140830-h4c7hlvmzzos69ls
2010-01-26 14:08:30 +00:00
|
|
|
'charts':fields.selection(_get_charts, 'Chart of Accounts',
|
2010-09-01 12:26:56 +00:00
|
|
|
required=True,
|
[imp] account, base_setup: move chart of accounts selection from base_setup installer to account's
Also remove it from account's config item as it's redundant
Rationale: account can be installed due to dependency chains, not just
direct installation from base_setup: project, stock, purchase and
profile_auction all depend on account, mrp depends on stock which
depends on account, so from base_setup's installer alone there are 5
different ways to end up with account installed and need to configure
charts of accounts.
Therefore having chart of accounts config in base_setup's installer is
dumb (as we need a second one anyway), and since it's (in a way) a
problem of module installation, the most coherent way is to move it to
account/installer.py, and remove it from the config screen where it
was (which becomes redundant).
Made it required, because it was required in the config item, not sure
it's actually mandatory to install a chart of accounts but whatever.
bzr revid: xmo@tinyerp.com-20100126140830-h4c7hlvmzzos69ls
2010-01-26 14:08:30 +00:00
|
|
|
help="Installs localized accounting charts to match as closely as "
|
|
|
|
"possible the accounting needs of your company based on your "
|
|
|
|
"country."),
|
2010-04-30 06:13:14 +00:00
|
|
|
'date_start': fields.date('Start Date', required=True),
|
|
|
|
'date_stop': fields.date('End Date', required=True),
|
2010-05-03 10:28:01 +00:00
|
|
|
'period':fields.selection([('month','Monthly'), ('3months','3 Monthly')],
|
2010-04-30 06:13:14 +00:00
|
|
|
'Periods', required=True),
|
2010-10-10 17:32:39 +00:00
|
|
|
'bank_accounts_id': fields.one2many('account.bank.accounts.wizard', 'bank_account_id', 'Your Bank and Cash Accounts',required=True),
|
2010-05-05 04:53:49 +00:00
|
|
|
'sale_tax':fields.float('Sale Tax(%)'),
|
2010-08-20 06:58:03 +00:00
|
|
|
'purchase_tax':fields.float('Purchase Tax(%)'),
|
|
|
|
'company_id': fields.many2one('res.company', 'Company'),
|
2010-07-30 13:17:47 +00:00
|
|
|
}
|
2010-08-20 06:58:03 +00:00
|
|
|
|
2010-09-23 05:47:31 +00:00
|
|
|
def _default_company(self, cr, uid, context=None):
|
2010-08-20 06:58:03 +00:00
|
|
|
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
|
|
|
if user.company_id:
|
|
|
|
return user.company_id.id
|
|
|
|
return False
|
|
|
|
|
2010-09-23 05:47:31 +00:00
|
|
|
def _get_default_charts(self, cr, uid, context=None):
|
2010-09-14 05:57:48 +00:00
|
|
|
module_name = False
|
|
|
|
company_id = self._default_company(cr, uid, context=context)
|
|
|
|
company = self.pool.get('res.company').browse(cr, uid, company_id)
|
|
|
|
address_id = self.pool.get('res.partner').address_get(cr, uid, [company.partner_id.id])
|
|
|
|
if address_id['default']:
|
|
|
|
address = self.pool.get('res.partner.address').browse(cr, uid, address_id['default'])
|
|
|
|
code = address.country_id.code
|
|
|
|
module_name = (code and 'l10n_' + code.lower()) or False
|
|
|
|
if module_name:
|
|
|
|
module_id = self.pool.get('ir.module.module').search(cr, uid, [('name', '=', module_name)])
|
|
|
|
if module_id:
|
|
|
|
return module_name
|
|
|
|
return 'configurable'
|
|
|
|
|
2010-01-06 15:24:08 +00:00
|
|
|
_defaults = {
|
2010-04-30 06:13:14 +00:00
|
|
|
'date_start': lambda *a: time.strftime('%Y-01-01'),
|
|
|
|
'date_stop': lambda *a: time.strftime('%Y-12-31'),
|
2010-09-23 05:47:31 +00:00
|
|
|
'period': lambda *a:'month',
|
|
|
|
'sale_tax': lambda *a:0.0,
|
|
|
|
'purchase_tax': lambda *a:0.0,
|
2010-08-20 06:58:03 +00:00
|
|
|
'company_id': _default_company,
|
2010-09-23 05:47:31 +00:00
|
|
|
'bank_accounts_id': _get_default_accounts,
|
2010-09-14 05:57:48 +00:00
|
|
|
'charts': _get_default_charts
|
2010-07-30 13:17:47 +00:00
|
|
|
}
|
[imp] account, base_setup: move chart of accounts selection from base_setup installer to account's
Also remove it from account's config item as it's redundant
Rationale: account can be installed due to dependency chains, not just
direct installation from base_setup: project, stock, purchase and
profile_auction all depend on account, mrp depends on stock which
depends on account, so from base_setup's installer alone there are 5
different ways to end up with account installed and need to configure
charts of accounts.
Therefore having chart of accounts config in base_setup's installer is
dumb (as we need a second one anyway), and since it's (in a way) a
problem of module installation, the most coherent way is to move it to
account/installer.py, and remove it from the config screen where it
was (which becomes redundant).
Made it required, because it was required in the config item, not sure
it's actually mandatory to install a chart of accounts but whatever.
bzr revid: xmo@tinyerp.com-20100126140830-h4c7hlvmzzos69ls
2010-01-26 14:08:30 +00:00
|
|
|
|
2010-05-13 11:50:52 +00:00
|
|
|
def on_change_tax(self, cr, uid, id, tax):
|
2010-08-30 06:28:31 +00:00
|
|
|
return {'value':{'purchase_tax':tax}}
|
2010-05-13 11:50:52 +00:00
|
|
|
|
2010-09-23 05:47:31 +00:00
|
|
|
def on_change_start_date(self, cr, uid, id, start_date=False):
|
2010-04-30 06:13:14 +00:00
|
|
|
if start_date:
|
|
|
|
start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")
|
|
|
|
end_date = (start_date + relativedelta(months=12)) - relativedelta(days=1)
|
|
|
|
return {'value':{'date_stop':end_date.strftime('%Y-%m-%d')}}
|
|
|
|
return {}
|
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
def generate_configurable_chart(self, cr, uid, ids, context=None):
|
|
|
|
obj_acc = self.pool.get('account.account')
|
|
|
|
obj_acc_tax = self.pool.get('account.tax')
|
|
|
|
obj_journal = self.pool.get('account.journal')
|
|
|
|
obj_sequence = self.pool.get('ir.sequence')
|
|
|
|
obj_acc_template = self.pool.get('account.account.template')
|
|
|
|
obj_fiscal_position_template = self.pool.get('account.fiscal.position.template')
|
|
|
|
obj_fiscal_position = self.pool.get('account.fiscal.position')
|
2010-08-13 04:12:51 +00:00
|
|
|
mod_obj = self.pool.get('ir.model.data')
|
2010-09-24 11:03:20 +00:00
|
|
|
analytic_journal_obj = self.pool.get('account.analytic.journal')
|
2010-08-13 04:12:51 +00:00
|
|
|
|
|
|
|
result = mod_obj._get_id(cr, uid, 'account', 'configurable_chart_template')
|
|
|
|
id = mod_obj.read(cr, uid, [result], ['res_id'])[0]['res_id']
|
|
|
|
obj_multi = self.pool.get('account.chart.template').browse(cr, uid, id)
|
|
|
|
|
2010-10-08 12:49:22 +00:00
|
|
|
record = self.browse(cr, uid, ids, context=context)[0]
|
|
|
|
|
2010-08-13 04:12:51 +00:00
|
|
|
if context is None:
|
|
|
|
context = {}
|
2010-09-23 16:20:14 +00:00
|
|
|
company_id = self.browse(cr, uid, ids, context)[0].company_id
|
2010-05-11 09:40:59 +00:00
|
|
|
seq_journal = True
|
|
|
|
|
|
|
|
# Creating Account
|
|
|
|
obj_acc_root = obj_multi.account_root_id
|
|
|
|
tax_code_root_id = obj_multi.tax_code_root_id.id
|
|
|
|
|
|
|
|
#new code
|
|
|
|
acc_template_ref = {}
|
|
|
|
tax_template_ref = {}
|
|
|
|
tax_code_template_ref = {}
|
|
|
|
todo_dict = {}
|
|
|
|
|
|
|
|
#create all the tax code
|
|
|
|
children_tax_code_template = self.pool.get('account.tax.code.template').search(cr, uid, [('parent_id','child_of',[tax_code_root_id])], order='id')
|
|
|
|
children_tax_code_template.sort()
|
|
|
|
for tax_code_template in self.pool.get('account.tax.code.template').browse(cr, uid, children_tax_code_template):
|
|
|
|
vals={
|
|
|
|
'name': (tax_code_root_id == tax_code_template.id) and company_id.name or tax_code_template.name,
|
|
|
|
'code': tax_code_template.code,
|
|
|
|
'info': tax_code_template.info,
|
|
|
|
'parent_id': tax_code_template.parent_id and ((tax_code_template.parent_id.id in tax_code_template_ref) and tax_code_template_ref[tax_code_template.parent_id.id]) or False,
|
|
|
|
'company_id': company_id.id,
|
|
|
|
'sign': tax_code_template.sign,
|
|
|
|
}
|
2010-06-16 11:51:39 +00:00
|
|
|
new_tax_code = self.pool.get('account.tax.code').create(cr, uid, vals)
|
2010-05-11 09:40:59 +00:00
|
|
|
#recording the new tax code to do the mapping
|
|
|
|
tax_code_template_ref[tax_code_template.id] = new_tax_code
|
|
|
|
|
|
|
|
#create all the tax
|
|
|
|
for tax in obj_multi.tax_template_ids:
|
|
|
|
#create it
|
|
|
|
vals_tax = {
|
|
|
|
'name':tax.name,
|
|
|
|
'sequence': tax.sequence,
|
|
|
|
'amount':tax.amount,
|
|
|
|
'type':tax.type,
|
|
|
|
'applicable_type': tax.applicable_type,
|
|
|
|
'domain':tax.domain,
|
|
|
|
'parent_id': tax.parent_id and ((tax.parent_id.id in tax_template_ref) and tax_template_ref[tax.parent_id.id]) or False,
|
|
|
|
'child_depend': tax.child_depend,
|
|
|
|
'python_compute': tax.python_compute,
|
|
|
|
'python_compute_inv': tax.python_compute_inv,
|
|
|
|
'python_applicable': tax.python_applicable,
|
|
|
|
'base_code_id': tax.base_code_id and ((tax.base_code_id.id in tax_code_template_ref) and tax_code_template_ref[tax.base_code_id.id]) or False,
|
|
|
|
'tax_code_id': tax.tax_code_id and ((tax.tax_code_id.id in tax_code_template_ref) and tax_code_template_ref[tax.tax_code_id.id]) or False,
|
|
|
|
'base_sign': tax.base_sign,
|
|
|
|
'tax_sign': tax.tax_sign,
|
|
|
|
'ref_base_code_id': tax.ref_base_code_id and ((tax.ref_base_code_id.id in tax_code_template_ref) and tax_code_template_ref[tax.ref_base_code_id.id]) or False,
|
|
|
|
'ref_tax_code_id': tax.ref_tax_code_id and ((tax.ref_tax_code_id.id in tax_code_template_ref) and tax_code_template_ref[tax.ref_tax_code_id.id]) or False,
|
|
|
|
'ref_base_sign': tax.ref_base_sign,
|
|
|
|
'ref_tax_sign': tax.ref_tax_sign,
|
|
|
|
'include_base_amount': tax.include_base_amount,
|
|
|
|
'description':tax.description,
|
|
|
|
'company_id': company_id.id,
|
|
|
|
'type_tax_use': tax.type_tax_use
|
|
|
|
}
|
2010-06-16 11:51:39 +00:00
|
|
|
new_tax = obj_acc_tax.create(cr, uid, vals_tax)
|
2010-05-11 09:40:59 +00:00
|
|
|
#as the accounts have not been created yet, we have to wait before filling these fields
|
|
|
|
todo_dict[new_tax] = {
|
|
|
|
'account_collected_id': tax.account_collected_id and tax.account_collected_id.id or False,
|
|
|
|
'account_paid_id': tax.account_paid_id and tax.account_paid_id.id or False,
|
|
|
|
}
|
|
|
|
tax_template_ref[tax.id] = new_tax
|
|
|
|
|
|
|
|
#deactivate the parent_store functionnality on account_account for rapidity purpose
|
|
|
|
self.pool._init = True
|
|
|
|
|
|
|
|
children_acc_template = obj_acc_template.search(cr, uid, [('parent_id','child_of',[obj_acc_root.id]),('nocreate','!=',True)])
|
|
|
|
children_acc_template.sort()
|
|
|
|
for account_template in obj_acc_template.browse(cr, uid, children_acc_template):
|
|
|
|
tax_ids = []
|
|
|
|
for tax in account_template.tax_ids:
|
|
|
|
tax_ids.append(tax_template_ref[tax.id])
|
|
|
|
#create the account_account
|
|
|
|
|
|
|
|
dig = 6
|
|
|
|
code_main = account_template.code and len(account_template.code) or 0
|
|
|
|
code_acc = account_template.code or ''
|
|
|
|
if code_main>0 and code_main<=dig and account_template.type != 'view':
|
|
|
|
code_acc=str(code_acc) + (str('0'*(dig-code_main)))
|
|
|
|
vals={
|
|
|
|
'name': (obj_acc_root.id == account_template.id) and company_id.name or account_template.name,
|
|
|
|
#'sign': account_template.sign,
|
2010-09-23 06:17:36 +00:00
|
|
|
'currency_id': account_template.currency_id and account_template.currency_id.id or False,
|
2010-05-11 09:40:59 +00:00
|
|
|
'code': code_acc,
|
|
|
|
'type': account_template.type,
|
|
|
|
'user_type': account_template.user_type and account_template.user_type.id or False,
|
|
|
|
'reconcile': account_template.reconcile,
|
|
|
|
'shortcut': account_template.shortcut,
|
|
|
|
'note': account_template.note,
|
|
|
|
'parent_id': account_template.parent_id and ((account_template.parent_id.id in acc_template_ref) and acc_template_ref[account_template.parent_id.id]) or False,
|
|
|
|
'tax_ids': [(6,0,tax_ids)],
|
|
|
|
'company_id': company_id.id,
|
|
|
|
}
|
2010-06-16 11:51:39 +00:00
|
|
|
new_account = obj_acc.create(cr, uid, vals)
|
2010-05-11 09:40:59 +00:00
|
|
|
acc_template_ref[account_template.id] = new_account
|
|
|
|
if account_template.name == 'Bank Current Account':
|
2010-09-17 05:46:52 +00:00
|
|
|
b_vals={
|
|
|
|
'name': 'Bank Accounts',
|
|
|
|
'code': '110500',
|
|
|
|
'type': 'view',
|
|
|
|
'user_type': account_template.parent_id.user_type and account_template.user_type.id or False,
|
|
|
|
'shortcut': account_template.shortcut,
|
|
|
|
'note': account_template.note,
|
|
|
|
'parent_id': account_template.parent_id and ((account_template.parent_id.id in acc_template_ref) and acc_template_ref[account_template.parent_id.id]) or False,
|
|
|
|
'tax_ids': [(6,0,tax_ids)],
|
|
|
|
'company_id': company_id.id,
|
|
|
|
}
|
|
|
|
bank_account = obj_acc.create(cr, uid, b_vals)
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-07-08 13:32:41 +00:00
|
|
|
view_id_cash = self.pool.get('account.journal.view').search(cr,uid,[('name','=','Bank/Cash Journal View')])[0] #why fixed name here?
|
|
|
|
view_id_cur = self.pool.get('account.journal.view').search(cr,uid,[('name','=','Bank/Cash Journal (Multi-Currency) View')])[0] #Why Fixed name here?
|
2010-05-11 12:19:50 +00:00
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
cash_result = mod_obj._get_id(cr, uid, 'account', 'conf_account_type_cash')
|
|
|
|
cash_type_id = mod_obj.read(cr, uid, [cash_result], ['res_id'])[0]['res_id']
|
|
|
|
|
|
|
|
bank_result = mod_obj._get_id(cr, uid, 'account', 'conf_account_type_bnk')
|
|
|
|
bank_type_id = mod_obj.read(cr, uid, [bank_result], ['res_id'])[0]['res_id']
|
|
|
|
|
|
|
|
check_result = mod_obj._get_id(cr, uid, 'account', 'conf_account_type_chk')
|
|
|
|
check_type_id = mod_obj.read(cr, uid, [check_result], ['res_id'])[0]['res_id']
|
|
|
|
|
2010-10-08 12:49:22 +00:00
|
|
|
# record = self.browse(cr, uid, ids, context=context)[0]
|
2010-05-11 09:40:59 +00:00
|
|
|
code_cnt = 1
|
2010-05-11 12:19:50 +00:00
|
|
|
vals_seq = {
|
|
|
|
'name': _('Bank Journal '),
|
|
|
|
'code': 'account.journal',
|
2010-10-12 13:25:29 +00:00
|
|
|
'prefix': 'BNK/%(year)s/',
|
2010-08-16 11:18:33 +00:00
|
|
|
'padding': 5
|
2010-05-11 12:19:50 +00:00
|
|
|
}
|
|
|
|
seq_id = obj_sequence.create(cr,uid,vals_seq)
|
|
|
|
|
2010-08-16 11:18:33 +00:00
|
|
|
#create the bank journals
|
2010-09-24 11:03:20 +00:00
|
|
|
analitical_bank_ids = analytic_journal_obj.search(cr,uid,[('type','=','situation')])
|
|
|
|
analitical_journal_bank = analitical_bank_ids and analitical_bank_ids[0] or False
|
2010-05-11 12:19:50 +00:00
|
|
|
vals_journal = {}
|
|
|
|
vals_journal['name']= _('Bank Journal ')
|
|
|
|
vals_journal['code']= _('BNK')
|
|
|
|
vals_journal['sequence_id'] = seq_id
|
2010-09-28 13:24:19 +00:00
|
|
|
vals_journal['type'] = 'bank'
|
2010-09-24 11:03:20 +00:00
|
|
|
vals_journal['analytic_journal_id'] = analitical_journal_bank
|
2010-05-11 12:19:50 +00:00
|
|
|
if vals.get('currency_id', False):
|
|
|
|
vals_journal['view_id'] = view_id_cur
|
|
|
|
vals_journal['currency'] = vals.get('currency_id', False)
|
|
|
|
else:
|
|
|
|
vals_journal['view_id'] = view_id_cash
|
|
|
|
vals_journal['default_credit_account_id'] = new_account
|
|
|
|
vals_journal['default_debit_account_id'] = new_account
|
|
|
|
obj_journal.create(cr,uid,vals_journal)
|
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
for val in record.bank_accounts_id:
|
2010-08-16 11:18:33 +00:00
|
|
|
seq_prefix = None
|
|
|
|
seq_padding = 5
|
|
|
|
if val.account_type == 'cash':
|
|
|
|
type = cash_type_id
|
|
|
|
elif val.account_type == 'bank':
|
|
|
|
type = bank_type_id
|
|
|
|
elif val.account_type == 'check':
|
|
|
|
type = check_type_id
|
2010-08-20 06:58:03 +00:00
|
|
|
else:
|
2010-08-16 11:18:33 +00:00
|
|
|
type = check_type_id
|
|
|
|
seq_padding = None
|
2010-08-20 06:58:03 +00:00
|
|
|
|
2010-05-11 12:19:50 +00:00
|
|
|
vals_bnk = {'name': val.acc_name or '',
|
2010-05-11 09:40:59 +00:00
|
|
|
'currency_id': val.currency_id.id or False,
|
2010-09-17 05:46:52 +00:00
|
|
|
'code': str(110500 + code_cnt),
|
2010-09-15 05:23:35 +00:00
|
|
|
'type': 'liquidity',
|
2010-05-11 09:40:59 +00:00
|
|
|
'user_type': type,
|
2010-09-17 05:46:52 +00:00
|
|
|
'parent_id':bank_account,
|
2010-05-11 09:40:59 +00:00
|
|
|
'company_id': company_id.id }
|
2010-05-11 12:19:50 +00:00
|
|
|
child_bnk_acc = obj_acc.create(cr, uid, vals_bnk)
|
|
|
|
vals_seq_child = {
|
2010-10-12 13:25:29 +00:00
|
|
|
'name': _(vals_bnk['name'] + ' ' + 'Journal'),
|
2010-05-11 12:19:50 +00:00
|
|
|
'code': 'account.journal',
|
2010-10-12 13:25:29 +00:00
|
|
|
'prefix': _((vals_bnk['name'][:3].upper()) + '/%(year)s/'),
|
2010-08-16 11:18:33 +00:00
|
|
|
'padding': seq_padding
|
2010-05-11 12:19:50 +00:00
|
|
|
}
|
|
|
|
seq_id = obj_sequence.create(cr, uid, vals_seq_child)
|
|
|
|
|
|
|
|
#create the bank journal
|
|
|
|
vals_journal = {}
|
|
|
|
vals_journal['name']= vals_bnk['name'] + ' Journal'
|
2010-10-12 13:25:29 +00:00
|
|
|
vals_journal['code']= _(vals_bnk['name'][:3]).upper()
|
2010-05-11 12:19:50 +00:00
|
|
|
vals_journal['sequence_id'] = seq_id
|
|
|
|
vals_journal['type'] = 'cash'
|
|
|
|
if vals.get('currency_id', False):
|
|
|
|
vals_journal['view_id'] = view_id_cur
|
|
|
|
vals_journal['currency'] = vals_bnk.get('currency_id', False)
|
|
|
|
else:
|
|
|
|
vals_journal['view_id'] = view_id_cash
|
|
|
|
vals_journal['default_credit_account_id'] = child_bnk_acc
|
|
|
|
vals_journal['default_debit_account_id'] = child_bnk_acc
|
2010-09-24 11:03:20 +00:00
|
|
|
vals_journal['analytic_journal_id'] = analitical_journal_bank
|
2010-05-11 12:19:50 +00:00
|
|
|
obj_journal.create(cr,uid,vals_journal)
|
2010-05-11 09:40:59 +00:00
|
|
|
code_cnt += 1
|
|
|
|
|
2010-08-16 11:18:33 +00:00
|
|
|
#reactivate the parent_store functionality on account_account
|
2010-05-11 09:40:59 +00:00
|
|
|
self.pool._init = False
|
|
|
|
self.pool.get('account.account')._parent_store_compute(cr)
|
|
|
|
|
|
|
|
for key,value in todo_dict.items():
|
|
|
|
if value['account_collected_id'] or value['account_paid_id']:
|
|
|
|
obj_acc_tax.write(cr, uid, [key], {
|
|
|
|
'account_collected_id': acc_template_ref[value['account_collected_id']],
|
|
|
|
'account_paid_id': acc_template_ref[value['account_paid_id']],
|
|
|
|
})
|
|
|
|
|
2010-07-23 14:07:26 +00:00
|
|
|
# Creating Journals Sales and Purchase
|
2010-05-11 09:40:59 +00:00
|
|
|
vals_journal={}
|
2010-07-30 12:27:12 +00:00
|
|
|
data_id = mod_obj.search(cr, uid, [('model','=','account.journal.view'), ('name','=','account_sp_journal_view')])
|
|
|
|
data = mod_obj.browse(cr, uid, data_id[0])
|
2010-07-23 14:07:26 +00:00
|
|
|
view_id = data.res_id
|
2010-08-13 03:55:27 +00:00
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
seq_id = obj_sequence.search(cr,uid,[('name','=','Account Journal')])[0]
|
|
|
|
|
|
|
|
if seq_journal:
|
2010-08-16 11:18:33 +00:00
|
|
|
seq_sale = {
|
|
|
|
'name': 'Sale Journal',
|
|
|
|
'code': 'account.journal',
|
2010-10-12 13:25:29 +00:00
|
|
|
'prefix': 'SAJ/%(year)s/',
|
2010-08-26 13:45:15 +00:00
|
|
|
'padding': 3
|
2010-08-16 11:18:33 +00:00
|
|
|
}
|
|
|
|
seq_id_sale = obj_sequence.create(cr, uid, seq_sale)
|
|
|
|
seq_purchase = {
|
|
|
|
'name': 'Purchase Journal',
|
|
|
|
'code': 'account.journal',
|
2010-10-12 13:25:29 +00:00
|
|
|
'prefix': 'EXJ/%(year)s/',
|
2010-08-26 13:45:15 +00:00
|
|
|
'padding': 3
|
2010-08-16 11:18:33 +00:00
|
|
|
}
|
|
|
|
seq_id_purchase = obj_sequence.create(cr, uid, seq_purchase)
|
2010-10-12 13:25:29 +00:00
|
|
|
seq_refund_sale = {
|
|
|
|
'name': 'Sales Refund Journal',
|
|
|
|
'code': 'account.journal',
|
|
|
|
'prefix': 'SCNJ/%(year)s/',
|
|
|
|
'padding': 3
|
|
|
|
}
|
|
|
|
seq_id_sale_refund = obj_sequence.create(cr, uid, seq_refund_sale)
|
|
|
|
seq_refund_purchase = {
|
|
|
|
'name': 'Purchase Refund Journal',
|
|
|
|
'code': 'account.journal',
|
|
|
|
'prefix': 'ECNJ/%(year)s/',
|
|
|
|
'padding': 3
|
|
|
|
}
|
|
|
|
seq_id_purchase_refund = obj_sequence.create(cr, uid, seq_refund_purchase)
|
2010-05-11 09:40:59 +00:00
|
|
|
else:
|
|
|
|
seq_id_sale = seq_id
|
|
|
|
seq_id_purchase = seq_id
|
2010-10-12 13:25:29 +00:00
|
|
|
seq_id_sale_refund = seq_id
|
|
|
|
seq_id_purchase_refund = seq_id
|
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
vals_journal['view_id'] = view_id
|
|
|
|
|
|
|
|
#Sales Journal
|
2010-09-24 11:03:20 +00:00
|
|
|
analitical_sale_ids = analytic_journal_obj.search(cr,uid,[('type','=','sale')])
|
|
|
|
analitical_journal_sale = analitical_sale_ids and analitical_sale_ids[0] or False
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
vals_journal['name'] = _('Sales Journal')
|
|
|
|
vals_journal['type'] = 'sale'
|
|
|
|
vals_journal['code'] = _('SAJ')
|
|
|
|
vals_journal['sequence_id'] = seq_id_sale
|
2010-09-24 11:03:20 +00:00
|
|
|
vals_journal['analytic_journal_id'] = analitical_journal_sale
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
|
|
|
|
if obj_multi.property_account_receivable:
|
|
|
|
vals_journal['default_credit_account_id'] = acc_template_ref[obj_multi.property_account_income_categ.id]
|
|
|
|
vals_journal['default_debit_account_id'] = acc_template_ref[obj_multi.property_account_income_categ.id]
|
|
|
|
|
|
|
|
obj_journal.create(cr,uid,vals_journal)
|
|
|
|
|
|
|
|
# Purchase Journal
|
2010-09-24 11:03:20 +00:00
|
|
|
analitical_purchase_ids = analytic_journal_obj.search(cr,uid,[('type','=','purchase')])
|
|
|
|
analitical_journal_purchase = analitical_purchase_ids and analitical_purchase_ids[0] or False
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
vals_journal['name'] = _('Purchase Journal')
|
|
|
|
vals_journal['type'] = 'purchase'
|
|
|
|
vals_journal['code'] = _('EXJ')
|
|
|
|
vals_journal['sequence_id'] = seq_id_purchase
|
2010-09-24 11:03:20 +00:00
|
|
|
vals_journal['analytic_journal_id'] = analitical_journal_purchase
|
2010-05-11 09:40:59 +00:00
|
|
|
|
|
|
|
if obj_multi.property_account_payable:
|
|
|
|
vals_journal['default_credit_account_id'] = acc_template_ref[obj_multi.property_account_expense_categ.id]
|
|
|
|
vals_journal['default_debit_account_id'] = acc_template_ref[obj_multi.property_account_expense_categ.id]
|
|
|
|
|
|
|
|
obj_journal.create(cr,uid,vals_journal)
|
2010-08-20 06:58:03 +00:00
|
|
|
|
2010-08-16 11:18:33 +00:00
|
|
|
# Creating Journals Sales Refund and Purchase Refund
|
|
|
|
vals_journal={}
|
|
|
|
data_id = mod_obj.search(cr, uid, [('model','=','account.journal.view'), ('name','=','account_sp_refund_journal_view')])
|
|
|
|
data = mod_obj.browse(cr, uid, data_id[0])
|
|
|
|
view_id = data.res_id
|
|
|
|
|
|
|
|
vals_journal['view_id'] = view_id
|
|
|
|
|
|
|
|
#Sales Refund Journal
|
|
|
|
vals_journal['name'] = _('Sales Refund Journal')
|
|
|
|
vals_journal['type'] = 'sale_refund'
|
2010-08-31 10:23:26 +00:00
|
|
|
vals_journal['refund_journal'] = True
|
2010-08-16 11:18:33 +00:00
|
|
|
vals_journal['code'] = _('SCNJ')
|
|
|
|
vals_journal['sequence_id'] = seq_id_sale_refund
|
2010-09-24 11:03:20 +00:00
|
|
|
vals_journal['analytic_journal_id'] = analitical_journal_sale
|
2010-05-11 09:40:59 +00:00
|
|
|
|
2010-08-16 11:18:33 +00:00
|
|
|
if obj_multi.property_account_receivable:
|
|
|
|
vals_journal['default_credit_account_id'] = acc_template_ref[obj_multi.property_account_income_categ.id]
|
|
|
|
vals_journal['default_debit_account_id'] = acc_template_ref[obj_multi.property_account_income_categ.id]
|
|
|
|
|
|
|
|
obj_journal.create(cr,uid,vals_journal)
|
|
|
|
|
|
|
|
# Purchase Refund Journal
|
|
|
|
vals_journal['name'] = _('Purchase Refund Journal')
|
|
|
|
vals_journal['type'] = 'purchase_refund'
|
2010-08-31 10:23:26 +00:00
|
|
|
vals_journal['refund_journal'] = True
|
2010-08-16 11:18:33 +00:00
|
|
|
vals_journal['code'] = _('ECNJ')
|
|
|
|
vals_journal['sequence_id'] = seq_id_purchase_refund
|
2010-09-24 11:03:20 +00:00
|
|
|
vals_journal['analytic_journal_id'] = analitical_journal_purchase
|
2010-08-16 11:18:33 +00:00
|
|
|
|
|
|
|
if obj_multi.property_account_payable:
|
|
|
|
vals_journal['default_credit_account_id'] = acc_template_ref[obj_multi.property_account_expense_categ.id]
|
|
|
|
vals_journal['default_debit_account_id'] = acc_template_ref[obj_multi.property_account_expense_categ.id]
|
|
|
|
|
|
|
|
obj_journal.create(cr,uid,vals_journal)
|
2010-08-20 06:58:03 +00:00
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
# Bank Journals
|
2010-07-08 13:32:41 +00:00
|
|
|
view_id_cash = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Bank/Cash Journal View')])[0] #TOFIX: Why put fixed name ?
|
|
|
|
view_id_cur = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Bank/Cash Journal (Multi-Currency) View')])[0] #TOFIX: why put fixed name?
|
2010-05-11 09:40:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
#create the properties
|
|
|
|
property_obj = self.pool.get('ir.property')
|
|
|
|
fields_obj = self.pool.get('ir.model.fields')
|
|
|
|
|
|
|
|
todo_list = [
|
|
|
|
('property_account_receivable','res.partner','account.account'),
|
|
|
|
('property_account_payable','res.partner','account.account'),
|
|
|
|
('property_account_expense_categ','product.category','account.account'),
|
|
|
|
('property_account_income_categ','product.category','account.account'),
|
|
|
|
('property_account_expense','product.template','account.account'),
|
2010-08-13 14:14:06 +00:00
|
|
|
('property_account_income','product.template','account.account'),
|
|
|
|
('property_reserve_and_surplus_account','res.company','account.account'),
|
2010-05-11 09:40:59 +00:00
|
|
|
]
|
2010-08-13 14:14:06 +00:00
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
for record in todo_list:
|
|
|
|
r = []
|
|
|
|
r = property_obj.search(cr, uid, [('name','=', record[0] ),('company_id','=',company_id.id)])
|
|
|
|
account = getattr(obj_multi, record[0])
|
|
|
|
field = fields_obj.search(cr, uid, [('name','=',record[0]),('model','=',record[1]),('relation','=',record[2])])
|
|
|
|
vals = {
|
|
|
|
'name': record[0],
|
|
|
|
'company_id': company_id.id,
|
|
|
|
'fields_id': field[0],
|
|
|
|
'value': account and 'account.account,'+str(acc_template_ref[account.id]) or False,
|
|
|
|
}
|
2010-08-13 14:14:06 +00:00
|
|
|
|
2010-05-11 09:40:59 +00:00
|
|
|
if r:
|
|
|
|
#the property exist: modify it
|
|
|
|
property_obj.write(cr, uid, r, vals)
|
|
|
|
else:
|
|
|
|
#create the property
|
|
|
|
property_obj.create(cr, uid, vals)
|
|
|
|
|
|
|
|
fp_ids = obj_fiscal_position_template.search(cr, uid,[('chart_template_id', '=', obj_multi.id)])
|
|
|
|
|
|
|
|
if fp_ids:
|
|
|
|
for position in obj_fiscal_position_template.browse(cr, uid, fp_ids):
|
|
|
|
|
|
|
|
vals_fp = {
|
2010-10-08 12:49:22 +00:00
|
|
|
'company_id': company_id.id,
|
|
|
|
'name': position.name,
|
2010-05-11 09:40:59 +00:00
|
|
|
}
|
|
|
|
new_fp = obj_fiscal_position.create(cr, uid, vals_fp)
|
|
|
|
|
|
|
|
obj_tax_fp = self.pool.get('account.fiscal.position.tax')
|
|
|
|
obj_ac_fp = self.pool.get('account.fiscal.position.account')
|
|
|
|
|
|
|
|
for tax in position.tax_ids:
|
|
|
|
vals_tax = {
|
2010-10-08 12:49:22 +00:00
|
|
|
'tax_src_id': tax_template_ref[tax.tax_src_id.id],
|
|
|
|
'tax_dest_id': tax.tax_dest_id and tax_template_ref[tax.tax_dest_id.id] or False,
|
|
|
|
'position_id': new_fp,
|
2010-05-11 09:40:59 +00:00
|
|
|
}
|
|
|
|
obj_tax_fp.create(cr, uid, vals_tax)
|
|
|
|
|
|
|
|
for acc in position.account_ids:
|
|
|
|
vals_acc = {
|
2010-10-08 12:49:22 +00:00
|
|
|
'account_src_id': acc_template_ref[acc.account_src_id.id],
|
|
|
|
'account_dest_id': acc_template_ref[acc.account_dest_id.id],
|
|
|
|
'position_id': new_fp,
|
2010-05-11 09:40:59 +00:00
|
|
|
}
|
|
|
|
obj_ac_fp.create(cr, uid, vals_acc)
|
|
|
|
|
2010-04-30 06:13:14 +00:00
|
|
|
def execute(self, cr, uid, ids, context=None):
|
2010-08-13 04:12:51 +00:00
|
|
|
if context is None:
|
|
|
|
context = {}
|
2010-09-08 08:03:49 +00:00
|
|
|
fy_obj = self.pool.get('account.fiscalyear')
|
2010-09-22 12:46:46 +00:00
|
|
|
mod_obj = self.pool.get('ir.model.data')
|
2010-08-14 07:30:47 +00:00
|
|
|
obj_acc = self.pool.get('account.account')
|
2010-09-22 12:46:46 +00:00
|
|
|
obj_tax_code = self.pool.get('account.tax.code')
|
|
|
|
obj_temp_tax_code = self.pool.get('account.tax.code.template')
|
2010-04-30 06:13:14 +00:00
|
|
|
super(account_installer, self).execute(cr, uid, ids, context=context)
|
2010-05-05 04:53:49 +00:00
|
|
|
record = self.browse(cr, uid, ids, context=context)[0]
|
2010-09-23 16:20:14 +00:00
|
|
|
company_id = record.company_id
|
2010-08-13 04:12:51 +00:00
|
|
|
for res in self.read(cr, uid, ids):
|
2010-05-11 09:40:59 +00:00
|
|
|
if record.charts == 'configurable':
|
|
|
|
fp = tools.file_open(opj('account','configurable_account_chart.xml'))
|
|
|
|
tools.convert_xml_import(cr, 'account', fp, {}, 'init',True, None)
|
|
|
|
fp.close()
|
|
|
|
self.generate_configurable_chart(cr, uid, ids, context=context)
|
2010-05-05 04:53:49 +00:00
|
|
|
obj_tax = self.pool.get('account.tax')
|
|
|
|
obj_product = self.pool.get('product.product')
|
|
|
|
ir_values = self.pool.get('ir.values')
|
2010-05-11 09:40:59 +00:00
|
|
|
s_tax = (res.get('sale_tax',0.0))/100
|
|
|
|
p_tax = (res.get('purchase_tax',0.0))/100
|
2010-05-11 11:13:46 +00:00
|
|
|
tax_val = {}
|
|
|
|
default_tax = []
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-09-22 12:46:46 +00:00
|
|
|
pur_temp_tax = mod_obj._get_id(cr, uid, 'account', 'tax_code_base_purchases')
|
|
|
|
pur_temp_tax_id = mod_obj.read(cr, uid, [pur_temp_tax], ['res_id'])[0]['res_id']
|
|
|
|
pur_temp_tax_names = obj_temp_tax_code.read(cr, uid, [pur_temp_tax_id], ['name'])
|
|
|
|
pur_tax_parent_name = pur_temp_tax_names and pur_temp_tax_names[0]['name'] or False
|
|
|
|
pur_taxcode_parent_id = obj_tax_code.search(cr, uid, [('name', 'ilike', pur_tax_parent_name)])
|
|
|
|
if pur_taxcode_parent_id:
|
|
|
|
pur_taxcode_parent_id = pur_taxcode_parent_id[0]
|
|
|
|
else:
|
|
|
|
pur_taxcode_parent_id = False
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-09-22 12:46:46 +00:00
|
|
|
pur_temp_tax_paid = mod_obj._get_id(cr, uid, 'account', 'tax_code_input')
|
|
|
|
pur_temp_tax_paid_id = mod_obj.read(cr, uid, [pur_temp_tax_paid], ['res_id'])[0]['res_id']
|
|
|
|
pur_temp_tax_paid_names = obj_temp_tax_code.read(cr, uid, [pur_temp_tax_paid_id], ['name'])
|
|
|
|
pur_tax_paid_parent_name = pur_temp_tax_names and pur_temp_tax_paid_names[0]['name'] or False
|
|
|
|
pur_taxcode_paid_parent_id = obj_tax_code.search(cr, uid, [('name', 'ilike', pur_tax_paid_parent_name)])
|
|
|
|
if pur_taxcode_paid_parent_id:
|
|
|
|
pur_taxcode_paid_parent_id = pur_taxcode_paid_parent_id[0]
|
|
|
|
else:
|
|
|
|
pur_taxcode_paid_parent_id = False
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-09-22 12:46:46 +00:00
|
|
|
sale_temp_tax = mod_obj._get_id(cr, uid, 'account', 'tax_code_base_sales')
|
|
|
|
sale_temp_tax_id = mod_obj.read(cr, uid, [sale_temp_tax], ['res_id'])[0]['res_id']
|
|
|
|
sale_temp_tax_names = obj_temp_tax_code.read(cr, uid, [sale_temp_tax_id], ['name'])
|
|
|
|
sale_tax_parent_name = sale_temp_tax_names and sale_temp_tax_names[0]['name'] or False
|
|
|
|
sale_taxcode_parent_id = obj_tax_code.search(cr, uid, [('name', 'ilike', sale_tax_parent_name)])
|
|
|
|
if sale_taxcode_parent_id:
|
|
|
|
sale_taxcode_parent_id = sale_taxcode_parent_id[0]
|
|
|
|
else:
|
|
|
|
sale_taxcode_parent_id = False
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-09-22 12:46:46 +00:00
|
|
|
sale_temp_tax_paid = mod_obj._get_id(cr, uid, 'account', 'tax_code_output')
|
|
|
|
sale_temp_tax_paid_id = mod_obj.read(cr, uid, [sale_temp_tax_paid], ['res_id'])[0]['res_id']
|
|
|
|
sale_temp_tax_paid_names = obj_temp_tax_code.read(cr, uid, [sale_temp_tax_paid_id], ['name'])
|
|
|
|
sale_tax_paid_parent_name = sale_temp_tax_paid_names and sale_temp_tax_paid_names[0]['name'] or False
|
|
|
|
sale_taxcode_paid_parent_id = obj_tax_code.search(cr, uid, [('name', 'ilike', sale_tax_paid_parent_name)])
|
|
|
|
if sale_taxcode_paid_parent_id:
|
|
|
|
sale_taxcode_paid_parent_id = sale_taxcode_paid_parent_id[0]
|
|
|
|
else:
|
|
|
|
sale_taxcode_paid_parent_id = False
|
2010-05-13 07:03:39 +00:00
|
|
|
|
2010-05-11 11:13:46 +00:00
|
|
|
if s_tax*100 > 0.0:
|
2010-08-31 09:04:01 +00:00
|
|
|
tax_account_ids = obj_acc.search(cr, uid, [('name','=','Tax Received')], context=context)
|
|
|
|
sales_tax_account_id = tax_account_ids and tax_account_ids[0] or False
|
2010-05-11 12:19:50 +00:00
|
|
|
vals_tax_code = {
|
2010-08-14 07:30:47 +00:00
|
|
|
'name': 'TAX%s%%'%(s_tax*100),
|
|
|
|
'code': 'TAX%s%%'%(s_tax*100),
|
2010-05-11 12:19:50 +00:00
|
|
|
'company_id': company_id.id,
|
|
|
|
'sign': 1,
|
2010-09-22 12:46:46 +00:00
|
|
|
'parent_id': sale_taxcode_parent_id
|
2010-05-11 12:19:50 +00:00
|
|
|
}
|
2010-06-16 11:51:39 +00:00
|
|
|
new_tax_code = self.pool.get('account.tax.code').create(cr, uid, vals_tax_code)
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-09-22 12:46:46 +00:00
|
|
|
vals_paid_tax_code = {
|
2010-09-23 16:01:36 +00:00
|
|
|
'name': 'TAX Received %s%%'%(s_tax*100),
|
|
|
|
'code': 'TAX Received %s%%'%(s_tax*100),
|
2010-09-22 12:46:46 +00:00
|
|
|
'company_id': company_id.id,
|
|
|
|
'sign': 1,
|
|
|
|
'parent_id': sale_taxcode_paid_parent_id
|
|
|
|
}
|
|
|
|
new_paid_tax_code = self.pool.get('account.tax.code').create(cr, uid, vals_paid_tax_code)
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-05-11 11:13:46 +00:00
|
|
|
sales_tax = obj_tax.create(cr, uid,
|
2010-08-14 07:30:47 +00:00
|
|
|
{'name':'TAX%s%%'%(s_tax*100),
|
|
|
|
'description':'TAX%s%%'%(s_tax*100),
|
2010-05-11 12:19:50 +00:00
|
|
|
'amount':s_tax,
|
|
|
|
'base_code_id':new_tax_code,
|
2010-09-22 12:46:46 +00:00
|
|
|
'tax_code_id':new_paid_tax_code,
|
2010-08-31 09:04:01 +00:00
|
|
|
'type_tax_use':'sale',
|
|
|
|
'account_collected_id':sales_tax_account_id,
|
|
|
|
'account_paid_id':sales_tax_account_id
|
2010-05-11 09:40:59 +00:00
|
|
|
})
|
2010-08-31 09:04:01 +00:00
|
|
|
default_account_ids = obj_acc.search(cr, uid, [('name','=','Product Sales')],context=context)
|
|
|
|
if default_account_ids:
|
|
|
|
obj_acc.write(cr, uid, default_account_ids, {'tax_ids':[(6,0,[sales_tax])]})
|
2010-05-11 11:13:46 +00:00
|
|
|
tax_val.update({'taxes_id':[(6,0,[sales_tax])]})
|
|
|
|
default_tax.append(('taxes_id',sales_tax))
|
|
|
|
if p_tax*100 > 0.0:
|
2010-08-31 09:04:01 +00:00
|
|
|
tax_account_ids = obj_acc.search(cr, uid, [('name','=','Tax Paid')], context=context)
|
|
|
|
purchase_tax_account_id = tax_account_ids and tax_account_ids[0] or False
|
2010-05-11 12:19:50 +00:00
|
|
|
vals_tax_code = {
|
2010-08-14 07:30:47 +00:00
|
|
|
'name': 'TAX%s%%'%(p_tax*100),
|
2010-09-23 05:42:09 +00:00
|
|
|
'code': 'TAX%s%%'%(p_tax*100),
|
2010-05-11 12:19:50 +00:00
|
|
|
'company_id': company_id.id,
|
|
|
|
'sign': 1,
|
2010-09-22 12:46:46 +00:00
|
|
|
'parent_id': pur_taxcode_parent_id
|
2010-09-08 08:03:49 +00:00
|
|
|
}
|
2010-06-16 11:51:39 +00:00
|
|
|
new_tax_code = self.pool.get('account.tax.code').create(cr, uid, vals_tax_code)
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-09-22 12:46:46 +00:00
|
|
|
vals_paid_tax_code = {
|
|
|
|
'name': 'TAX Paid %s%%'%(p_tax*100),
|
2010-09-22 15:58:40 +00:00
|
|
|
'code': 'TAX Paid %s%%'%(p_tax*100),
|
2010-09-22 12:46:46 +00:00
|
|
|
'company_id': company_id.id,
|
|
|
|
'sign': 1,
|
|
|
|
'parent_id': pur_taxcode_paid_parent_id
|
|
|
|
}
|
|
|
|
new_paid_tax_code = self.pool.get('account.tax.code').create(cr, uid, vals_paid_tax_code)
|
2010-09-23 05:42:09 +00:00
|
|
|
|
2010-05-11 11:13:46 +00:00
|
|
|
purchase_tax = obj_tax.create(cr, uid,
|
2010-08-14 07:30:47 +00:00
|
|
|
{'name':'TAX%s%%'%(p_tax*100),
|
|
|
|
'description':'TAX%s%%'%(p_tax*100),
|
2010-05-11 12:19:50 +00:00
|
|
|
'amount':p_tax,
|
|
|
|
'base_code_id':new_tax_code,
|
2010-09-22 12:46:46 +00:00
|
|
|
'tax_code_id':new_paid_tax_code,
|
2010-08-31 09:04:01 +00:00
|
|
|
'type_tax_use':'purchase',
|
|
|
|
'account_collected_id':purchase_tax_account_id,
|
|
|
|
'account_paid_id':purchase_tax_account_id
|
2010-05-11 09:40:59 +00:00
|
|
|
})
|
2010-08-31 09:04:01 +00:00
|
|
|
default_account_ids = obj_acc.search(cr, uid, [('name','=','Expenses')], context=context)
|
|
|
|
if default_account_ids:
|
|
|
|
obj_acc.write(cr, uid, default_account_ids, {'tax_ids':[(6,0,[purchase_tax])]})
|
2010-05-11 11:13:46 +00:00
|
|
|
tax_val.update({'supplier_taxes_id':[(6,0,[purchase_tax])]})
|
|
|
|
default_tax.append(('supplier_taxes_id',purchase_tax))
|
2010-10-08 12:49:22 +00:00
|
|
|
if tax_val:
|
2010-06-16 11:51:39 +00:00
|
|
|
product_ids = obj_product.search(cr, uid, [])
|
2010-05-11 11:13:46 +00:00
|
|
|
for product in obj_product.browse(cr, uid, product_ids):
|
|
|
|
obj_product.write(cr, uid, product.id, tax_val)
|
|
|
|
for name, value in default_tax:
|
|
|
|
ir_values.set(cr, uid, key='default', key2=False, name=name, models =[('product.product',False)], value=[value])
|
2010-05-05 04:53:49 +00:00
|
|
|
|
2010-05-03 10:28:01 +00:00
|
|
|
if 'date_start' in res and 'date_stop' in res:
|
2010-09-08 10:43:18 +00:00
|
|
|
f_ids = fy_obj.search(cr, uid, [('date_start', '<=', res['date_start']), ('date_stop', '>=', res['date_stop']), ('company_id','=',res['company_id'])])
|
2010-09-08 09:32:25 +00:00
|
|
|
if not f_ids:
|
|
|
|
name = code = res['date_start'][:4]
|
|
|
|
if int(name) != int(res['date_stop'][:4]):
|
|
|
|
name = res['date_start'][:4] +'-'+ res['date_stop'][:4]
|
|
|
|
code = res['date_start'][2:4] +'-'+ res['date_stop'][2:4]
|
|
|
|
vals = {'name': name,
|
|
|
|
'code': code,
|
|
|
|
'date_start': res['date_start'],
|
|
|
|
'date_stop': res['date_stop'],
|
|
|
|
'company_id': res['company_id']
|
|
|
|
}
|
2010-09-08 10:43:18 +00:00
|
|
|
fiscal_id = fy_obj.create(cr, uid, vals, context=context)
|
2010-09-08 09:32:25 +00:00
|
|
|
if res['period'] == 'month':
|
2010-09-08 10:43:18 +00:00
|
|
|
fy_obj.create_period(cr, uid, [fiscal_id])
|
2010-09-08 09:32:25 +00:00
|
|
|
elif res['period'] == '3months':
|
2010-09-08 10:43:18 +00:00
|
|
|
fy_obj.create_period3(cr, uid, [fiscal_id])
|
2010-08-20 06:58:03 +00:00
|
|
|
|
2010-04-30 06:13:14 +00:00
|
|
|
|
[imp] account, base_setup: move chart of accounts selection from base_setup installer to account's
Also remove it from account's config item as it's redundant
Rationale: account can be installed due to dependency chains, not just
direct installation from base_setup: project, stock, purchase and
profile_auction all depend on account, mrp depends on stock which
depends on account, so from base_setup's installer alone there are 5
different ways to end up with account installed and need to configure
charts of accounts.
Therefore having chart of accounts config in base_setup's installer is
dumb (as we need a second one anyway), and since it's (in a way) a
problem of module installation, the most coherent way is to move it to
account/installer.py, and remove it from the config screen where it
was (which becomes redundant).
Made it required, because it was required in the config item, not sure
it's actually mandatory to install a chart of accounts but whatever.
bzr revid: xmo@tinyerp.com-20100126140830-h4c7hlvmzzos69ls
2010-01-26 14:08:30 +00:00
|
|
|
def modules_to_install(self, cr, uid, ids, context=None):
|
|
|
|
modules = super(account_installer, self).modules_to_install(
|
|
|
|
cr, uid, ids, context=context)
|
|
|
|
chart = self.read(cr, uid, ids, ['charts'],
|
|
|
|
context=context)[0]['charts']
|
|
|
|
self.logger.notifyChannel(
|
|
|
|
'installer', netsvc.LOG_DEBUG,
|
|
|
|
'Installing chart of accounts %s'%chart)
|
|
|
|
return modules | set([chart])
|
|
|
|
|
2010-01-06 15:24:08 +00:00
|
|
|
account_installer()
|
2010-05-05 04:53:49 +00:00
|
|
|
|
|
|
|
class account_bank_accounts_wizard(osv.osv_memory):
|
|
|
|
_name='account.bank.accounts.wizard'
|
|
|
|
|
|
|
|
_columns = {
|
2010-08-13 04:12:51 +00:00
|
|
|
'acc_name': fields.char('Account Name.', size=64, required=True),
|
|
|
|
'bank_account_id': fields.many2one('wizard.multi.charts.accounts', 'Bank Account', required=True),
|
2010-08-27 07:24:46 +00:00
|
|
|
'currency_id': fields.many2one('res.currency', 'Secondary Currency', help="Forces all moves for this account to have this secondary currency."),
|
|
|
|
'account_type': fields.selection([('cash','Cash'),('check','Check'),('bank','Bank')], 'Account Type', size=32),
|
2010-05-05 04:53:49 +00:00
|
|
|
}
|
2010-09-23 06:17:36 +00:00
|
|
|
# _defaults = {
|
|
|
|
# 'currency_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.currency_id.id,
|
|
|
|
# }
|
2010-05-05 04:53:49 +00:00
|
|
|
|
|
|
|
account_bank_accounts_wizard()
|
2010-08-13 03:55:27 +00:00
|
|
|
|
|
|
|
class account_installer_modules(osv.osv_memory):
|
|
|
|
_name = 'account.installer.modules'
|
|
|
|
_inherit = 'res.config.installer'
|
|
|
|
_columns = {
|
|
|
|
# Accounting
|
|
|
|
'account_analytic_plans':fields.boolean('Multiple Analytic Plans',
|
|
|
|
help="Allows invoice lines to impact multiple analytic accounts "
|
|
|
|
"simultaneously."),
|
|
|
|
'account_payment':fields.boolean('Suppliers Payment Management',
|
|
|
|
help="Streamlines invoice payment and creates hooks to plug "
|
|
|
|
"automated payment systems in."),
|
|
|
|
'account_followup':fields.boolean('Followups Management',
|
|
|
|
help="Helps you generate reminder letters for unpaid invoices, "
|
|
|
|
"including multiple levels of reminding and customized "
|
|
|
|
"per-partner policies."),
|
|
|
|
'account_voucher':fields.boolean('Voucher Management',
|
|
|
|
help="Account Voucher module includes all the basic requirements of "
|
2010-09-01 12:26:56 +00:00
|
|
|
"Voucher Entries for Bank, Cash, Sales, Purchase, Expenses, Contra, etc... "),
|
|
|
|
'account_anglo_saxon': fields.boolean('Anglo-Saxon Accounting',
|
|
|
|
help="This module will support the Anglo-Saxons accounting methodology by "
|
|
|
|
"changing the accounting logic with stock transactions."),
|
2010-08-20 18:57:46 +00:00
|
|
|
# 'account_voucher_payment':fields.boolean('Voucher and Reconcile Management',
|
|
|
|
# help="Extension Account Voucher module includes allows to link payment / receipt "
|
|
|
|
# "entries with voucher, also automatically reconcile during the payment and receipt entries."),
|
2010-09-23 05:47:31 +00:00
|
|
|
}
|
2010-08-13 03:55:27 +00:00
|
|
|
|
2010-09-06 05:54:26 +00:00
|
|
|
_defaults = {
|
|
|
|
'account_voucher': True,
|
2010-09-23 05:47:31 +00:00
|
|
|
}
|
|
|
|
|
2010-08-13 03:55:27 +00:00
|
|
|
account_installer_modules()
|
|
|
|
|
2010-09-23 16:01:36 +00:00
|
|
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|