[MERGE] from trunk

bzr revid: rco@openerp.com-20120203133947-ev7o3vz28k39261m
This commit is contained in:
Raphael Collet 2012-02-03 14:39:47 +01:00
commit 3af06d4c3f
6562 changed files with 1159523 additions and 883677 deletions

View File

@ -29,6 +29,7 @@ import account_bank
import account_cash_statement import account_cash_statement
import account_move_line import account_move_line
import account_analytic_line import account_analytic_line
import account_financial_report
import wizard import wizard
import report import report
import product import product

View File

@ -19,11 +19,11 @@
# #
############################################################################## ##############################################################################
{ {
"name" : "Accounting and Financial Management", "name" : "eInvoicing",
"version" : "1.1", "version" : "1.1",
"author" : "OpenERP SA", "author" : "OpenERP SA",
"category": 'Accounting & Finance', "category": 'Accounting & Finance',
'complexity': "normal", 'complexity': "easy",
"description": """ "description": """
Accounting and Financial Management. Accounting and Financial Management.
==================================== ====================================
@ -69,6 +69,7 @@ module named account_voucher.
'wizard/account_period_close_view.xml', 'wizard/account_period_close_view.xml',
'account_view.xml', 'account_view.xml',
'account_report.xml', 'account_report.xml',
'account_financial_report_data.xml',
'wizard/account_report_common_view.xml', 'wizard/account_report_common_view.xml',
'wizard/account_invoice_refund_view.xml', 'wizard/account_invoice_refund_view.xml',
'wizard/account_fiscalyear_close_state.xml', 'wizard/account_fiscalyear_close_state.xml',
@ -104,6 +105,7 @@ module named account_voucher.
'account_invoice_view.xml', 'account_invoice_view.xml',
'partner_view.xml', 'partner_view.xml',
'data/account_data.xml', 'data/account_data.xml',
'data/data_account_type.xml',
'account_invoice_workflow.xml', 'account_invoice_workflow.xml',
'project/project_view.xml', 'project/project_view.xml',
'project/project_report.xml', 'project/project_report.xml',
@ -121,8 +123,6 @@ module named account_voucher.
'ir_sequence_view.xml', 'ir_sequence_view.xml',
'company_view.xml', 'company_view.xml',
'board_account_view.xml', 'board_account_view.xml',
"wizard/account_report_profit_loss_view.xml",
"wizard/account_report_balance_sheet_view.xml",
"edi/invoice_action_data.xml", "edi/invoice_action_data.xml",
"account_bank_view.xml", "account_bank_view.xml",
"account_pre_install.yml" "account_pre_install.yml"
@ -151,7 +151,7 @@ module named account_voucher.
'test/account_fiscalyear_close_state.yml', #last test, as it will definitively close the demo fiscalyear 'test/account_fiscalyear_close_state.yml', #last test, as it will definitively close the demo fiscalyear
], ],
'installable': True, 'installable': True,
'active': False, 'auto_install': False,
'certificate': '0080331923549', 'certificate': '0080331923549',
} }
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

File diff suppressed because it is too large Load Diff

View File

@ -26,6 +26,8 @@ class bank(osv.osv):
_inherit = "res.partner.bank" _inherit = "res.partner.bank"
_columns = { _columns = {
'journal_id': fields.many2one('account.journal', 'Account Journal', help="This journal will be created automatically for this bank account when you save the record"), 'journal_id': fields.many2one('account.journal', 'Account Journal', help="This journal will be created automatically for this bank account when you save the record"),
'currency_id': fields.related('journal_id', 'currency', type="many2one", relation='res.currency', readonly=True,
string="Currency", help="Currency of the related account journal."),
} }
def create(self, cr, uid, data, context={}): def create(self, cr, uid, data, context={}):
result = super(bank, self).create(cr, uid, data, context=context) result = super(bank, self).create(cr, uid, data, context=context)
@ -68,7 +70,6 @@ class bank(osv.osv):
name = self._prepare_name(bank) name = self._prepare_name(bank)
acc = { acc = {
'name': name, 'name': name,
'currency_id': bank.company_id.currency_id.id,
'code': new_code, 'code': new_code,
'type': 'liquidity', 'type': 'liquidity',
'user_type': ref_acc_bank_temp.user_type.id, 'user_type': ref_acc_bank_temp.user_type.id,
@ -99,7 +100,6 @@ class bank(osv.osv):
'type': 'bank', 'type': 'bank',
'company_id': bank.company_id.id, 'company_id': bank.company_id.id,
'analytic_journal_id': False, 'analytic_journal_id': False,
'currency_id': False,
'default_credit_account_id': acc_bank_id, 'default_credit_account_id': acc_bank_id,
'default_debit_account_id': acc_bank_id, 'default_debit_account_id': acc_bank_id,
'view_id': view_id_cash 'view_id': view_id_cash

View File

@ -30,10 +30,10 @@ class account_bank_statement(osv.osv):
def create(self, cr, uid, vals, context=None): def create(self, cr, uid, vals, context=None):
seq = 0 seq = 0
if 'line_ids' in vals: if 'line_ids' in vals:
new_line_ids = []
for line in vals['line_ids']: for line in vals['line_ids']:
seq += 1 seq += 1
line[2]['sequence'] = seq line[2]['sequence'] = seq
vals[seq - 1] = line
return super(account_bank_statement, self).create(cr, uid, vals, context=context) return super(account_bank_statement, self).create(cr, uid, vals, context=context)
def write(self, cr, uid, ids, vals, context=None): def write(self, cr, uid, ids, vals, context=None):
@ -52,8 +52,9 @@ class account_bank_statement(osv.osv):
journal_pool = self.pool.get('account.journal') journal_pool = self.pool.get('account.journal')
journal_type = context.get('journal_type', False) journal_type = context.get('journal_type', False)
journal_id = False journal_id = False
company_id = self.pool.get('res.company')._company_default_get(cr, uid, 'account.bank.statement',context=context)
if journal_type: if journal_type:
ids = journal_pool.search(cr, uid, [('type', '=', journal_type)]) ids = journal_pool.search(cr, uid, [('type', '=', journal_type),('company_id','=',company_id)])
if ids: if ids:
journal_id = ids[0] journal_id = ids[0]
return journal_id return journal_id
@ -128,7 +129,7 @@ class account_bank_statement(osv.osv):
_description = "Bank Statement" _description = "Bank Statement"
_columns = { _columns = {
'name': fields.char('Name', size=64, required=True, states={'draft': [('readonly', False)]}, readonly=True, help='if you give the Name other then /, its created Accounting Entries Move will be with same name as statement name. This allows the statement entries to have the same references than the statement itself'), # readonly for account_cash_statement 'name': fields.char('Name', size=64, required=True, states={'draft': [('readonly', False)]}, readonly=True, help='if you give the Name other then /, its created Accounting Entries Move will be with same name as statement name. This allows the statement entries to have the same references than the statement itself'), # readonly for account_cash_statement
'date': fields.date('Date', required=True, states={'confirm': [('readonly', True)]}), 'date': fields.date('Date', required=True, states={'confirm': [('readonly', True)]}, select=True),
'journal_id': fields.many2one('account.journal', 'Journal', required=True, 'journal_id': fields.many2one('account.journal', 'Journal', required=True,
readonly=True, states={'draft':[('readonly',False)]}), readonly=True, states={'draft':[('readonly',False)]}),
'period_id': fields.many2one('account.period', 'Period', required=True, 'period_id': fields.many2one('account.period', 'Period', required=True,
@ -169,30 +170,31 @@ class account_bank_statement(osv.osv):
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.bank.statement',context=c), 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.bank.statement',context=c),
} }
def onchange_date(self, cr, user, ids, date, context=None): def _check_company_id(self, cr, uid, ids, context=None):
for statement in self.browse(cr, uid, ids, context=context):
if statement.company_id.id != statement.period_id.company_id.id:
return False
return True
_constraints = [
(_check_company_id, 'The journal and period chosen have to belong to the same company.', ['journal_id','period_id']),
]
def onchange_date(self, cr, uid, ids, date, company_id, context=None):
""" """
Returns a dict that contains new values and context Find the correct period to use for the given date and company_id, return it and set it in the context
@param cr: A database cursor
@param user: ID of the user currently logged in
@param date: latest value from user input for field date
@param args: other arguments
@param context: context arguments, like lang, time zone
@return: Returns a dict which contains new values, and context
""" """
res = {} res = {}
period_pool = self.pool.get('account.period') period_pool = self.pool.get('account.period')
if context is None: if context is None:
context = {} context = {}
ctx = context.copy()
pids = period_pool.search(cr, user, [('date_start','<=',date), ('date_stop','>=',date)]) ctx.update({'company_id': company_id})
pids = period_pool.find(cr, uid, dt=date, context=ctx)
if pids: if pids:
res.update({ res.update({'period_id': pids[0]})
'period_id':pids[0] context.update({'period_id': pids[0]})
})
context.update({
'period_id':pids[0]
})
return { return {
'value':res, 'value':res,
@ -297,7 +299,7 @@ class account_bank_statement(osv.osv):
context=context): context=context):
if line.state <> 'valid': if line.state <> 'valid':
raise osv.except_osv(_('Error !'), raise osv.except_osv(_('Error !'),
_('Journal Item "%s" is not valid') % line.name) _('Journal item "%s" is not valid.') % line.name)
# Bank statements will not consider boolean on journal entry_posted # Bank statements will not consider boolean on journal entry_posted
account_move_obj.post(cr, uid, [move_id], context=context) account_move_obj.post(cr, uid, [move_id], context=context)
@ -308,7 +310,7 @@ class account_bank_statement(osv.osv):
def balance_check(self, cr, uid, st_id, journal_type='bank', context=None): def balance_check(self, cr, uid, st_id, journal_type='bank', context=None):
st = self.browse(cr, uid, st_id, context=context) st = self.browse(cr, uid, st_id, context=context)
if not (abs((st.balance_end or 0.0) - st.balance_end_real) < 0.0001): if not ((abs((st.balance_end or 0.0) - st.balance_end_real) < 0.0001) or (abs((st.balance_end or 0.0) - st.balance_end_cash) < 0.0001)):
raise osv.except_osv(_('Error !'), raise osv.except_osv(_('Error !'),
_('The statement balance is incorrect !\nThe expected balance (%.2f) is different than the computed one. (%.2f)') % (st.balance_end_real, st.balance_end)) _('The statement balance is incorrect !\nThe expected balance (%.2f) is different than the computed one. (%.2f)') % (st.balance_end_real, st.balance_end))
return True return True
@ -352,13 +354,16 @@ class account_bank_statement(osv.osv):
for st_line in st.line_ids: for st_line in st.line_ids:
if st_line.analytic_account_id: if st_line.analytic_account_id:
if not st.journal_id.analytic_journal_id: if not st.journal_id.analytic_journal_id:
raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (st.journal_id.name,)) raise osv.except_osv(_('No Analytic Journal !'),_("You have to assign an analytic journal on the '%s' journal!") % (st.journal_id.name,))
if not st_line.amount: if not st_line.amount:
continue continue
st_line_number = self.get_next_st_line_number(cr, uid, st_number, st_line, context) st_line_number = self.get_next_st_line_number(cr, uid, st_number, st_line, context)
self.create_move_from_st_line(cr, uid, st_line.id, company_currency_id, st_line_number, context) self.create_move_from_st_line(cr, uid, st_line.id, company_currency_id, st_line_number, context)
self.write(cr, uid, [st.id], {'name': st_number}, context=context) self.write(cr, uid, [st.id], {
'name': st_number,
'balance_end_real': st.balance_end
}, context=context)
self.log(cr, uid, st.id, _('Statement %s is confirmed, journal items are created.') % (st_number,)) self.log(cr, uid, st.id, _('Statement %s is confirmed, journal items are created.') % (st_number,))
return self.write(cr, uid, ids, {'state':'confirm'}, context=context) return self.write(cr, uid, ids, {'state':'confirm'}, context=context)
@ -382,8 +387,10 @@ class account_bank_statement(osv.osv):
ORDER BY date DESC,id DESC LIMIT 1', (journal_id, 'draft')) ORDER BY date DESC,id DESC LIMIT 1', (journal_id, 'draft'))
res = cr.fetchone() res = cr.fetchone()
balance_start = res and res[0] or 0.0 balance_start = res and res[0] or 0.0
account_id = self.pool.get('account.journal').read(cr, uid, journal_id, ['default_debit_account_id'], context=context)['default_debit_account_id'] journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['default_debit_account_id', 'company_id'], context=context)
return {'value': {'balance_start': balance_start, 'account_id': account_id}} account_id = journal_data['default_debit_account_id']
company_id = journal_data['company_id']
return {'value': {'balance_start': balance_start, 'account_id': account_id, 'company_id': company_id}}
def unlink(self, cr, uid, ids, context=None): def unlink(self, cr, uid, ids, context=None):
stat = self.read(cr, uid, ids, ['state'], context=context) stat = self.read(cr, uid, ids, ['state'], context=context)
@ -471,7 +478,7 @@ class account_bank_statement_line(osv.osv):
'Moves'), 'Moves'),
'ref': fields.char('Reference', size=32), 'ref': fields.char('Reference', size=32),
'note': fields.text('Notes'), 'note': fields.text('Notes'),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of bank statement lines."), 'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of bank statement lines."),
'company_id': fields.related('statement_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True), 'company_id': fields.related('statement_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
} }
_defaults = { _defaults = {

View File

@ -16,12 +16,26 @@
<group name="accounting" col="2" colspan="2" attrs="{'invisible': [('company_id','=', False)]}" groups="base.group_extended"> <group name="accounting" col="2" colspan="2" attrs="{'invisible': [('company_id','=', False)]}" groups="base.group_extended">
<separator string="Accounting Information" colspan="2"/> <separator string="Accounting Information" colspan="2"/>
<field name="journal_id"/> <field name="journal_id"/>
<field name="currency_id"/>
</group> </group>
</group> </group>
</field> </field>
</record> </record>
<record id="view_partner_bank_tree_add_currency" model="ir.ui.view">
<field name="name">Partner Bank Accounts - Add currency on tree</field>
<field name="model">res.partner.bank</field>
<field name="type">tree</field>
<field name="inherit_id" ref="base.view_partner_bank_tree"/>
<field name="arch" type="xml">
<field name="acc_number" position="after">
<field name="currency_id"/>
</field>
</field>
</record>
<record id="action_bank_tree" model="ir.actions.act_window"> <record id="action_bank_tree" model="ir.actions.act_window">
<field name="name">Setup your Bank Accounts</field> <field name="name">Setup your Bank Accounts</field>
<field name="res_model">res.partner.bank</field> <field name="res_model">res.partner.bank</field>

View File

@ -311,7 +311,7 @@ class account_cash_statement(osv.osv):
if journal_type == 'bank': if journal_type == 'bank':
return super(account_cash_statement, self).balance_check(cr, uid, cash_id, journal_type, context) return super(account_cash_statement, self).balance_check(cr, uid, cash_id, journal_type, context)
if not self._equal_balance(cr, uid, cash_id, context): if not self._equal_balance(cr, uid, cash_id, context):
raise osv.except_osv(_('Error !'), _('The closing balance should be the same than the computed balance !')) raise osv.except_osv(_('Error !'), _('The closing balance should be the same than the computed balance!'))
return True return True
def statement_close(self, cr, uid, ids, journal_type='bank', context=None): def statement_close(self, cr, uid, ids, journal_type='bank', context=None):

View File

@ -0,0 +1,135 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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/>.
#
##############################################################################
import time
from datetime import datetime
from dateutil.relativedelta import relativedelta
from operator import itemgetter
import netsvc
import pooler
from osv import fields, osv
import decimal_precision as dp
from tools.translate import _
# ---------------------------------------------------------
# Account Financial Report
# ---------------------------------------------------------
class account_financial_report(osv.osv):
_name = "account.financial.report"
_description = "Account Report"
def _get_level(self, cr, uid, ids, field_name, arg, context=None):
res = {}
for report in self.browse(cr, uid, ids, context=context):
level = 0
if report.parent_id:
level = report.parent_id.level + 1
res[report.id] = level
return res
def _get_children_by_order(self, cr, uid, ids, context=None):
res = []
for id in ids:
res.append(id)
ids2 = self.search(cr, uid, [('parent_id', '=', id)], order='sequence ASC', context=context)
res += self._get_children_by_order(cr, uid, ids2, context=context)
return res
def _get_balance(self, cr, uid, ids, name, args, context=None):
account_obj = self.pool.get('account.account')
res = {}
res_all = {}
for report in self.browse(cr, uid, ids, context=context):
balance = 0.0
if report.id in res_all:
balance = res_all[report.id]
elif report.type == 'accounts':
# it's the sum of balance of the linked accounts
for a in report.account_ids:
balance += a.balance
elif report.type == 'account_type':
# it's the sum of balance of the leaf accounts with such an account type
report_types = [x.id for x in report.account_type_ids]
account_ids = account_obj.search(cr, uid, [('user_type','in', report_types), ('type','!=','view')], context=context)
for a in account_obj.browse(cr, uid, account_ids, context=context):
balance += a.balance
elif report.type == 'account_report' and report.account_report_id:
# it's the amount of the linked report
res2 = self._get_balance(cr, uid, [report.account_report_id.id], 'balance', False, context=context)
res_all.update(res2)
for key, value in res2.items():
balance += value
elif report.type == 'sum':
# it's the sum of balance of the children of this account.report
#for child in report.children_ids:
res2 = self._get_balance(cr, uid, [rec.id for rec in report.children_ids], 'balance', False, context=context)
res_all.update(res2)
for key, value in res2.items():
balance += value
res[report.id] = balance
res_all[report.id] = balance
return res
_columns = {
'name': fields.char('Report Name', size=128, required=True, translate=True),
'parent_id': fields.many2one('account.financial.report', 'Parent'),
'children_ids': fields.one2many('account.financial.report', 'parent_id', 'Account Report'),
'sequence': fields.integer('Sequence'),
'balance': fields.function(_get_balance, 'Balance'),
'level': fields.function(_get_level, string='Level', store=True, type='integer'),
'type': fields.selection([
('sum','View'),
('accounts','Accounts'),
('account_type','Account Type'),
('account_report','Report Value'),
],'Type'),
'account_ids': fields.many2many('account.account', 'account_account_financial_report', 'report_line_id', 'account_id', 'Accounts'),
'account_report_id': fields.many2one('account.financial.report', 'Report Value'),
'account_type_ids': fields.many2many('account.account.type', 'account_account_financial_report_type', 'report_id', 'account_type_id', 'Account Types'),
'sign': fields.selection([(-1, 'Reverse balance sign'), (1, 'Preserve balance sign')], 'Sign on Reports', required=True, help='For accounts that are typically more debited than credited and that you would like to print as negative amounts in your reports, you should reverse the sign of the balance; e.g.: Expense account. The same applies for accounts that are typically more credited than debited and that you would like to print as positive amounts in your reports; e.g.: Income account.'),
'display_detail': fields.selection([
('no_detail','No detail'),
('detail_flat','Display children flat'),
('detail_with_hierarchy','Display children with hierarchy')
], 'Display details'),
'style_overwrite': fields.selection([
(0, 'Automatic formatting'),
(1,'Main Title 1 (bold, underlined)'),
(2,'Title 2 (bold)'),
(3,'Title 3 (bold, smaller)'),
(4,'Normal Text'),
(5,'Italic Text (smaller)'),
(6,'Smallest Text'),
],'Financial Report Style', help="You can set up here the format you want this record to be displayed. If you leave the automatic formatting, it will be computed based on the financial reports hierarchy (auto-computed field 'level')."),
}
_defaults = {
'type': 'sum',
'display_detail': 'detail_flat',
'sign': 1,
'style_overwrite': 0,
}
account_financial_report()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<!--
Financial Reports
-->
<record id="account_financial_report_profitandloss0" model="account.financial.report">
<field name="name">Profit and Loss</field>
<field name="type">sum</field>
</record>
<record id="account_financial_report_income0" model="account.financial.report">
<field name="name">Income</field>
<field name="parent_id" ref="account_financial_report_profitandloss0"/>
<field name="display_detail">detail_with_hierarchy</field>
<field name="type">account_type</field>
</record>
<record id="account_financial_report_expense0" model="account.financial.report">
<field name="name">Expense</field>
<field name="parent_id" ref="account_financial_report_profitandloss0"/>
<field name="display_detail">detail_with_hierarchy</field>
<field name="type">account_type</field>
</record>
<record id="account_financial_report_balancesheet0" model="account.financial.report">
<field name="name">Balance Sheet</field>
<field name="type">sum</field>
</record>
<record id="account_financial_report_assets0" model="account.financial.report">
<field name="name">Assets</field>
<field name="parent_id" ref="account_financial_report_balancesheet0"/>
<field name="display_detail">detail_with_hierarchy</field>
<field name="type">account_type</field>
</record>
<record id="account_financial_report_liabilitysum0" model="account.financial.report">
<field name="name">Liability</field>
<field name="parent_id" ref="account_financial_report_balancesheet0"/>
<field name="display_detail">no_detail</field>
<field name="type">sum</field>
</record>
<record id="account_financial_report_liability0" model="account.financial.report">
<field name="name">Liability</field>
<field name="parent_id" ref="account_financial_report_liabilitysum0"/>
<field name="display_detail">detail_with_hierarchy</field>
<field name="type">account_type</field>
</record>
<record id="account_financial_report_profitloss_toreport0" model="account.financial.report">
<field name="name">Profit (Loss) to report</field>
<field name="parent_id" ref="account_financial_report_liabilitysum0"/>
<field name="display_detail">no_detail</field>
<field name="type">account_report</field>
<field name="account_report_id" ref="account_financial_report_profitandloss0"/>
</record>
</data>
</openerp>

View File

@ -25,7 +25,7 @@
</xpath> </xpath>
<group colspan="8" position="inside"> <group colspan="8" position="inside">
<group colspan="4" width="600"> <group colspan="4" width="600">
<field name="charts"/> <field name="charts"/>
<group colspan="4" groups="account.group_account_user"> <group colspan="4" groups="account.group_account_user">
<separator col="4" colspan="4" string="Configure Fiscal Year"/> <separator col="4" colspan="4" string="Configure Fiscal Year"/>
<field name="has_default_company" invisible="1" /> <field name="has_default_company" invisible="1" />
@ -34,10 +34,6 @@
<field name="date_stop"/> <field name="date_stop"/>
<field name="period" colspan="4"/> <field name="period" colspan="4"/>
</group> </group>
<group colspan="4" attrs="{'invisible':[('charts','!=','configurable')]}">
<field name="sale_tax" on_change="on_change_tax(sale_tax)" attrs="{'required':[('charts','=','configurable')]}"/>
<field name="purchase_tax" groups="base.group_extended"/>
</group>
</group> </group>
</group> </group>
</data> </data>

View File

@ -58,17 +58,19 @@ class account_invoice(osv.osv):
return res and res[0] or False return res and res[0] or False
def _get_currency(self, cr, uid, context=None): def _get_currency(self, cr, uid, context=None):
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, [uid], context=context)[0] res = False
if user.company_id: journal_id = self._get_journal(cr, uid, context=context)
return user.company_id.currency_id.id if journal_id:
return pooler.get_pool(cr.dbname).get('res.currency').search(cr, uid, [('rate','=', 1.0)])[0] journal = self.pool.get('account.journal').browse(cr, uid, journal_id, context=context)
res = journal.currency and journal.currency.id or journal.company_id.currency_id.id
return res
def _get_journal_analytic(self, cr, uid, type_inv, context=None): def _get_journal_analytic(self, cr, uid, type_inv, context=None):
type2journal = {'out_invoice': 'sale', 'in_invoice': 'purchase', 'out_refund': 'sale', 'in_refund': 'purchase'} type2journal = {'out_invoice': 'sale', 'in_invoice': 'purchase', 'out_refund': 'sale', 'in_refund': 'purchase'}
tt = type2journal.get(type_inv, 'sale') tt = type2journal.get(type_inv, 'sale')
result = self.pool.get('account.analytic.journal').search(cr, uid, [('type','=',tt)], context=context) result = self.pool.get('account.analytic.journal').search(cr, uid, [('type','=',tt)], context=context)
if not result: if not result:
raise osv.except_osv(_('No Analytic Journal !'),_("You must define an analytic journal of type '%s' !") % (tt,)) raise osv.except_osv(_('No Analytic Journal !'),_("You must define an analytic journal of type '%s'!") % (tt,))
return result[0] return result[0]
def _get_type(self, cr, uid, context=None): def _get_type(self, cr, uid, context=None):
@ -207,7 +209,7 @@ class account_invoice(osv.osv):
help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed Invoice. \ help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed Invoice. \
\n* The \'Pro-forma\' when invoice is in Pro-forma state,invoice does not have an invoice number. \ \n* The \'Pro-forma\' when invoice is in Pro-forma state,invoice does not have an invoice number. \
\n* The \'Open\' state is used when user create invoice,a invoice number is generated.Its in open state till user does not pay invoice. \ \n* The \'Open\' state is used when user create invoice,a invoice number is generated.Its in open state till user does not pay invoice. \
\n* The \'Paid\' state is set automatically when invoice is paid.\ \n* The \'Paid\' state is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled. \
\n* The \'Cancelled\' state is used when user cancel invoice.'), \n* The \'Cancelled\' state is used when user cancel invoice.'),
'date_invoice': fields.date('Invoice Date', readonly=True, states={'draft':[('readonly',False)]}, select=True, help="Keep empty to use the current date"), 'date_invoice': fields.date('Invoice Date', readonly=True, states={'draft':[('readonly',False)]}, select=True, help="Keep empty to use the current date"),
'date_due': fields.date('Due Date', states={'paid':[('readonly',True)], 'open':[('readonly',True)], 'close':[('readonly',True)]}, select=True, 'date_due': fields.date('Due Date', states={'paid':[('readonly',True)], 'open':[('readonly',True)], 'close':[('readonly',True)]}, select=True,
@ -257,11 +259,11 @@ class account_invoice(osv.osv):
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, None, 50), # Check if we can remove ? 'account.invoice': (lambda self, cr, uid, ids, c={}: ids, None, 50), # Check if we can remove ?
'account.move.line': (_get_invoice_from_line, None, 50), 'account.move.line': (_get_invoice_from_line, None, 50),
'account.move.reconcile': (_get_invoice_from_reconcile, None, 50), 'account.move.reconcile': (_get_invoice_from_reconcile, None, 50),
}, help="The Journal Entry of the invoice have been totally reconciled with one or several Journal Entries of payment."), }, help="It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment."),
'partner_bank_id': fields.many2one('res.partner.bank', 'Bank Account', 'partner_bank_id': fields.many2one('res.partner.bank', 'Bank Account',
help='Bank Account Number, Company bank account if Invoice is customer or supplier refund, otherwise Partner bank account number.', readonly=True, states={'draft':[('readonly',False)]}), help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Supplier Refund, otherwise a Partner bank account number.', readonly=True, states={'draft':[('readonly',False)]}),
'move_lines':fields.function(_get_lines, type='many2many', relation='account.move.line', string='Entry Lines'), 'move_lines':fields.function(_get_lines, type='many2many', relation='account.move.line', string='Entry Lines'),
'residual': fields.function(_amount_residual, digits_compute=dp.get_precision('Account'), string='Residual', 'residual': fields.function(_amount_residual, digits_compute=dp.get_precision('Account'), string='Balance',
store={ store={
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line','move_id'], 50), 'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line','move_id'], 50),
'account.invoice.tax': (_get_invoice_tax, None, 50), 'account.invoice.tax': (_get_invoice_tax, None, 50),
@ -316,6 +318,15 @@ class account_invoice(osv.osv):
res['fields'][field]['selection'] = journal_select res['fields'][field]['selection'] = journal_select
doc = etree.XML(res['arch']) doc = etree.XML(res['arch'])
if context.get('type', False):
for node in doc.xpath("//field[@name='partner_bank_id']"):
if context['type'] == 'in_refund':
node.set('domain', "[('partner_id.ref_companies', 'in', [company_id])]")
elif context['type'] == 'out_refund':
node.set('domain', "[('partner_id', '=', partner_id)]")
res['arch'] = etree.tostring(doc)
if view_type == 'search': if view_type == 'search':
if context.get('type', 'in_invoice') in ('out_invoice', 'out_refund'): if context.get('type', 'in_invoice') in ('out_invoice', 'out_refund'):
for node in doc.xpath("//group[@name='extended filter']"): for node in doc.xpath("//group[@name='extended filter']"):
@ -414,7 +425,7 @@ class account_invoice(osv.osv):
pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False
if not rec_res_id and not pay_res_id: if not rec_res_id and not pay_res_id:
raise osv.except_osv(_('Configuration Error !'), raise osv.except_osv(_('Configuration Error !'),
_('Can not find account chart for this company, Please Create account.')) _('Can not find a chart of accounts for this company, you should create one.'))
account_obj = self.pool.get('account.account') account_obj = self.pool.get('account.account')
rec_obj_acc = account_obj.browse(cr, uid, [rec_res_id]) rec_obj_acc = account_obj.browse(cr, uid, [rec_res_id])
pay_obj_acc = account_obj.browse(cr, uid, [pay_res_id]) pay_obj_acc = account_obj.browse(cr, uid, [pay_res_id])
@ -455,10 +466,10 @@ class account_invoice(osv.osv):
result['value'].update(to_update['value']) result['value'].update(to_update['value'])
return result return result
def onchange_journal_id(self, cr, uid, ids, journal_id=False): def onchange_journal_id(self, cr, uid, ids, journal_id=False, context=None):
result = {} result = {}
if journal_id: if journal_id:
journal = self.pool.get('account.journal').browse(cr, uid, journal_id) journal = self.pool.get('account.journal').browse(cr, uid, journal_id, context=context)
currency_id = journal.currency and journal.currency.id or journal.company_id.currency_id.id currency_id = journal.currency and journal.currency.id or journal.company_id.currency_id.id
result = {'value': { result = {'value': {
'currency_id': currency_id, 'currency_id': currency_id,
@ -481,7 +492,7 @@ class account_invoice(osv.osv):
pterm_list.sort() pterm_list.sort()
res = {'value':{'date_due': pterm_list[-1]}} res = {'value':{'date_due': pterm_list[-1]}}
else: else:
raise osv.except_osv(_('Data Insufficient !'), _('The Payment Term of Supplier does not have Payment Term Lines(Computation) defined !')) raise osv.except_osv(_('Data Insufficient !'), _('The payment term of supplier does not have a payment term line!'))
return res return res
def onchange_invoice_line(self, cr, uid, ids, lines): def onchange_invoice_line(self, cr, uid, ids, lines):
@ -514,7 +525,7 @@ class account_invoice(osv.osv):
pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False
if not rec_res_id and not pay_res_id: if not rec_res_id and not pay_res_id:
raise osv.except_osv(_('Configuration Error !'), raise osv.except_osv(_('Configuration Error !'),
_('Can not find account chart for this company, Please Create account.')) _('Can not find a chart of account, you should create one from the configuration of the accounting menu.'))
if type in ('out_invoice', 'out_refund'): if type in ('out_invoice', 'out_refund'):
acc_id = rec_res_id acc_id = rec_res_id
else: else:
@ -529,7 +540,7 @@ class account_invoice(osv.osv):
result_id = account_obj.search(cr, uid, [('name','=',line.account_id.name),('company_id','=',company_id)]) result_id = account_obj.search(cr, uid, [('name','=',line.account_id.name),('company_id','=',company_id)])
if not result_id: if not result_id:
raise osv.except_osv(_('Configuration Error !'), raise osv.except_osv(_('Configuration Error !'),
_('Can not find account chart for this company in invoice line account, Please Create account.')) _('Can not find a chart of account, you should create one from the configuration of the accounting menu.'))
inv_line_obj.write(cr, uid, [line.id], {'account_id': result_id[-1]}) inv_line_obj.write(cr, uid, [line.id], {'account_id': result_id[-1]})
else: else:
if invoice_line: if invoice_line:
@ -563,18 +574,6 @@ class account_invoice(osv.osv):
else: else:
journal_ids = obj_journal.search(cr, uid, []) journal_ids = obj_journal.search(cr, uid, [])
if currency_id and company_id:
currency = self.pool.get('res.currency').browse(cr, uid, currency_id)
if currency.company_id and currency.company_id.id != company_id:
val['currency_id'] = False
else:
val['currency_id'] = currency.id
if company_id:
company = self.pool.get('res.company').browse(cr, uid, company_id)
if company.currency_id.company_id and company.currency_id.company_id.id != company_id:
val['currency_id'] = False
else:
val['currency_id'] = company.currency_id.id
return {'value': val, 'domain': dom} return {'value': val, 'domain': dom}
# go from canceled state to draft state # go from canceled state to draft state
@ -610,15 +609,15 @@ class account_invoice(osv.osv):
res[r[0]].append( r[1] ) res[r[0]].append( r[1] )
return res return res
def copy(self, cr, uid, id, default={}, context=None): def copy(self, cr, uid, id, default=None, context=None):
if context is None: default = default or {}
context = {}
default.update({ default.update({
'state':'draft', 'state':'draft',
'number':False, 'number':False,
'move_id':False, 'move_id':False,
'move_name':False, 'move_name':False,
'internal_number': False, 'internal_number': False,
'period_id': False,
}) })
if 'date_invoice' not in default: if 'date_invoice' not in default:
default.update({ default.update({
@ -730,13 +729,13 @@ class account_invoice(osv.osv):
key = (tax.tax_code_id.id, tax.base_code_id.id, tax.account_id.id) key = (tax.tax_code_id.id, tax.base_code_id.id, tax.account_id.id)
tax_key.append(key) tax_key.append(key)
if not key in compute_taxes: if not key in compute_taxes:
raise osv.except_osv(_('Warning !'), _('Global taxes defined, but are not in invoice lines !')) raise osv.except_osv(_('Warning !'), _('Global taxes defined, but they are not in invoice lines !'))
base = compute_taxes[key]['base'] base = compute_taxes[key]['base']
if abs(base - tax.base) > inv.company_id.currency_id.rounding: if abs(base - tax.base) > inv.company_id.currency_id.rounding:
raise osv.except_osv(_('Warning !'), _('Tax base different !\nClick on compute to update tax base')) raise osv.except_osv(_('Warning !'), _('Tax base different!\nClick on compute to update the tax base.'))
for key in compute_taxes: for key in compute_taxes:
if not key in tax_key: if not key in tax_key:
raise osv.except_osv(_('Warning !'), _('Taxes missing !')) raise osv.except_osv(_('Warning !'), _('Taxes are missing!\nClick on compute button.'))
def compute_invoice_totals(self, cr, uid, inv, company_currency, ref, invoice_move_lines): def compute_invoice_totals(self, cr, uid, inv, company_currency, ref, invoice_move_lines):
total = 0 total = 0
@ -794,34 +793,39 @@ class account_invoice(osv.osv):
line.append((0,0,val)) line.append((0,0,val))
return line return line
def action_move_create(self, cr, uid, ids, *args): def action_move_create(self, cr, uid, ids, context=None):
"""Creates invoice related analytics and financial move lines""" """Creates invoice related analytics and financial move lines"""
ait_obj = self.pool.get('account.invoice.tax') ait_obj = self.pool.get('account.invoice.tax')
cur_obj = self.pool.get('res.currency') cur_obj = self.pool.get('res.currency')
period_obj = self.pool.get('account.period') period_obj = self.pool.get('account.period')
context = {} payment_term_obj = self.pool.get('account.payment.term')
for inv in self.browse(cr, uid, ids): journal_obj = self.pool.get('account.journal')
move_obj = self.pool.get('account.move')
if context is None:
context = {}
for inv in self.browse(cr, uid, ids, context=context):
if not inv.journal_id.sequence_id: if not inv.journal_id.sequence_id:
raise osv.except_osv(_('Error !'), _('Please define sequence on invoice journal')) raise osv.except_osv(_('Error !'), _('Please define sequence on the journal related to this invoice.'))
if not inv.invoice_line: if not inv.invoice_line:
raise osv.except_osv(_('No Invoice Lines !'), _('Please create some invoice lines.')) raise osv.except_osv(_('No Invoice Lines !'), _('Please create some invoice lines.'))
if inv.move_id: if inv.move_id:
continue continue
ctx = context.copy()
ctx.update({'lang': inv.partner_id.lang})
if not inv.date_invoice: if not inv.date_invoice:
self.write(cr, uid, [inv.id], {'date_invoice':time.strftime('%Y-%m-%d')}) self.write(cr, uid, [inv.id], {'date_invoice':time.strftime('%Y-%m-%d')}, context=ctx)
company_currency = inv.company_id.currency_id.id company_currency = inv.company_id.currency_id.id
# create the analytical lines # create the analytical lines
# one move line per invoice line # one move line per invoice line
iml = self._get_analytic_lines(cr, uid, inv.id) iml = self._get_analytic_lines(cr, uid, inv.id, context=ctx)
# check if taxes are all computed # check if taxes are all computed
ctx = context.copy()
ctx.update({'lang': inv.partner_id.lang})
compute_taxes = ait_obj.compute(cr, uid, inv.id, context=ctx) compute_taxes = ait_obj.compute(cr, uid, inv.id, context=ctx)
self.check_tax_lines(cr, uid, inv, compute_taxes, ait_obj) self.check_tax_lines(cr, uid, inv, compute_taxes, ait_obj)
if inv.type in ('in_invoice', 'in_refund') and abs(inv.check_total - inv.amount_total) >= (inv.currency_id.rounding/2.0): # I disabled the check_total feature
raise osv.except_osv(_('Bad total !'), _('Please verify the price of the invoice !\nThe real total does not match the computed total.')) #if inv.type in ('in_invoice', 'in_refund') and abs(inv.check_total - inv.amount_total) >= (inv.currency_id.rounding/2.0):
# raise osv.except_osv(_('Bad total !'), _('Please verify the price of the invoice !\nThe real total does not match the computed total.'))
if inv.payment_term: if inv.payment_term:
total_fixed = total_percent = 0 total_fixed = total_percent = 0
@ -832,7 +836,7 @@ class account_invoice(osv.osv):
total_percent += line.value_amount total_percent += line.value_amount
total_fixed = (total_fixed * 100) / (inv.amount_total or 1.0) total_fixed = (total_fixed * 100) / (inv.amount_total or 1.0)
if (total_fixed + total_percent) > 100: if (total_fixed + total_percent) > 100:
raise osv.except_osv(_('Error !'), _("Can not create the invoice !\nThe related payment term is probably misconfigured as it gives a computed amount greater than the total invoiced amount.")) raise osv.except_osv(_('Error !'), _("Can not create the invoice !\nThe related payment term is probably misconfigured as it gives a computed amount greater than the total invoiced amount. The latest line of your payment term must be of type 'balance' to avoid rounding issues."))
# one move line per tax line # one move line per tax line
iml += ait_obj.move_line_get(cr, uid, inv.id) iml += ait_obj.move_line_get(cr, uid, inv.id)
@ -859,8 +863,8 @@ class account_invoice(osv.osv):
name = inv['name'] or '/' name = inv['name'] or '/'
totlines = False totlines = False
if inv.payment_term: if inv.payment_term:
totlines = self.pool.get('account.payment.term').compute(cr, totlines = payment_term_obj.compute(cr,
uid, inv.payment_term.id, total, inv.date_invoice or False) uid, inv.payment_term.id, total, inv.date_invoice or False, context=ctx)
if totlines: if totlines:
res_amount_currency = total_currency res_amount_currency = total_currency
i = 0 i = 0
@ -906,12 +910,12 @@ class account_invoice(osv.osv):
date = inv.date_invoice or time.strftime('%Y-%m-%d') date = inv.date_invoice or time.strftime('%Y-%m-%d')
part = inv.partner_id.id part = inv.partner_id.id
line = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, part, date, context={})),iml) line = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, part, date, context=ctx)),iml)
line = self.group_lines(cr, uid, iml, line, inv) line = self.group_lines(cr, uid, iml, line, inv)
journal_id = inv.journal_id.id journal_id = inv.journal_id.id
journal = self.pool.get('account.journal').browse(cr, uid, journal_id) journal = journal_obj.browse(cr, uid, journal_id, context=ctx)
if journal.centralisation: if journal.centralisation:
raise osv.except_osv(_('UserError'), raise osv.except_osv(_('UserError'),
_('You cannot create an invoice on a centralised journal. Uncheck the centralised counterpart box in the related journal from the configuration menu.')) _('You cannot create an invoice on a centralised journal. Uncheck the centralised counterpart box in the related journal from the configuration menu.'))
@ -923,7 +927,6 @@ class account_invoice(osv.osv):
'line_id': line, 'line_id': line,
'journal_id': journal_id, 'journal_id': journal_id,
'date': date, 'date': date,
'type': entry_type,
'narration':inv.comment 'narration':inv.comment
} }
period_id = inv.period_id and inv.period_id.id or False period_id = inv.period_id and inv.period_id.id or False
@ -936,13 +939,14 @@ class account_invoice(osv.osv):
for i in line: for i in line:
i[2]['period_id'] = period_id i[2]['period_id'] = period_id
move_id = self.pool.get('account.move').create(cr, uid, move, context=context) move_id = move_obj.create(cr, uid, move, context=ctx)
new_move_name = self.pool.get('account.move').browse(cr, uid, move_id).name new_move_name = move_obj.browse(cr, uid, move_id, context=ctx).name
# make the invoice point to that move # make the invoice point to that move
self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name}) self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name}, context=ctx)
# Pass invoice in context in method post: used if you want to get the same # Pass invoice in context in method post: used if you want to get the same
# account move reference when creating the same invoice after a cancelled one: # account move reference when creating the same invoice after a cancelled one:
self.pool.get('account.move').post(cr, uid, [move_id], context={'invoice':inv}) ctx.update({'invoice':inv})
move_obj.post(cr, uid, [move_id], context=ctx)
self._log_event(cr, uid, ids) self._log_event(cr, uid, ids)
return True return True
@ -1081,7 +1085,8 @@ class account_invoice(osv.osv):
del line['invoice_id'] del line['invoice_id']
for field in ('company_id', 'partner_id', 'account_id', 'product_id', for field in ('company_id', 'partner_id', 'account_id', 'product_id',
'uos_id', 'account_analytic_id', 'tax_code_id', 'base_code_id'): 'uos_id', 'account_analytic_id', 'tax_code_id', 'base_code_id'):
line[field] = line.get(field, False) and line[field][0] if line.get(field):
line[field] = line[field][0]
if 'invoice_line_tax_id' in line: if 'invoice_line_tax_id' in line:
line['invoice_line_tax_id'] = [(6,0, line.get('invoice_line_tax_id', [])) ] line['invoice_line_tax_id'] = [(6,0, line.get('invoice_line_tax_id', [])) ]
return map(lambda x: (0,0,x), lines) return map(lambda x: (0,0,x), lines)
@ -1209,7 +1214,7 @@ class account_invoice(osv.osv):
l2['name'] = name l2['name'] = name
lines = [(0, 0, l1), (0, 0, l2)] lines = [(0, 0, l1), (0, 0, l2)]
move = {'ref': ref, 'line_id': lines, 'journal_id': pay_journal_id, 'period_id': period_id, 'date': date, 'type': entry_type} move = {'ref': ref, 'line_id': lines, 'journal_id': pay_journal_id, 'period_id': period_id, 'date': date}
move_id = self.pool.get('account.move').create(cr, uid, move, context=context) move_id = self.pool.get('account.move').create(cr, uid, move, context=context)
line_ids = [] line_ids = []
@ -1262,7 +1267,7 @@ class account_invoice_line(osv.osv):
def _price_unit_default(self, cr, uid, context=None): def _price_unit_default(self, cr, uid, context=None):
if context is None: if context is None:
context = {} context = {}
if 'check_total' in context: if context.get('check_total', False):
t = context['check_total'] t = context['check_total']
for l in context.get('invoice_line', {}): for l in context.get('invoice_line', {}):
if isinstance(l, (list, tuple)) and len(l) >= 3 and l[2]: if isinstance(l, (list, tuple)) and len(l) >= 3 and l[2]:
@ -1642,12 +1647,7 @@ class res_partner(osv.osv):
} }
def copy(self, cr, uid, id, default=None, context=None): def copy(self, cr, uid, id, default=None, context=None):
if default is None: default = default or {}
default = {}
if context is None:
context = {}
default.update({'invoice_ids' : []}) default.update({'invoice_ids' : []})
return super(res_partner, self).copy(cr, uid, id, default, context) return super(res_partner, self).copy(cr, uid, id, default, context)

View File

@ -120,7 +120,7 @@
<field name="number"/> <field name="number"/>
<field name="partner_id" groups="base.group_user"/> <field name="partner_id" groups="base.group_user"/>
<field name="reference" invisible="1"/> <field name="reference" invisible="1"/>
<field name="name"/> <field name="name" invisible="1"/>
<field name="journal_id" invisible="1"/> <field name="journal_id" invisible="1"/>
<field name="period_id" invisible="1" groups="account.group_account_user"/> <field name="period_id" invisible="1" groups="account.group_account_user"/>
<field name="company_id" groups="base.group_multi_company" widget="selection"/> <field name="company_id" groups="base.group_multi_company" widget="selection"/>
@ -152,8 +152,8 @@
<field name="currency_id" width="50"/> <field name="currency_id" width="50"/>
<button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/> <button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/>
<newline/> <newline/>
<field string="Supplier" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}"/> <field string="Supplier" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" options='{"quick_create": false}' domain="[('supplier', '=', True)]"/>
<field domain="[('partner_id','=',partner_id)]" name="address_invoice_id" context="{'default_partner_id': partner_id}"/> <field domain="[('partner_id','=',partner_id)]" name="address_invoice_id" context="{'default_partner_id': partner_id}" options='{"quick_create": false}'/>
<field name="fiscal_position" groups="base.group_extended" widget="selection"/> <field name="fiscal_position" groups="base.group_extended" widget="selection"/>
<newline/> <newline/>
<field name="date_invoice"/> <field name="date_invoice"/>
@ -168,8 +168,7 @@
<field name="reference_type" nolabel="1" size="0"/> <field name="reference_type" nolabel="1" size="0"/>
<field name="reference" nolabel="1"/> <field name="reference" nolabel="1"/>
<field name="date_due"/> <field name="date_due"/>
<field name="check_total" required="2"/> <field colspan="4" context="{'address_invoice_id': address_invoice_id, 'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False, 'type': type}" name="invoice_line" nolabel="1">
<field colspan="4" default_get="{'check_total': check_total, 'invoice_line': invoice_line, 'address_invoice_id': address_invoice_id, 'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False}" name="invoice_line" context="{'type': type}" nolabel="1">
<tree string="Invoice lines"> <tree string="Invoice lines">
<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.address_invoice_id, parent.currency_id, context, parent.company_id)"/> <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.address_invoice_id, parent.currency_id, context, parent.company_id)"/>
<field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view')]" name="account_id" on_change="onchange_account_id(parent.fiscal_position,account_id)"/> <field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view')]" name="account_id" on_change="onchange_account_id(parent.fiscal_position,account_id)"/>
@ -179,7 +178,7 @@
<field name="price_unit"/> <field name="price_unit"/>
<!-- Removed if subtotal is set --> <!-- Removed if subtotal is set -->
<field name="price_subtotal"/> <field name="price_subtotal"/>
<field name="name"/> <field invisible="True" name="name"/>
<field invisible="True" name="uos_id"/> <field invisible="True" name="uos_id"/>
</tree> </tree>
</field> </field>
@ -257,27 +256,25 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Invoice"> <form string="Invoice">
<group colspan="4" col="8"> <group colspan="4" col="8">
<field name="journal_id" groups="base.group_user" on_change="onchange_journal_id(journal_id)" widget="selection"/> <field name="journal_id" groups="base.group_user" on_change="onchange_journal_id(journal_id, context)" widget="selection"/>
<field name="number"/> <field name="number"/>
<field name="type" invisible="1"/> <field name="type" invisible="1"/>
<field name="currency_id" width="50"/> <field name="currency_id" width="50"/>
<button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/> <button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/>
<newline/> <newline/>
<field string="Customer" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" groups="base.group_user" context="{'search_default_customer': 1}"/> <field string="Customer" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" groups="base.group_user" context="{'search_default_customer': 1}" options='{"quick_create": false}' domain="[('customer', '=', True)]"/>
<field domain="[('partner_id','=',partner_id)]" name="address_invoice_id" context="{'default_partner_id': partner_id}"/> <field domain="[('partner_id','=',partner_id)]" name="address_invoice_id" context="{'default_partner_id': partner_id}" options='{"quick_create": false}'/>
<field name="fiscal_position" groups="base.group_extended" widget="selection"/> <field name="fiscal_position" groups="base.group_extended" widget="selection" options='{"quick_create": false}'/>
<newline/> <newline/>
<field name="date_invoice"/> <field name="date_invoice"/>
<field name="period_id" domain="[('state', '=', 'draft')]" groups="account.group_account_user" widget="selection"/> <field name="period_id" domain="[('state', '=', 'draft')]" groups="account.group_account_user" widget="selection"/>
<group colspan="2" col="1" groups="account.group_account_user"> <field name="payment_term" widget="selection"/>
<label align="0.0" string="(keep empty to use the current period)"/> <newline/>
</group> <field domain="[('company_id', '=', company_id),('type','=', 'receivable')]" name="account_id" groups="account.group_account_user"/>
<field name="name" groups="base.group_extended"/>
</group> </group>
<notebook colspan="4"> <notebook colspan="4">
<page string="Invoice"> <page string="Invoice">
<field domain="[('company_id', '=', company_id),('type','=', 'receivable')]" name="account_id" groups="account.group_account_user"/>
<field name="name"/>
<field name="payment_term" widget="selection"/>
<field colspan="4" name="invoice_line" nolabel="1" widget="one2many_list" context="{'type': type}"/> <field colspan="4" name="invoice_line" nolabel="1" widget="one2many_list" context="{'type': type}"/>
<group col="1" colspan="2"> <group col="1" colspan="2">
<field name="tax_line" nolabel="1"> <field name="tax_line" nolabel="1">
@ -305,7 +302,6 @@
<group col="8" colspan="4" groups="base.group_user"> <group col="8" colspan="4" groups="base.group_user">
<button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel" groups="base.group_no_one"/> <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel" groups="base.group_no_one"/>
<button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object" icon="terp-stock_effects-object-colorize"/> <button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object" icon="terp-stock_effects-object-colorize"/>
<button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','&lt;&gt;','paid'), ('reconciled', '=', True)]}" icon="gtk-convert" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/> <button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','&lt;&gt;','paid'), ('reconciled', '=', True)]}" icon="gtk-convert" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/>
<button name="%(action_account_invoice_refund)d" type='action' string='Refund' states='open,paid' icon="gtk-execute"/> <button name="%(action_account_invoice_refund)d" type='action' string='Refund' states='open,paid' icon="gtk-execute"/>
<button name="invoice_proforma2" states="draft" string="PRO-FORMA" icon="terp-gtk-media-pause" groups="account.group_account_user"/> <button name="invoice_proforma2" states="draft" string="PRO-FORMA" icon="terp-gtk-media-pause" groups="account.group_account_user"/>
@ -362,13 +358,13 @@
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter name="unpaid" icon="terp-dolar_ok!" string="Unpaid" domain="[('state','=','open')]" help="Unpaid Invoices"/> <filter name="unpaid" icon="terp-dolar_ok!" string="Unpaid" domain="[('state','=','open')]" help="Unpaid Invoices"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<field name="number"/> <field name="number"
string="Reference"
filter_domain="['|', ('number','ilike',self),('origin','ilike',self)]"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="user_id" widget="selection" string="Salesman"> <field name="user_id" widget="selection" string="Salesman">
<filter domain="[('user_id','=',uid)]" help="My invoices" icon="terp-personal" /> <filter domain="[('user_id','=',uid)]" help="My invoices" icon="terp-personal" />
</field> </field>
<field name="origin"/>
<field name="amount_total"/>
</group> </group>
<newline/> <newline/>
<group> <group>

View File

@ -94,7 +94,7 @@ class account_move_line(osv.osv):
if initial_bal and not context.get('periods', False) and not where_move_lines_by_date: if initial_bal and not context.get('periods', False) and not where_move_lines_by_date:
#we didn't pass any filter in the context, and the initial balance can't be computed using only the fiscalyear otherwise entries will be summed twice #we didn't pass any filter in the context, and the initial balance can't be computed using only the fiscalyear otherwise entries will be summed twice
#so we have to invalidate this query #so we have to invalidate this query
raise osv.except_osv(_('Warning !'),_("You haven't supplied enough argument to compute the initial balance")) raise osv.except_osv(_('Warning !'),_("You haven't supplied enough argument to compute the initial balance, please select a period and journal in the context."))
if context.get('journal_ids', False): if context.get('journal_ids', False):
@ -581,14 +581,14 @@ class account_move_line(osv.osv):
lines = self.browse(cr, uid, ids, context=context) lines = self.browse(cr, uid, ids, context=context)
for l in lines: for l in lines:
if l.account_id.type == 'view': if l.account_id.type == 'view':
return False raise osv.except_osv(_('Error :'), _('You can not create journal items on a "view" account %s %s') % (l.account_id.code, l.account_id.name))
return True return True
def _check_no_closed(self, cr, uid, ids, context=None): def _check_no_closed(self, cr, uid, ids, context=None):
lines = self.browse(cr, uid, ids, context=context) lines = self.browse(cr, uid, ids, context=context)
for l in lines: for l in lines:
if l.account_id.type == 'closed': if l.account_id.type == 'closed':
return False raise osv.except_osv(_('Error :'), _('You can not create journal items on a closed account %s %s') % (l.account_id.code, l.account_id.name))
return True return True
def _check_company_id(self, cr, uid, ids, context=None): def _check_company_id(self, cr, uid, ids, context=None):
@ -613,11 +613,11 @@ class account_move_line(osv.osv):
return True return True
_constraints = [ _constraints = [
(_check_no_view, 'You can not create move line on view account.', ['account_id']), (_check_no_view, 'You can not create journal items on an account of type view.', ['account_id']),
(_check_no_closed, 'You can not create move line on closed account.', ['account_id']), (_check_no_closed, 'You can not create journal items on closed account.', ['account_id']),
(_check_company_id, 'Company must be same for its related account and period.', ['company_id']), (_check_company_id, 'Company must be the same for its related account and period.', ['company_id']),
(_check_date, 'The date of your Journal Entry is not in the defined period!', ['date']), (_check_date, 'The date of your Journal Entry is not in the defined period! You should change the date or remove this constraint from the journal.', ['date']),
(_check_currency, 'The selected account of your Journal Entry must receive a value in its secondary currency', ['currency_id']), (_check_currency, 'The selected account of your Journal Entry forces to provide a secondary currency. You should remove the secondary currency on the account or select a multi-currency view on the journal.', ['currency_id']),
] ]
#TODO: ONCHANGE_ACCOUNT_ID: set account_tax_id #TODO: ONCHANGE_ACCOUNT_ID: set account_tax_id
@ -832,7 +832,7 @@ class account_move_line(osv.osv):
raise osv.except_osv(_('Error'), _('Entry is already reconciled')) raise osv.except_osv(_('Error'), _('Entry is already reconciled'))
account = account_obj.browse(cr, uid, account_id, context=context) account = account_obj.browse(cr, uid, account_id, context=context)
if not context.get('fy_closing', False) and not account.reconcile: if not context.get('fy_closing', False) and not account.reconcile:
raise osv.except_osv(_('Error'), _('The account is not defined to be reconciled !')) raise osv.except_osv(_('Error'), _('This account does not allow reconciliation! You should update the account definition to change this.'))
if r[0][1] != None: if r[0][1] != None:
raise osv.except_osv(_('Error'), _('Some entries are already reconciled !')) raise osv.except_osv(_('Error'), _('Some entries are already reconciled !'))
@ -1064,6 +1064,7 @@ class account_move_line(osv.osv):
elif field == 'statement_id': elif field == 'statement_id':
f.set('domain', "[('state', '!=', 'confirm'),('journal_id.type', '=', 'bank')]") f.set('domain', "[('state', '!=', 'confirm'),('journal_id.type', '=', 'bank')]")
f.set('invisible', 'True')
elif field == 'date': elif field == 'date':
f.set('on_change', 'onchange_date(date)') f.set('on_change', 'onchange_date(date)')
@ -1212,9 +1213,9 @@ class account_move_line(osv.osv):
for line in self.browse(cr, uid, ids, context=context): for line in self.browse(cr, uid, ids, context=context):
err_msg = _('Move name (id): %s (%s)') % (line.move_id.name, str(line.move_id.id)) err_msg = _('Move name (id): %s (%s)') % (line.move_id.name, str(line.move_id.id))
if line.move_id.state <> 'draft' and (not line.journal_id.entry_posted): if line.move_id.state <> 'draft' and (not line.journal_id.entry_posted):
raise osv.except_osv(_('Error !'), _('You can not do this modification on a confirmed entry ! Please note that you can just change some non important fields ! \n%s') % err_msg) raise osv.except_osv(_('Error !'), _('You can not do this modification on a confirmed entry! You can just change some non legal fields or you must unconfirm the journal entry first! \n%s') % err_msg)
if line.reconcile_id: if line.reconcile_id:
raise osv.except_osv(_('Error !'), _('You can not do this modification on a reconciled entry ! Please note that you can just change some non important fields ! \n%s') % err_msg) raise osv.except_osv(_('Error !'), _('You can not do this modification on a reconciled entry! You can just change some non legal fields or you must unreconcile first!\n%s') % err_msg)
t = (line.journal_id.id, line.period_id.id) t = (line.journal_id.id, line.period_id.id)
if t not in done: if t not in done:
self._update_journal_check(cr, uid, line.journal_id.id, line.period_id.id, context) self._update_journal_check(cr, uid, line.journal_id.id, line.period_id.id, context)
@ -1247,8 +1248,10 @@ class account_move_line(osv.osv):
if 'period_id' not in context or not isinstance(context.get('period_id', ''), (int, long)): if 'period_id' not in context or not isinstance(context.get('period_id', ''), (int, long)):
period_candidate_ids = self.pool.get('account.period').name_search(cr, uid, name=context.get('period_id','')) period_candidate_ids = self.pool.get('account.period').name_search(cr, uid, name=context.get('period_id',''))
if len(period_candidate_ids) != 1: if len(period_candidate_ids) != 1:
raise osv.except_osv(_('Encoding error'), _('No period found or period given is ambigous.')) raise osv.except_osv(_('Encoding error'), _('No period found or more than one period found for the given date.'))
context['period_id'] = period_candidate_ids[0][0] context['period_id'] = period_candidate_ids[0][0]
if not context.get('journal_id', False) and context.get('search_default_journal_id', False):
context['journal_id'] = context.get('search_default_journal_id')
self._update_journal_check(cr, uid, context['journal_id'], context['period_id'], context) self._update_journal_check(cr, uid, context['journal_id'], context['period_id'], context)
move_id = vals.get('move_id', False) move_id = vals.get('move_id', False)
journal = journal_obj.browse(cr, uid, context['journal_id'], context=context) journal = journal_obj.browse(cr, uid, context['journal_id'], context=context)

View File

@ -18,7 +18,7 @@
name="account.invoice" name="account.invoice"
rml="account/report/account_print_invoice.rml" rml="account/report/account_print_invoice.rml"
string="Invoices" string="Invoices"
attachment="(object.state in ('open','paid')) and ('INV'+(object.number or '').replace('/',''))" attachment="(object.state in ('open','paid')) and ('INV'+(object.number or '').replace('/','')+'.pdf')"
usage="default" usage="default"
multi="True"/> multi="True"/>
<report id="account_transfers" model="account.transfer" name="account.transfer" string="Transfers" xml="account/report/transfer.xml" xsl="account/report/transfer.xsl"/> <report id="account_transfers" model="account.transfer" name="account.transfer" string="Transfers" xml="account/report/transfer.xml" xsl="account/report/transfer.xsl"/>

View File

@ -171,8 +171,8 @@
<field name="user_type" select="1"/> <field name="user_type" select="1"/>
<field name="active" groups="base.group_extended" /> <field name="active" groups="base.group_extended" />
<newline/> <newline/>
<field name="debit" invisible="context.get('config_invisible', True)"/> <field name="debit" invisible="context.get('config_invisible', True)" attrs="{'readonly':[('type','=','view')]}"/>
<field name="credit" invisible="context.get('config_invisible', True)"/> <field name="credit" invisible="context.get('config_invisible', True)" attrs="{'readonly':[('type','=','view')]}"/>
<field name="balance" invisible="context.get('config_invisible', True)"/> <field name="balance" invisible="context.get('config_invisible', True)"/>
</group> </group>
<notebook colspan="4"> <notebook colspan="4">
@ -303,6 +303,9 @@
<tree string="Unrealized Gains and losses"> <tree string="Unrealized Gains and losses">
<field name="code"/> <field name="code"/>
<field name="name"/> <field name="name"/>
<field name="parent_id" invisible="1"/>
<field name="user_type" invisible="1"/>
<field name="type" invisible="1"/>
<field name="currency_id"/> <field name="currency_id"/>
<field name="exchange_rate"/> <field name="exchange_rate"/>
<field name="foreign_balance"/> <field name="foreign_balance"/>
@ -326,6 +329,7 @@
<menuitem <menuitem
name="Unrealized Gain or Loss" name="Unrealized Gain or Loss"
action="action_account_gain_loss" action="action_account_gain_loss"
groups="account.group_account_user"
id="menu_unrealized_gains_losses" id="menu_unrealized_gains_losses"
parent="account.menu_multi_currency"/> parent="account.menu_multi_currency"/>
@ -473,7 +477,7 @@
<separator string="Company" colspan="4"/> <separator string="Company" colspan="4"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<field name="user_id" groups="base.group_extended"/> <field name="user_id" groups="base.group_extended"/>
<field name="currency"/> <field name="currency" groups="base.group_extended"/>
</group> </group>
<group colspan="2" col="2" groups="base.group_extended"> <group colspan="2" col="2" groups="base.group_extended">
<separator string="Validations" colspan="4"/> <separator string="Validations" colspan="4"/>
@ -590,7 +594,7 @@
<form string="Bank Statement"> <form string="Bank Statement">
<group col="7" colspan="4"> <group col="7" colspan="4">
<field name="name" select="1"/> <field name="name" select="1"/>
<field name="date" select="1" on_change="onchange_date(date)"/> <field name="date" select="1" on_change="onchange_date(date, company_id)"/>
<field name="journal_id" domain="[('type', '=', 'bank')]" on_change="onchange_journal_id(journal_id)" select="1" widget="selection"/> <field name="journal_id" domain="[('type', '=', 'bank')]" on_change="onchange_journal_id(journal_id)" select="1" widget="selection"/>
<newline/> <newline/>
<field name="period_id"/> <field name="period_id"/>
@ -651,7 +655,8 @@
<form string="Bank Statement"> <form string="Bank Statement">
<group col="7" colspan="4"> <group col="7" colspan="4">
<field name="name" select="1"/> <field name="name" select="1"/>
<field name="date" select="1" on_change="onchange_date(date)"/> <field name="date" select="1" on_change="onchange_date(date, company_id)"/>
<field name='company_id' widget="selection" groups="base.group_multi_company" />
<field name="journal_id" domain="[('type', '=', 'bank')]" on_change="onchange_journal_id(journal_id)" widget="selection"/> <field name="journal_id" domain="[('type', '=', 'bank')]" on_change="onchange_journal_id(journal_id)" widget="selection"/>
<newline/> <newline/>
<field name="period_id"/> <field name="period_id"/>
@ -786,7 +791,6 @@
<group col="2" colspan="2"> <group col="2" colspan="2">
<separator string="Reporting Configuration" colspan="4"/> <separator string="Reporting Configuration" colspan="4"/>
<field name="report_type" select="2"/> <field name="report_type" select="2"/>
<field name="sign" />
</group> </group>
<group col="2" colspan="2"> <group col="2" colspan="2">
<separator string="Closing Method" colspan="4"/> <separator string="Closing Method" colspan="4"/>
@ -1360,7 +1364,7 @@
</group> </group>
<notebook colspan="4"> <notebook colspan="4">
<page string="Journal Items"> <page string="Journal Items">
<field colspan="4" name="line_id" nolabel="1" height="250" widget="one2many_list" default_get="{'lines':line_id ,'journal':journal_id }"> <field colspan="4" name="line_id" nolabel="1" height="250" widget="one2many_list" context="{'lines':line_id ,'journal':journal_id }">
<form string="Journal Item"> <form string="Journal Item">
<group col="6" colspan="4"> <group col="6" colspan="4">
<field name="name"/> <field name="name"/>
@ -1753,18 +1757,18 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Payment Term"> <form string="Payment Term">
<group> <group>
<group colspan="2" col="4"> <group colspan="2" col="4">
<field name="name" select="1"/> <field name="name" select="1"/>
<separator string="Amount Computation" colspan="4"/> <separator string="Amount Computation" colspan="4"/>
<field name="value" colspan="4"/> <field name="value" colspan="4"/>
<field name="value_amount" colspan="4" attrs="{'readonly':[('value','=','balance')]}"/> <field name="value_amount" colspan="4" attrs="{'readonly':[('value','=','balance')]}"/>
</group> </group>
<group colspan="2" col="4"> <group colspan="2" col="4">
<field name="sequence"/> <field name="sequence"/>
<separator string="Due Date Computation" colspan="4"/> <separator string="Due Date Computation" colspan="4"/>
<field name="days" colspan="4"/> <field name="days" colspan="4"/>
<field name="days2" colspan="4"/> <field name="days2" colspan="4"/>
</group> </group>
</group> </group>
<newline/> <newline/>
<separator string="Example" colspan="4"/> <separator string="Example" colspan="4"/>
@ -2114,6 +2118,7 @@
<field name="currency_id"/> <field name="currency_id"/>
<field name="reconcile"/> <field name="reconcile"/>
<field name="chart_template_id"/>
<separator string="Default taxes" colspan="4"/> <separator string="Default taxes" colspan="4"/>
<field name="tax_ids" colspan="4" nolabel="1"/> <field name="tax_ids" colspan="4" nolabel="1"/>
</page> </page>
@ -2184,9 +2189,13 @@
<form string="Chart of Accounts Template"> <form string="Chart of Accounts Template">
<group> <group>
<field name="name"/> <field name="name"/>
<field name="account_root_id"/> <field name="account_root_id" attrs="{'required': [('parent_id', '=', False)]}"/>
<field name="bank_account_view_id"/> <field name="bank_account_view_id" attrs="{'required': [('parent_id', '=', False)]}"/>
<field name="tax_code_root_id"/> <field name="tax_code_root_id" attrs="{'required': [('parent_id', '=', False)]}"/>
<field name="parent_id" />
<!--<field name="code_digits" />-->
<field name="visible" />
<field name="complete_tax_set" />
</group> </group>
<field name="tax_template_ids" colspan="4" readonly="1" nolabel="1"/> <field name="tax_template_ids" colspan="4" readonly="1" nolabel="1"/>
<separator string="Properties" colspan="4"/> <separator string="Properties" colspan="4"/>
@ -2270,7 +2279,9 @@
<field name="chart_template_id"/> <field name="chart_template_id"/>
<field name="type"/> <field name="type"/>
<field name="type_tax_use"/> <field name="type_tax_use"/>
<field name="price_include"/> <group colspan="2" col="4">
<field name="price_include"/>
</group>
</group> </group>
<notebook colspan="4"> <notebook colspan="4">
<page string="Tax Definition"> <page string="Tax Definition">
@ -2437,10 +2448,14 @@
<group string="res_config_contents" position="replace"> <group string="res_config_contents" position="replace">
<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="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 ="code_digits" groups="account.group_account_user"/> <field name ="code_digits" groups="account.group_account_user"/>
<field name="chart_template_id" widget="selection" on_change="onchange_chart_template_id(chart_template_id)"/> <field name="chart_template_id" widget="selection" on_change="onchange_chart_template_id(chart_template_id)" domain="[('visible','=', True)]"/>
<field name ="seq_journal" groups="account.group_account_user"/> <field name ="seq_journal" groups="base.group_extended"/>
<field name="sale_tax" domain="[('chart_template_id', '=', chart_template_id),('parent_id','=',False),('type_tax_use','in',('sale','all'))]"/> <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'))]"/>
<field name="purchase_tax" domain="[('chart_template_id', '=', chart_template_id),('parent_id','=',False),('type_tax_use','in',('purchase', 'all'))]"/> <field name="purchase_tax" attrs="{'invisible': [('complete_tax_set', '!=', True)]}" domain="[('chart_template_id', '=', chart_template_id),('parent_id','=',False),('type_tax_use','in',('purchase', 'all'))]"/>
<newline/>
<field name ="sale_tax_rate" attrs="{'invisible': [('complete_tax_set', '=', True)]}" on_change="onchange_tax_rate(sale_tax_rate)"/>
<field name ="purchase_tax_rate" attrs="{'invisible': [('complete_tax_set', '=', True)]}"/>
<field name ="complete_tax_set" invisible="1"/>
<newline/> <!-- extended view because the web UI is not good for one2many --> <newline/> <!-- extended view because the web UI is not good for one2many -->
<field colspan="4" mode="tree" name="bank_accounts_id" nolabel="1" widget="one2many_list" groups="account.group_account_user"> <field colspan="4" mode="tree" name="bank_accounts_id" nolabel="1" widget="one2many_list" groups="account.group_account_user">
<form string="Bank Information"> <form string="Bank Information">
@ -2476,6 +2491,9 @@
<field eval="5" name="sequence"/> <field eval="5" name="sequence"/>
<field name="code"> <field name="code">
act_window_ids = pool.get('ir.actions.act_window').search(cr, uid,[('name', 'in', ('Accounting Chart Configuration', 'Generate Chart of Accounts from a Chart Template'))], context=context) act_window_ids = pool.get('ir.actions.act_window').search(cr, uid,[('name', 'in', ('Accounting Chart Configuration', 'Generate Chart of Accounts from a Chart Template'))], context=context)
ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', 'action_account_configuration_installer')
if ref:
act_window_ids += [ref[1]]
todo_ids = pool.get('ir.actions.todo').search(cr, uid, [('action_id', 'in', act_window_ids)], context=context) todo_ids = pool.get('ir.actions.todo').search(cr, uid, [('action_id', 'in', act_window_ids)], context=context)
pool.get('ir.actions.todo').write(cr, uid, todo_ids, {'state':'open'}, context=context) pool.get('ir.actions.todo').write(cr, uid, todo_ids, {'state':'open'}, context=context)
action = pool.get('res.config').next(cr, uid, [], context) action = pool.get('res.config').next(cr, uid, [], context)
@ -2603,7 +2621,7 @@ action = pool.get('res.config').next(cr, uid, [], context)
<form string="Statement"> <form string="Statement">
<group col="6" colspan="4"> <group col="6" colspan="4">
<field name="name" select="1"/> <field name="name" select="1"/>
<field name="company_id" select="1" groups="base.group_multi_company"/> <field name='company_id' widget="selection" groups="base.group_multi_company" />
<field name="journal_id" on_change="onchange_journal_id(journal_id)" select="1" widget="selection"/> <field name="journal_id" on_change="onchange_journal_id(journal_id)" select="1" widget="selection"/>
<field name="user_id" select="1" readonly="1"/> <field name="user_id" select="1" readonly="1"/>
<field name="period_id" select="1"/> <field name="period_id" select="1"/>
@ -2676,7 +2694,7 @@ action = pool.get('res.config').next(cr, uid, [], context)
<group col="6" colspan="4"> <group col="6" colspan="4">
<group col="2" colspan="2"> <group col="2" colspan="2">
<separator string="Dates" colspan="4"/> <separator string="Dates" colspan="4"/>
<field name="date" select="1" attrs="{'readonly':[('state','!=','draft')]}" on_change="onchange_date(date)"/> <field name="date" select="1" attrs="{'readonly':[('state','!=','draft')]}" on_change="onchange_date(date, company_id)"/>
<field name="closing_date" select="1" readonly="1"/> <field name="closing_date" select="1" readonly="1"/>
</group> </group>
<group col="2" colspan="2"> <group col="2" colspan="2">
@ -2767,10 +2785,15 @@ action = pool.get('res.config').next(cr, uid, [], context)
<field name="parent_id"/> <field name="parent_id"/>
<field name="sequence"/> <field name="sequence"/>
<field name="type"/> <field name="type"/>
<field name="sign"/>
<field name="style_overwrite"/>
</group> </group>
<notebook colspan="4"> <notebook colspan="6">
<page string="Report" attrs="{'invisible': [('state','!=','confirm')]}"> <page string="Report">
<field name="display_detail" attrs="{'invisible': [('type','!=','accounts')]}"/> <group colspan="4" col="4">
<field name="display_detail" attrs="{'invisible': [('type','not in',['accounts','account_type'])]}" colspan="2"/>
<label string="" colspan="2"/>
</group>
<newline/> <newline/>
<field name="account_ids" nolabel="1" colspan="6" attrs="{'invisible': [('type', '!=', 'accounts')]}"/> <field name="account_ids" nolabel="1" colspan="6" attrs="{'invisible': [('type', '!=', 'accounts')]}"/>
<newline/> <newline/>
@ -2779,9 +2802,6 @@ action = pool.get('res.config').next(cr, uid, [], context)
<field name="account_type_ids" nolabel="1" attrs="{'invisible': [('type', '!=', 'account_type')]}"/> <field name="account_type_ids" nolabel="1" attrs="{'invisible': [('type', '!=', 'account_type')]}"/>
<newline/> <newline/>
</page> </page>
<page string="Notes" attrs="{'invisible': [('state','!=','confirm')]}">
<field name="note" nolabel="1" colspan="4"/>
</page>
</notebook> </notebook>
</form> </form>
</field> </field>

View File

@ -41,12 +41,11 @@
<form string="Account Board"> <form string="Account Board">
<board style="2-1"> <board style="2-1">
<column> <column>
<action name="%(account.action_invoice_tree1)d" string="Customer Invoices to Approve" domain="[('state','in',('draft','proforma2')), ('type','=','out_invoice')]"/> <action name="%(account.action_invoice_tree1)d" creatable="true" string="Draft Customer Invoices" domain="[('state','in',('draft','proforma2')), ('type','=','out_invoice')]"/>
<action name="%(action_company_analysis_tree)d" string="Company Analysis"/> <action name="%(action_company_analysis_tree)d" string="Company Analysis"/>
</column> </column>
<column> <column>
<action name="%(action_treasory_graph)d" string="Treasury"/> <!--groups="account.group_account_manager,account.group_account_user"--> <action name="%(action_treasory_graph)d" string="Treasury"/> <!--groups="account.group_account_manager,account.group_account_user"-->
<action name="%(action_aged_receivable)d" string="Aged Receivables"/> <!--groups="account.group_account_manager,account.group_account_user"-->
</column> </column>
</board> </board>
</form> </form>

View File

@ -1,26 +1,6 @@
<openerp> <openerp>
<data> <data noupdate="1">
<!-- Types --> <!-- Types -->
<record model="account.account.type" id="conf_account_type_receivable">
<field name="name">Receivable</field>
<field name="code">receivable</field>
<field name="report_type">income</field>
<field name="close_method">unreconciled</field>
</record>
<record model="account.account.type" id="conf_account_type_payable">
<field name="name">Payable</field>
<field name="code">payable</field>
<field name="report_type">expense</field>
<field name="close_method">unreconciled</field>
</record>
<record model="account.account.type" id="conf_account_type_view">
<field name="name">View</field>
<field name="code">view</field>
<field name="close_method">none</field>
</record>
<record model="account.account.type" id="account_type_income_view1"> <record model="account.account.type" id="account_type_income_view1">
<field name="name">Income View</field> <field name="name">Income View</field>
<field name="code">view</field> <field name="code">view</field>
@ -41,78 +21,32 @@
<field name="code">liability</field> <field name="code">liability</field>
<field name="report_type">liability</field> <field name="report_type">liability</field>
</record> </record>
<record model="account.account.type" id="conf_account_type_income">
<field name="name">Income</field>
<field name="code">income</field>
<field name="report_type">income</field>
<field name="close_method">none</field>
</record>
<record model="account.account.type" id="conf_account_type_expense">
<field name="name">Expense</field>
<field name="code">expense</field>
<field name="report_type">expense</field>
<field name="close_method">none</field>
</record>
<record model="account.account.type" id="conf_account_type_tax"> <record model="account.account.type" id="conf_account_type_tax">
<field name="name">Tax</field> <field name="name">Tax</field>
<field name="code">tax</field> <field name="code">tax</field>
<field name="report_type">expense</field>
<field name="close_method">unreconciled</field> <field name="close_method">unreconciled</field>
<field name="report_type">expense</field>
</record> </record>
<record model="account.account.type" id="conf_account_type_cash">
<field name="name">Cash</field>
<field name="code">cash</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record model="account.account.type" id="conf_account_type_liability">
<field name="name">Liability</field>
<field name="code">liability</field>
<field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>
<record model="account.account.type" id="conf_account_type_asset">
<field name="name">Asset</field>
<field name="code">asset</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record model="account.account.type" id="conf_account_type_equity"> <record model="account.account.type" id="conf_account_type_equity">
<field name="name">Equity</field> <field name="name">Equity</field>
<field name="code">equity</field> <field name="code">equity</field>
<field name="close_method">balance</field>
<field name="report_type">liability</field> <field name="report_type">liability</field>
<field name="close_method">balance</field>
</record> </record>
<record model="account.account.type" id="conf_account_type_chk">
<record model="account.account.type" id="conf_account_type_bnk">
<field name="name">Bank</field>
<field name="code">bank</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record model="account.account.type" id="conf_account_type_chk">
<field name="name">Check</field> <field name="name">Check</field>
<field name="code">check</field> <field name="code">check</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field> <field name="close_method">balance</field>
<field name="report_type">asset</field>
</record> </record>
<!-- Account Templates--> <!-- Account Templates-->
<record id="conf_chart0" model="account.account.template"> <record id="conf_chart0" model="account.account.template">
<field name="code">0</field> <field name="code">0</field>
<field name="name">Configurable Account Chart</field> <field name="name">Configurable Account Chart</field>
<field eval="0" name="parent_id"/> <field eval="0" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="conf_account_type_view"/> <field name="user_type" ref="data_account_type_view"/>
</record> </record>
<!-- Balance Sheet --> <!-- Balance Sheet -->
@ -122,7 +56,7 @@
<field name="name">Balance Sheet</field> <field name="name">Balance Sheet</field>
<field ref="conf_chart0" name="parent_id"/> <field ref="conf_chart0" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="conf_account_type_view"/> <field name="user_type" ref="data_account_type_view"/>
</record> </record>
<record id="conf_fas" model="account.account.template"> <record id="conf_fas" model="account.account.template">
@ -162,7 +96,7 @@
<field name="name">Purchased Stocks</field> <field name="name">Purchased Stocks</field>
<field ref="conf_cas" name="parent_id"/> <field ref="conf_cas" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="conf_a_recv" model="account.account.template"> <record id="conf_a_recv" model="account.account.template">
@ -171,7 +105,7 @@
<field ref="conf_cas" name="parent_id"/> <field ref="conf_cas" name="parent_id"/>
<field name="type">receivable</field> <field name="type">receivable</field>
<field eval="True" name="reconcile"/> <field eval="True" name="reconcile"/>
<field name="user_type" ref="conf_account_type_receivable"/> <field name="user_type" ref="data_account_type_receivable"/>
</record> </record>
<record id="conf_ova" model="account.account.template"> <record id="conf_ova" model="account.account.template">
@ -179,7 +113,7 @@
<field name="name">Tax Paid</field> <field name="name">Tax Paid</field>
<field ref="conf_cas" name="parent_id"/> <field ref="conf_cas" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="conf_bnk" model="account.account.template"> <record id="conf_bnk" model="account.account.template">
@ -195,7 +129,7 @@
<field name="name">Opening Income Account</field> <field name="name">Opening Income Account</field>
<field ref="conf_cas" name="parent_id"/> <field ref="conf_cas" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_income"/> <field name="user_type" ref="data_account_type_income"/>
</record> </record>
<record id="conf_cli" model="account.account.template"> <record id="conf_cli" model="account.account.template">
@ -212,7 +146,7 @@
<field ref="conf_cli" name="parent_id"/> <field ref="conf_cli" name="parent_id"/>
<field name="type">payable</field> <field name="type">payable</field>
<field eval="True" name="reconcile"/> <field eval="True" name="reconcile"/>
<field name="user_type" ref="conf_account_type_payable"/> <field name="user_type" ref="data_account_type_payable"/>
</record> </record>
<record id="conf_iva" model="account.account.template"> <record id="conf_iva" model="account.account.template">
@ -220,7 +154,7 @@
<field name="name">Tax Received</field> <field name="name">Tax Received</field>
<field ref="conf_cli" name="parent_id"/> <field ref="conf_cli" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_liability"/> <field name="user_type" ref="data_account_type_liability"/>
</record> </record>
<record id="conf_a_reserve_and_surplus" model="account.account.template"> <record id="conf_a_reserve_and_surplus" model="account.account.template">
@ -229,7 +163,7 @@
<field ref="conf_cli" name="parent_id"/> <field ref="conf_cli" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field eval="True" name="reconcile"/> <field eval="True" name="reconcile"/>
<field name="user_type" ref="conf_account_type_liability"/> <field name="user_type" ref="data_account_type_liability"/>
</record> </record>
<record id="conf_o_expense" model="account.account.template"> <record id="conf_o_expense" model="account.account.template">
@ -237,7 +171,7 @@
<field name="name">Opening Expense Account</field> <field name="name">Opening Expense Account</field>
<field ref="conf_cli" name="parent_id"/> <field ref="conf_cli" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<!-- Profit and Loss --> <!-- Profit and Loss -->
@ -247,7 +181,7 @@
<field name="name">Profit and Loss</field> <field name="name">Profit and Loss</field>
<field ref="conf_chart0" name="parent_id"/> <field ref="conf_chart0" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="conf_account_type_view"/> <field name="user_type" ref="data_account_type_view"/>
</record> </record>
<record id="conf_rev" model="account.account.template"> <record id="conf_rev" model="account.account.template">
@ -263,7 +197,7 @@
<field name="name">Product Sales</field> <field name="name">Product Sales</field>
<field ref="conf_rev" name="parent_id"/> <field ref="conf_rev" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_income"/> <field name="user_type" ref="data_account_type_income"/>
</record> </record>
<record id="conf_cos" model="account.account.template"> <record id="conf_cos" model="account.account.template">
@ -279,7 +213,7 @@
<field name="name">Cost of Goods Sold</field> <field name="name">Cost of Goods Sold</field>
<field ref="conf_cos" name="parent_id"/> <field ref="conf_cos" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<record id="conf_ovr" model="account.account.template"> <record id="conf_ovr" model="account.account.template">
@ -295,7 +229,7 @@
<field name="name">Expenses</field> <field name="name">Expenses</field>
<field ref="conf_ovr" name="parent_id"/> <field ref="conf_ovr" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<record id="conf_a_salary_expense" model="account.account.template"> <record id="conf_a_salary_expense" model="account.account.template">
@ -303,7 +237,7 @@
<field name="name">Salary Expenses</field> <field name="name">Salary Expenses</field>
<field ref="conf_ovr" name="parent_id"/> <field ref="conf_ovr" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="conf_account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<!-- Taxes --> <!-- Taxes -->
@ -448,6 +382,7 @@
<field name="property_account_income_opening" ref="conf_o_income"/> <field name="property_account_income_opening" ref="conf_o_income"/>
<field name="property_account_expense_opening" ref="conf_o_expense"/> <field name="property_account_expense_opening" ref="conf_o_expense"/>
<field name="property_reserve_and_surplus_account" ref="conf_a_reserve_and_surplus"/> <field name="property_reserve_and_surplus_account" ref="conf_a_reserve_and_surplus"/>
<field name="complete_tax_set" eval="False"/>
</record> </record>
<!-- VAT Codes --> <!-- VAT Codes -->

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record model="account.account.type" id="data_account_type_view">
<field name="name">Root/View</field>
<field name="code">view</field>
<field name="close_method">none</field>
</record>
<record model="account.account.type" id="data_account_type_receivable">
<field name="name">Receivable</field>
<field name="code">receivable</field>
<field name="close_method">unreconciled</field>
<field name="report_type">asset</field>
</record>
<record model="account.account.type" id="data_account_type_payable">
<field name="name">Payable</field>
<field name="code">payable</field>
<field name="close_method">unreconciled</field>
<field name="report_type">liability</field>
</record>
<record model="account.account.type" id="data_account_type_bank">
<field name="name">Bank</field>
<field name="code">bank</field>
<field name="close_method">balance</field>
</record>
<record model="account.account.type" id="data_account_type_cash">
<field name="name">Cash</field>
<field name="code">cash</field>
<field name="close_method">balance</field>
<field name="report_type">asset</field>
</record>
<record model="account.account.type" id="data_account_type_asset">
<field name="name">Asset</field>
<field name="code">asset</field>
<field name="close_method">balance</field>
<field name="report_type">asset</field>
</record>
<record model="account.account.type" id="data_account_type_liability">
<field name="name">Liability</field>
<field name="code">liability</field>
<field name="close_method">balance</field>
<field name="report_type">liability</field>
</record>
<record model="account.account.type" id="data_account_type_income">
<field name="name">Income</field>
<field name="code">income</field>
<field name="close_method">none</field>
<field name="report_type">income</field>
</record>
<record model="account.account.type" id="data_account_type_expense">
<field name="name">Expense</field>
<field name="code">expense</field>
<field name="close_method">none</field>
<field name="report_type">expense</field>
</record>
</data>
</openerp>

View File

@ -33,7 +33,8 @@
<field eval="True" name="special"/> <field eval="True" name="special"/>
<field name="fiscalyear_id" ref="data_fiscalyear"/> <field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-02-01'" name="date_start"/> <field eval="time.strftime('%Y')+'-02-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-02-28'" name="date_stop"/> <!-- for the last day of February, we have to compute the day before March 1st -->
<field eval="(DateTime.today().replace(month=3, day=1) - timedelta(days=1)).strftime('%Y-%m-%d')" name="date_stop"/>
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
</record> </record>
<record id="period_3" model="account.period"> <record id="period_3" model="account.period">

View File

@ -2,9 +2,9 @@
<openerp> <openerp>
<data noupdate="1"> <data noupdate="1">
<record id="demo_invoice_0" model="account.invoice"> <record id="demo_invoice_0" model="account.invoice">
<field name="date_due">2011-07-21</field> <field name="date_due" eval="time.strftime('%Y')+'-01-30'"/>
<field name="payment_term" ref="account.account_payment_term"/> <field name="payment_term" ref="account.account_payment_term"/>
<field name="journal_id" ref="account.refund_expenses_journal"/> <field name="journal_id" ref="account.expenses_journal"/>
<field name="currency_id" ref="base.EUR"/> <field name="currency_id" ref="base.EUR"/>
<field name="address_invoice_id" ref="base.res_partner_address_wong"/> <field name="address_invoice_id" ref="base.res_partner_address_wong"/>
<field name="user_id" ref="base.user_demo"/> <field name="user_id" ref="base.user_demo"/>
@ -15,7 +15,7 @@
<field name="type">in_invoice</field> <field name="type">in_invoice</field>
<field name="account_id" ref="account.a_pay"/> <field name="account_id" ref="account.a_pay"/>
<field eval="0" name="reconciled"/> <field eval="0" name="reconciled"/>
<field name="date_invoice">2011-06-01</field> <field name="date_invoice" eval="time.strftime('%Y')+'-01-01'"/>
<field eval="14.0" name="amount_untaxed"/> <field eval="14.0" name="amount_untaxed"/>
<field eval="14.0" name="amount_total"/> <field eval="14.0" name="amount_total"/>
<field name="partner_id" ref="base.res_partner_maxtor"/> <field name="partner_id" ref="base.res_partner_maxtor"/>

View File

@ -5,58 +5,11 @@
Account Type Account Type
--> -->
<record id="account_type_root" model="account.account.type">
<field name="name">View</field>
<field name="code">view</field>
<field name="close_method">none</field>
</record>
<record id="account_type_asset" model="account.account.type">
<field name="name">Asset</field>
<field name="code">asset</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record id="account_type_receivable" model="account.account.type">
<field name="name">Receivable</field>
<field name="code">receivable</field>
<field name="report_type">asset</field>
<field name="close_method">unreconciled</field>
</record>
<record id="account_type_liability" model="account.account.type">
<field name="name">Liability</field>
<field name="code">liability</field>
<field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>
<record id="account_type_payable" model="account.account.type">
<field name="name">Payable</field>
<field name="code">payable</field>
<field name="report_type">liability</field>
<field name="close_method">unreconciled</field>
</record>
<record id="account_type_income" model="account.account.type">
<field name="name">Income</field>
<field name="code">income</field>
<field name="report_type">income</field>
<field name="close_method">none</field>
</record>
<record id="account_type_expense" model="account.account.type">
<field name="name">Expense</field>
<field name="code">expense</field>
<field name="report_type">expense</field>
<field name="close_method">none</field>
</record>
<record id="account_type_cash_equity" model="account.account.type"> <record id="account_type_cash_equity" model="account.account.type">
<field name="name">Equity</field> <field name="name">Equity</field>
<field name="code">equity</field> <field name="code">equity</field>
<field name="close_method">balance</field>
<field name="report_type">liability</field> <field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>
<record id="account_type_cash_moves" model="account.account.type">
<field name="name">Cash</field>
<field name="code">cash</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record> </record>
<!-- <!--
@ -68,7 +21,7 @@
<field name="name">Chart For Automated Tests</field> <field name="name">Chart For Automated Tests</field>
<field eval="0" name="parent_id"/> <field eval="0" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_root"/> <field name="user_type" ref="data_account_type_view"/>
</record> </record>
<!-- Balance Sheet --> <!-- Balance Sheet -->
@ -78,14 +31,14 @@
<field name="name">Balance Sheet - (test)</field> <field name="name">Balance Sheet - (test)</field>
<field ref="chart0" name="parent_id"/> <field ref="chart0" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_root"/> <field name="user_type" ref="data_account_type_view"/>
</record> </record>
<record model="account.account" id="assets_view"> <record model="account.account" id="assets_view">
<field name="name">Assets - (test)</field> <field name="name">Assets - (test)</field>
<field name="code">X10</field> <field name="code">X10</field>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/> <field name="parent_id" ref="bal"/>
</record> </record>
@ -95,7 +48,7 @@
<field name="name">Fixed Assets - (test)</field> <field name="name">Fixed Assets - (test)</field>
<field ref="assets_view" name="parent_id"/> <field ref="assets_view" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="xfa" model="account.account"> <record id="xfa" model="account.account">
@ -103,7 +56,7 @@
<field name="name">Fixed Asset Account - (test)</field> <field name="name">Fixed Asset Account - (test)</field>
<field ref="fas" name="parent_id"/> <field ref="fas" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="nca" model="account.account"> <record id="nca" model="account.account">
@ -111,7 +64,7 @@
<field name="name">Net Current Assets - (test)</field> <field name="name">Net Current Assets - (test)</field>
<field ref="assets_view" name="parent_id"/> <field ref="assets_view" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="cas" model="account.account"> <record id="cas" model="account.account">
@ -119,7 +72,7 @@
<field name="name">Current Assets - (test)</field> <field name="name">Current Assets - (test)</field>
<field ref="nca" name="parent_id"/> <field ref="nca" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="stk" model="account.account"> <record id="stk" model="account.account">
@ -127,7 +80,7 @@
<field name="name">Purchased Stocks - (test)</field> <field name="name">Purchased Stocks - (test)</field>
<field ref="cas" name="parent_id"/> <field ref="cas" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="a_recv" model="account.account"> <record id="a_recv" model="account.account">
@ -136,7 +89,7 @@
<field ref="cas" name="parent_id"/> <field ref="cas" name="parent_id"/>
<field name="type">receivable</field> <field name="type">receivable</field>
<field eval="True" name="reconcile"/> <field eval="True" name="reconcile"/>
<field name="user_type" ref="account_type_receivable"/> <field name="user_type" ref="data_account_type_receivable"/>
</record> </record>
<record id="ova" model="account.account"> <record id="ova" model="account.account">
@ -144,7 +97,7 @@
<field name="name">Output VAT - (test)</field> <field name="name">Output VAT - (test)</field>
<field ref="cas" name="parent_id"/> <field ref="cas" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="bnk" model="account.account"> <record id="bnk" model="account.account">
@ -152,7 +105,7 @@
<field name="name">Bank Current Account - (test)</field> <field name="name">Bank Current Account - (test)</field>
<field ref="cas" name="parent_id"/> <field ref="cas" name="parent_id"/>
<field name="type">liquidity</field> <field name="type">liquidity</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="cash" model="account.account"> <record id="cash" model="account.account">
@ -160,7 +113,7 @@
<field name="name">Cash - (test)</field> <field name="name">Cash - (test)</field>
<field ref="cas" name="parent_id"/> <field ref="cas" name="parent_id"/>
<field name="type">liquidity</field> <field name="type">liquidity</field>
<field name="user_type" ref="account_type_asset"/> <field name="user_type" ref="data_account_type_asset"/>
</record> </record>
<record id="o_income" model="account.account"> <record id="o_income" model="account.account">
@ -168,14 +121,14 @@
<field name="name">Opening Income - (test)</field> <field name="name">Opening Income - (test)</field>
<field ref="cas" name="parent_id"/> <field ref="cas" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_income"/> <field name="user_type" ref="data_account_type_income"/>
</record> </record>
<record model="account.account" id="liabilities_view"> <record model="account.account" id="liabilities_view">
<field name="name">Liabilities - (test)</field> <field name="name">Liabilities - (test)</field>
<field name="code">X11</field> <field name="code">X11</field>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_liability"/> <field name="user_type" ref="data_account_type_liability"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/> <field name="parent_id" ref="bal"/>
</record> </record>
@ -185,7 +138,7 @@
<field name="name">Current Liabilities - (test)</field> <field name="name">Current Liabilities - (test)</field>
<field ref="liabilities_view" name="parent_id"/> <field ref="liabilities_view" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_liability"/> <field name="user_type" ref="data_account_type_liability"/>
</record> </record>
<record id="a_pay" model="account.account"> <record id="a_pay" model="account.account">
@ -194,7 +147,7 @@
<field ref="cli" name="parent_id"/> <field ref="cli" name="parent_id"/>
<field name="type">payable</field> <field name="type">payable</field>
<field eval="True" name="reconcile"/> <field eval="True" name="reconcile"/>
<field name="user_type" ref="account_type_payable"/> <field name="user_type" ref="data_account_type_payable"/>
</record> </record>
<record id="iva" model="account.account"> <record id="iva" model="account.account">
@ -202,7 +155,7 @@
<field name="name">Input VAT - (test)</field> <field name="name">Input VAT - (test)</field>
<field ref="cli" name="parent_id"/> <field ref="cli" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_liability"/> <field name="user_type" ref="data_account_type_liability"/>
</record> </record>
<record id="rsa" model="account.account"> <record id="rsa" model="account.account">
@ -210,7 +163,7 @@
<field name="name">Reserve and Profit/Loss - (test)</field> <field name="name">Reserve and Profit/Loss - (test)</field>
<field ref="cli" name="parent_id"/> <field ref="cli" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_liability"/> <field name="user_type" ref="data_account_type_liability"/>
</record> </record>
<record id="o_expense" model="account.account"> <record id="o_expense" model="account.account">
@ -218,7 +171,7 @@
<field name="name">Opening Expense - (test)</field> <field name="name">Opening Expense - (test)</field>
<field ref="cli" name="parent_id"/> <field ref="cli" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<!-- Profit and Loss --> <!-- Profit and Loss -->
@ -228,14 +181,14 @@
<field name="name">Profit and Loss - (test)</field> <field name="name">Profit and Loss - (test)</field>
<field ref="chart0" name="parent_id"/> <field ref="chart0" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_root"/> <field name="user_type" ref="data_account_type_view"/>
</record> </record>
<record model="account.account" id="income_view"> <record model="account.account" id="income_view">
<field name="name">Income - (test)</field> <field name="name">Income - (test)</field>
<field name="code">X20</field> <field name="code">X20</field>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_income"/> <field name="user_type" ref="data_account_type_income"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/> <field name="parent_id" ref="gpf"/>
</record> </record>
@ -244,7 +197,7 @@
<field name="name">Foreign Exchange Gain - (test)</field> <field name="name">Foreign Exchange Gain - (test)</field>
<field name="code">X201</field> <field name="code">X201</field>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_income"/> <field name="user_type" ref="data_account_type_income"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="income_view"/> <field name="parent_id" ref="income_view"/>
</record> </record>
@ -254,7 +207,7 @@
<field name="name">Revenue - (test)</field> <field name="name">Revenue - (test)</field>
<field ref="income_view" name="parent_id"/> <field ref="income_view" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_income"/> <field name="user_type" ref="data_account_type_income"/>
</record> </record>
<record id="a_sale" model="account.account"> <record id="a_sale" model="account.account">
@ -262,14 +215,14 @@
<field name="name">Product Sales - (test)</field> <field name="name">Product Sales - (test)</field>
<field ref="rev" name="parent_id"/> <field ref="rev" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_income"/> <field name="user_type" ref="data_account_type_income"/>
</record> </record>
<record model="account.account" id="expense_view"> <record model="account.account" id="expense_view">
<field name="name">Expense - (test)</field> <field name="name">Expense - (test)</field>
<field name="code">X21</field> <field name="code">X21</field>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/> <field name="parent_id" ref="gpf"/>
</record> </record>
@ -280,7 +233,7 @@
<field name="name">Cost of Sales - (test)</field> <field name="name">Cost of Sales - (test)</field>
<field ref="expense_view" name="parent_id"/> <field ref="expense_view" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<record id="cog" model="account.account"> <record id="cog" model="account.account">
@ -288,7 +241,7 @@
<field name="name">Cost of Goods Sold - (test)</field> <field name="name">Cost of Goods Sold - (test)</field>
<field ref="cos" name="parent_id"/> <field ref="cos" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<record id="ovr" model="account.account"> <record id="ovr" model="account.account">
@ -296,7 +249,7 @@
<field name="name">Overheads - (test)</field> <field name="name">Overheads - (test)</field>
<field ref="expense_view" name="parent_id"/> <field ref="expense_view" name="parent_id"/>
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<record id="a_expense" model="account.account"> <record id="a_expense" model="account.account">
@ -304,14 +257,14 @@
<field name="name">Expenses - (test)</field> <field name="name">Expenses - (test)</field>
<field ref="ovr" name="parent_id"/> <field ref="ovr" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<record model="account.account" id="income_fx_expense"> <record model="account.account" id="income_fx_expense">
<field name="name">Foreign Exchange Loss - (test)</field> <field name="name">Foreign Exchange Loss - (test)</field>
<field name="code">X2111</field> <field name="code">X2111</field>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="ovr"/> <field name="parent_id" ref="ovr"/>
</record> </record>
@ -321,7 +274,7 @@
<field name="name">Salary Expenses - (test)</field> <field name="name">Salary Expenses - (test)</field>
<field ref="ovr" name="parent_id"/> <field ref="ovr" name="parent_id"/>
<field name="type">other</field> <field name="type">other</field>
<field name="user_type" ref="account_type_expense"/> <field name="user_type" ref="data_account_type_expense"/>
</record> </record>
<!-- Properties --> <!-- Properties -->

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

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

View File

@ -23,8 +23,8 @@ import logging
import time import time
import datetime import datetime
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from os.path import join as opj
from operator import itemgetter from operator import itemgetter
from os.path import join as opj
from tools.translate import _ from tools.translate import _
from osv import fields, osv from osv import fields, osv
@ -58,8 +58,6 @@ class account_installer(osv.osv_memory):
'date_start': fields.date('Start Date', required=True), 'date_start': fields.date('Start Date', required=True),
'date_stop': fields.date('End Date', required=True), 'date_stop': fields.date('End Date', required=True),
'period': fields.selection([('month', 'Monthly'), ('3months','3 Monthly')], 'Periods', required=True), 'period': fields.selection([('month', 'Monthly'), ('3months','3 Monthly')], 'Periods', required=True),
'sale_tax': fields.float('Sale Tax(%)'),
'purchase_tax': fields.float('Purchase Tax(%)'),
'company_id': fields.many2one('res.company', 'Company', required=True), 'company_id': fields.many2one('res.company', 'Company', required=True),
'has_default_company' : fields.boolean('Has Default Company', readonly=True), 'has_default_company' : fields.boolean('Has Default Company', readonly=True),
} }
@ -76,8 +74,6 @@ class account_installer(osv.osv_memory):
'date_start': lambda *a: time.strftime('%Y-01-01'), 'date_start': lambda *a: time.strftime('%Y-01-01'),
'date_stop': lambda *a: time.strftime('%Y-12-31'), 'date_stop': lambda *a: time.strftime('%Y-12-31'),
'period': 'month', 'period': 'month',
'sale_tax': 0.0,
'purchase_tax': 0.0,
'company_id': _default_company, 'company_id': _default_company,
'has_default_company': _default_has_default_company, 'has_default_company': _default_has_default_company,
'charts': 'configurable' 'charts': 'configurable'
@ -100,9 +96,6 @@ class account_installer(osv.osv_memory):
res['fields'][field]['selection'] = cmp_select res['fields'][field]['selection'] = cmp_select
return res return res
def on_change_tax(self, cr, uid, id, tax):
return {'value': {'purchase_tax': tax}}
def on_change_start_date(self, cr, uid, id, start_date=False): def on_change_start_date(self, cr, uid, id, start_date=False):
if start_date: if start_date:
start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d") start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")
@ -118,92 +111,12 @@ class account_installer(osv.osv_memory):
if context is None: if context is None:
context = {} context = {}
fy_obj = self.pool.get('account.fiscalyear') fy_obj = self.pool.get('account.fiscalyear')
mod_obj = self.pool.get('ir.model.data')
obj_acc_temp = self.pool.get('account.account.template')
obj_tax_code_temp = self.pool.get('account.tax.code.template')
obj_tax_temp = self.pool.get('account.tax.template')
obj_acc_chart_temp = self.pool.get('account.chart.template')
record = self.browse(cr, uid, ids, context=context)[0]
for res in self.read(cr, uid, ids, context=context): for res in self.read(cr, uid, ids, context=context):
if record.charts == 'configurable': if 'charts' in res and res['charts'] == 'configurable':
#load generic chart of account
fp = tools.file_open(opj('account', 'configurable_account_chart.xml')) fp = tools.file_open(opj('account', 'configurable_account_chart.xml'))
tools.convert_xml_import(cr, 'account', fp, {}, 'init', True, None) tools.convert_xml_import(cr, 'account', fp, {}, 'init', True, None)
fp.close() fp.close()
s_tax = (res.get('sale_tax', 0.0))/100
p_tax = (res.get('purchase_tax', 0.0))/100
pur_temp_tax = mod_obj.get_object_reference(cr, uid, 'account', 'tax_code_base_purchases')
pur_temp_tax_id = pur_temp_tax and pur_temp_tax[1] or False
pur_temp_tax_paid = mod_obj.get_object_reference(cr, uid, 'account', 'tax_code_output')
pur_temp_tax_paid_id = pur_temp_tax_paid and pur_temp_tax_paid[1] or False
sale_temp_tax = mod_obj.get_object_reference(cr, uid, 'account', 'tax_code_base_sales')
sale_temp_tax_id = sale_temp_tax and sale_temp_tax[1] or False
sale_temp_tax_paid = mod_obj.get_object_reference(cr, uid, 'account', 'tax_code_input')
sale_temp_tax_paid_id = sale_temp_tax_paid and sale_temp_tax_paid[1] or False
chart_temp_ids = obj_acc_chart_temp.search(cr, uid, [('name','=','Configurable Account Chart Template')], context=context)
chart_temp_id = chart_temp_ids and chart_temp_ids[0] or False
if s_tax * 100 > 0.0:
tax_account_ids = obj_acc_temp.search(cr, uid, [('name', '=', 'Tax Received')], context=context)
sales_tax_account_id = tax_account_ids and tax_account_ids[0] or False
vals_tax_code_temp = {
'name': _('TAX %s%%') % (s_tax*100),
'code': _('TAX %s%%') % (s_tax*100),
'parent_id': sale_temp_tax_id
}
new_tax_code_temp = obj_tax_code_temp.create(cr, uid, vals_tax_code_temp, context=context)
vals_paid_tax_code_temp = {
'name': _('TAX Received %s%%') % (s_tax*100),
'code': _('TAX Received %s%%') % (s_tax*100),
'parent_id': sale_temp_tax_paid_id
}
new_paid_tax_code_temp = obj_tax_code_temp.create(cr, uid, vals_paid_tax_code_temp, context=context)
sales_tax_temp = obj_tax_temp.create(cr, uid, {
'name': _('Sale TAX %s%%') % (s_tax*100),
'amount': s_tax,
'base_code_id': new_tax_code_temp,
'tax_code_id': new_paid_tax_code_temp,
'ref_base_code_id': new_tax_code_temp,
'ref_tax_code_id': new_paid_tax_code_temp,
'type_tax_use': 'sale',
'type': 'percent',
'sequence': 0,
'account_collected_id': sales_tax_account_id,
'account_paid_id': sales_tax_account_id,
'chart_template_id': chart_temp_id,
}, context=context)
if p_tax * 100 > 0.0:
tax_account_ids = obj_acc_temp.search(cr, uid, [('name', '=', 'Tax Paid')], context=context)
purchase_tax_account_id = tax_account_ids and tax_account_ids[0] or False
vals_tax_code_temp = {
'name': _('TAX %s%%') % (p_tax*100),
'code': _('TAX %s%%') % (p_tax*100),
'parent_id': pur_temp_tax_id
}
new_tax_code_temp = obj_tax_code_temp.create(cr, uid, vals_tax_code_temp, context=context)
vals_paid_tax_code_temp = {
'name': _('TAX Paid %s%%') % (p_tax*100),
'code': _('TAX Paid %s%%') % (p_tax*100),
'parent_id': pur_temp_tax_paid_id
}
new_paid_tax_code_temp = obj_tax_code_temp.create(cr, uid, vals_paid_tax_code_temp, context=context)
purchase_tax_temp = obj_tax_temp.create(cr, uid, {
'name': _('Purchase TAX %s%%') % (p_tax*100),
'amount': p_tax,
'base_code_id': new_tax_code_temp,
'tax_code_id': new_paid_tax_code_temp,
'ref_base_code_id': new_tax_code_temp,
'ref_tax_code_id': new_paid_tax_code_temp,
'type_tax_use': 'purchase',
'type': 'percent',
'sequence': 0,
'account_collected_id': purchase_tax_account_id,
'account_paid_id': purchase_tax_account_id,
'chart_template_id': chart_temp_id,
}, context=context)
if 'date_start' in res and 'date_stop' in res: if 'date_start' in res and 'date_stop' in res:
f_ids = fy_obj.search(cr, uid, [('date_start', '<=', res['date_start']), ('date_stop', '>=', res['date_stop']), ('company_id', '=', res['company_id'][0])], context=context) f_ids = fy_obj.search(cr, uid, [('date_start', '<=', res['date_start']), ('date_stop', '>=', res['date_stop']), ('company_id', '=', res['company_id'][0])], context=context)
if not f_ids: if not f_ids:

View File

@ -103,6 +103,7 @@
<field name="type">normal</field> <field name="type">normal</field>
<field name="state">open</field> <field name="state">open</field>
<field name="partner_id" ref="base.res_partner_seagate"/> <field name="partner_id" ref="base.res_partner_seagate"/>
<field name="contact_id" ref="base.res_partner_address_seagate"/>
</record> </record>
<record id="analytic_seagate_p2" model="account.analytic.account"> <record id="analytic_seagate_p2" model="account.analytic.account">
<field name="name">Seagate P2</field> <field name="name">Seagate P2</field>
@ -111,6 +112,7 @@
<field name="parent_id" ref="analytic_integration"/> <field name="parent_id" ref="analytic_integration"/>
<field name="state">open</field> <field name="state">open</field>
<field name="partner_id" ref="base.res_partner_seagate"/> <field name="partner_id" ref="base.res_partner_seagate"/>
<field name="contact_id" ref="base.res_partner_address_seagate"/>
</record> </record>
<record id="analytic_magasin_bml_1" model="account.analytic.account"> <record id="analytic_magasin_bml_1" model="account.analytic.account">
<field name="name">Magasin BML 1</field> <field name="name">Magasin BML 1</field>
@ -118,6 +120,7 @@
<field name="parent_id" ref="analytic_integration"/> <field name="parent_id" ref="analytic_integration"/>
<field name="type">normal</field> <field name="type">normal</field>
<field name="partner_id" ref="base.res_partner_15"/> <field name="partner_id" ref="base.res_partner_15"/>
<field name="contact_id" ref="base.res_partner_address_14"/>
</record> </record>
<record id="analytic_integration_c2c" model="account.analytic.account"> <record id="analytic_integration_c2c" model="account.analytic.account">
<field name="name">CampToCamp</field> <field name="name">CampToCamp</field>
@ -127,6 +130,7 @@
<field eval="time.strftime('%Y-12-31')" name="date"/> <field eval="time.strftime('%Y-12-31')" name="date"/>
<field name="parent_id" ref="analytic_integration"/> <field name="parent_id" ref="analytic_integration"/>
<field name="partner_id" ref="base.res_partner_c2c"/> <field name="partner_id" ref="base.res_partner_c2c"/>
<field name="contact_id" ref="base.res_partner_address_Camptocamp"/>
<field name="state">open</field> <field name="state">open</field>
</record> </record>
<record id="analytic_agrolait" model="account.analytic.account"> <record id="analytic_agrolait" model="account.analytic.account">
@ -135,13 +139,15 @@
<field name="parent_id" ref="analytic_customers"/> <field name="parent_id" ref="analytic_customers"/>
<field name="type">normal</field> <field name="type">normal</field>
<field name="partner_id" ref="base.res_partner_agrolait"/> <field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="contact_id" ref="base.res_partner_address_8"/>
</record> </record>
<record id="analytic_asustek" model="account.analytic.account"> <record id="analytic_asustek" model="account.analytic.account">
<field name="name">Asustek</field> <field name="name">Asustek</field>
<field name="code">4</field> <field name="code">4</field>
<field name="type">normal</field> <field name="type">normal</field>
<field name="parent_id" ref="analytic_customers"/> <field name="parent_id" ref="analytic_customers"/>
<field name="partner_id" ref="base.res_partner_asus"/> <field name="partner_id" ref="base.res_partner_asus"/>
<field name="contact_id" ref="base.res_partner_address_tang"/>
</record> </record>
<record id="analytic_distripc" model="account.analytic.account"> <record id="analytic_distripc" model="account.analytic.account">
<field name="name">DistriPC</field> <field name="name">DistriPC</field>
@ -149,6 +155,7 @@
<field name="parent_id" ref="analytic_customers"/> <field name="parent_id" ref="analytic_customers"/>
<field name="type">normal</field> <field name="type">normal</field>
<field name="partner_id" ref="base.res_partner_4"/> <field name="partner_id" ref="base.res_partner_4"/>
<field name="contact_id" ref="base.res_partner_address_7"/>
</record> </record>
<record id="analytic_sednacom" model="account.analytic.account"> <record id="analytic_sednacom" model="account.analytic.account">
<field name="name">Sednacom</field> <field name="name">Sednacom</field>
@ -158,6 +165,7 @@
<field name="parent_id" ref="analytic_partners"/> <field name="parent_id" ref="analytic_partners"/>
<field name="type">normal</field> <field name="type">normal</field>
<field name="partner_id" ref="base.res_partner_sednacom"/> <field name="partner_id" ref="base.res_partner_sednacom"/>
<field name="contact_id" ref="base.res_partner_address_11"/>
<field name="state">open</field> <field name="state">open</field>
</record> </record>
<record id="analytic_thymbra" model="account.analytic.account"> <record id="analytic_thymbra" model="account.analytic.account">
@ -168,6 +176,7 @@
<field name="type">normal</field> <field name="type">normal</field>
<field name="parent_id" ref="analytic_partners"/> <field name="parent_id" ref="analytic_partners"/>
<field name="partner_id" ref="base.res_partner_thymbra"/> <field name="partner_id" ref="base.res_partner_thymbra"/>
<field name="contact_id" ref="base.res_partner_address_thymbra"/>
<field name="state">open</field> <field name="state">open</field>
</record> </record>
<record id="analytic_leclerc" model="account.analytic.account"> <record id="analytic_leclerc" model="account.analytic.account">
@ -178,6 +187,7 @@
<field name="type">normal</field> <field name="type">normal</field>
<field name="parent_id" ref="analytic_partners"/> <field name="parent_id" ref="analytic_partners"/>
<field name="partner_id" ref="base.res_partner_11"/> <field name="partner_id" ref="base.res_partner_11"/>
<field name="contact_id" ref="base.res_partner_address_15"/>
</record> </record>
<record id="analytic_desertic_hispafuentes" model="account.analytic.account"> <record id="analytic_desertic_hispafuentes" model="account.analytic.account">
<field name="name">Desertic - Hispafuentes</field> <field name="name">Desertic - Hispafuentes</field>
@ -187,6 +197,7 @@
<field name="type">normal</field> <field name="type">normal</field>
<field name="parent_id" ref="analytic_partners"/> <field name="parent_id" ref="analytic_partners"/>
<field name="partner_id" ref="base.res_partner_desertic_hispafuentes"/> <field name="partner_id" ref="base.res_partner_desertic_hispafuentes"/>
<field name="contact_id" ref="base.res_partner_address_3000"/>
</record> </record>
<record id="analytic_tiny_at_work" model="account.analytic.account"> <record id="analytic_tiny_at_work" model="account.analytic.account">
<field name="name">OpenERP SA AT Work</field> <field name="name">OpenERP SA AT Work</field>
@ -194,6 +205,7 @@
<field name="type">normal</field> <field name="type">normal</field>
<field name="parent_id" ref="analytic_partners"/> <field name="parent_id" ref="analytic_partners"/>
<field name="partner_id" ref="base.res_partner_tinyatwork"/> <field name="partner_id" ref="base.res_partner_tinyatwork"/>
<field name="contact_id" ref="base.res_partner_address_tinyatwork"/>
</record> </record>
<record id="analytic_partners_camp_to_camp" model="account.analytic.account"> <record id="analytic_partners_camp_to_camp" model="account.analytic.account">
<field name="name">Camp to Camp</field> <field name="name">Camp to Camp</field>
@ -203,6 +215,7 @@
<field name="type">normal</field> <field name="type">normal</field>
<field name="parent_id" ref="analytic_partners"/> <field name="parent_id" ref="analytic_partners"/>
<field name="partner_id" ref="base.res_partner_c2c"/> <field name="partner_id" ref="base.res_partner_c2c"/>
<field name="contact_id" ref="base.res_partner_address_Camptocamp"/>
<field name="state">open</field> <field name="state">open</field>
</record> </record>
<record id="analytic_project_2_support" model="account.analytic.account"> <record id="analytic_project_2_support" model="account.analytic.account">

View File

@ -8,16 +8,16 @@
<field name="type">tree</field> <field name="type">tree</field>
<field eval="8" name="priority"/> <field eval="8" name="priority"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree toolbar="1" colors="red:(date&lt;current_date);black:(date&gt;=current_date);black:(date==False)" string="Analytic Accounts"> <tree toolbar="1" colors="red:state=='pending';grey:state in ('cancelled','close');blue:type=='view'" string="Analytic Accounts">
<field name="code"/>
<field name="complete_name"/> <field name="complete_name"/>
<field name="code" groups="base.group_extended"/>
<field name="quantity"/> <field name="quantity"/>
<field name="quantity_max"/>
<field name="date"/> <field name="date"/>
<field name="user_id" invisible="1"/> <field name="user_id" invisible="1"/>
<field name="parent_id" invisible="1"/> <field name="parent_id" invisible="1"/>
<field name="partner_id" invisible="1"/> <field name="partner_id" invisible="1"/>
<field name="state" invisible="1"/> <field name="state" invisible="1"/>
<field name="type" invisible="1"/>
</tree> </tree>
</field> </field>
</record> </record>
@ -57,11 +57,9 @@
<field name="type">tree</field> <field name="type">tree</field>
<field name="field_parent">child_complete_ids</field> <field name="field_parent">child_complete_ids</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree colors="blue:type == 'view';red:(date&lt;current_date);black:(date&gt;=current_date);black:(date==False)" string="Analytic account" toolbar="1"> <tree colors="blue:state=='pending';grey:state in ('close','cancelled');blue:type=='view'" string="Analytic account" toolbar="1">
<field name="name"/> <field name="name"/>
<field name="code"/> <field name="code" groups="base.group_extended"/>
<field name="quantity"/>
<field name="quantity_max"/>
<field name="debit"/> <field name="debit"/>
<field name="credit"/> <field name="credit"/>
<field name="balance"/> <field name="balance"/>
@ -83,9 +81,9 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Analytic account"> <form string="Analytic account">
<group colspan="4" col="6"> <group colspan="4" col="6">
<field name="name" select="1" colspan="4"/> <field name="name" colspan="4"/>
<field name="code" select="1"/> <field name="code" groups="base.group_extended"/>
<field name="parent_id" on_change="on_change_parent(parent_id)" groups="base.group_extended" domain="[('type','=','view')]"/> <field name="parent_id" on_change="on_change_parent(parent_id)" groups="base.group_extended"/>
<field name="company_id" on_change="on_change_company(company_id)" select="2" widget="selection" groups="base.group_multi_company" attrs="{'required': [('type','&lt;&gt;','view')]}"/> <field name="company_id" on_change="on_change_company(company_id)" select="2" widget="selection" groups="base.group_multi_company" attrs="{'required': [('type','&lt;&gt;','view')]}"/>
<field name="type" select="2"/> <field name="type" select="2"/>
</group> </group>
@ -194,7 +192,7 @@
<field name="journal_id" invisible="context.get('to_invoice', False)"/> <field name="journal_id" invisible="context.get('to_invoice', False)"/>
<field name="amount" sum="Total" invisible="context.get('to_invoice', False)"/> <field name="amount" sum="Total" invisible="context.get('to_invoice', False)"/>
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)" invisible="not context.get('to_invoice', False)"/> <field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)" invisible="not context.get('to_invoice', False)"/>
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total Quantity" invisible="not context.get('to_invoice', False)"/> <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total Quantity"/>
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" invisible="not context.get('to_invoice', False)"/> <field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" invisible="not context.get('to_invoice', False)"/>
<field domain="[('type','=','normal')]" name="account_id"/> <field domain="[('type','=','normal')]" name="account_id"/>
<field name="general_account_id" invisible="context.get('to_invoice', False)"/> <field name="general_account_id" invisible="context.get('to_invoice', False)"/>

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<document filename="Analytic Balance.pdf"> <document filename="Analytic Balance.pdf">
<template pageSize="(595.0,842.0)" title="Analytic Balance" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20"> <template title="Analytic Balance" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first"> <pageTemplate id="first">
<frame id="first" x1="31.0" y1="30.0" width="531" height="779"/> <frame id="first" x1="31.0" y1="30.0" width="531" height="779"/>
</pageTemplate> </pageTemplate>

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<document filename="test.pdf"> <document filename="test.pdf">
<template pageSize="(595.0,842.0)" title="Analytic Journal" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20"> <template title="Analytic Journal" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first"> <pageTemplate id="first">
<frame id="first" x1="28.0" y1="28.0" width="539" height="786"/> <frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
</pageTemplate> </pageTemplate>

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<document filename="Cost Ledger.pdf"> <document filename="Cost Ledger.pdf">
<template pageSize="(595.0,842.0)" title="Cost Ledger" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20"> <template title="Cost Ledger" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first"> <pageTemplate id="first">
<frame id="first" x1="28.0" y1="30.0" width="539" height="785"/> <frame id="first" x1="28.0" y1="30.0" width="539" height="785"/>
</pageTemplate> </pageTemplate>

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<document filename="test.pdf"> <document filename="test.pdf">
<template pageSize="(595.0,842.0)" title="Inverted Analytic Balance" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20"> <template title="Inverted Analytic Balance" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first"> <pageTemplate id="first">
<frame id="first" x1="28.0" y1="28.0" width="539" height="786"/> <frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
</pageTemplate> </pageTemplate>

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<document filename="Cost Ledger.pdf"> <document filename="Cost Ledger.pdf">
<template pageSize="(595.0,842.0)" title="Cost Ledger" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20"> <template title="Cost Ledger" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first"> <pageTemplate id="first">
<frame id="first" x1="30.0" y1="29.0" width="534" height="783"/> <frame id="first" x1="30.0" y1="29.0" width="534" height="783"/>
</pageTemplate> </pageTemplate>

View File

@ -33,13 +33,10 @@ import account_print_overdue
import account_aged_partner_balance import account_aged_partner_balance
#import tax_report #import tax_report
import account_tax_report import account_tax_report
import account_balance_landscape
import account_invoice_report import account_invoice_report
import account_report import account_report
import account_entries_report import account_entries_report
import account_analytic_entries_report import account_analytic_entries_report
import account_balance_sheet
import account_profit_loss
import account_treasury_report import account_treasury_report
import account_financial_report import account_financial_report

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<document filename="Account Balance.pdf"> <document filename="Account Balance.pdf">
<template pageSize="(595.0,842.0)" title="Account Balance" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20"> <template title="Account Balance" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first"> <pageTemplate id="first">
<frame id="first" x1="35.0" y1="35.0" width="525" height="772"/> <frame id="first" x1="35.0" y1="35.0" width="525" height="772"/>
</pageTemplate> </pageTemplate>

View File

@ -1,393 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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/>.
#
##############################################################################
import time
import locale
from report import report_sxw
parents = {
'tr':1,
'li':1,
'story': 0,
'section': 0
}
class account_balance_landscape(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(account_balance_landscape, self).__init__(cr, uid, name, context=context)
self.flag=1
self.dr_total= 0.00
self.cr_total= 0.00
self.parent_bal=0
self.status=0
self.done_total=0
self.baldiv={}
self.empty_parent=0
self.result_total = {}
self.total_for_perc=[]
self.localcontext.update({
'time': time,
'lines': self.lines,
'get_lines':self.get_lines,
'linesForTotal': self.linesForTotal,
'linesForYear': self.linesForYear,
'get_years':self.get_years,
'cal_total':self.cal_total,
'total_dr':self.total_dr,
'total_cr':self.total_cr
})
self.context = context
def linesForYear(self,form):
temp=0
years={}
global pattern
global show
global perc
global bal_zero
global ref_bal
pattern=form['compare_pattern']
if form['show_columns']!=1:
show=0
else:
show=form['show_columns']
if form['format_perc']!=1:
perc=0
else:
perc=form['format_perc']
if form['account_choice']=='bal_zero':
bal_zero=0
else:
bal_zero=1
ctx = self.context.copy()
if perc==1:
if form['select_account']!=False:
ref_ac=self.pool.get('account.account').browse(self.cr, self.uid, form['select_account'], ctx.copy())
if ref_ac.balance<>0.00:
ref_bal=ref_ac.balance
else:
ref_bal=1.00
else:
ref_bal='nothing'
else:
ref_bal='nothing'
self.done_total=1
self.total_for_perc=self.linesForTotal(form, ids={}, doneAccount={}, level=1)
self.done_total=0
for t1 in range(0,len(form['fiscalyear'])):
locale.setlocale(locale.LC_ALL, '')
self.result_total["sum_credit" + str(t1)]=locale.format("%.2f", self.result_total["sum_credit" + str(t1)], grouping=True)
self.result_total["sum_debit" + str(t1)]=locale.format("%.2f", self.result_total["sum_debit" + str(t1)], grouping=True)
for temp in range(0,len(form['fiscalyear'])):
fy=self.pool.get('account.fiscalyear').name_get(self.cr, self.uid, form['fiscalyear'][temp])
years["year"+str(temp)]=fy[0][1][12:16]
return [years]
def linesForTotal(self, form, ids={}, doneAccount={}, level=1):
if not self.done_total==1:
return [self.result_total]
accounts=[]
if not ids:
ids = self.ids
if not ids:
return []
ctx = self.context.copy()
for id in form['fiscalyear']:
tmp=[]
ctx['fiscalyear'] = id
ctx['periods'] = form['periods']
ctx['period_manner'] = form['period_manner']
ctx['state'] = form['context'].get('state','all')
tmp = self.pool.get('account.account').browse(self.cr, self.uid, ids, ctx.copy())
if tmp:
accounts.append(tmp)
merged_accounts=zip(*accounts)
# used to check for the frst record so all sum_credit and sum_debit r set to 0.00
if level==1:
doneAccount={}
for entry in merged_accounts:
if entry[0].id in doneAccount:
continue
doneAccount[entry[0].id] = 1
for k in range(0,len(entry)):
temp_credit=0.00
temp_debit=0.00
if entry[0].type <> 'view':
temp_credit+=entry[k].credit
temp_debit+=entry[k].debit
if self.flag==1:
self.result_total["sum_credit" + str(k)]=0.00
self.result_total["sum_debit" + str(k)]=0.00
if form['account_choice']=='bal_zero':
if temp_credit<>temp_debit:
self.result_total["sum_credit" + str(k)]+=temp_credit
self.result_total["sum_debit" + str(k)]+=temp_debit
else:
self.result_total["sum_credit" + str(k)]+=temp_credit
self.result_total["sum_debit" + str(k)]+=temp_debit
self.flag=2
if entry[0].child_id:
ids2 = [(x.code,x.id) for x in entry[0].child_id]
ids2.sort()
result_total_parent = self.linesForTotal(form, [x[1] for x in ids2], doneAccount, level+1)
return [self.result_total]
def lines(self, form, ids={}, done={}, level=1):
accounts=[]
if not ids:
ids = self.ids
if not ids:
return []
result = []
ctx = self.context.copy()
tmp1=[]
for id in form['fiscalyear']:
ctx['fiscalyear'] = id
ctx['periods'] = form['periods']
ctx['period_manner']=form['period_manner']
ctx['state'] = form['context'].get('state','all')
tmp1 = self.pool.get('account.account').browse(self.cr, self.uid, ids, ctx.copy())
if tmp1:
accounts.append(tmp1)
if level==1: #if parent is called,done is not empty when called again.
done={}
def cmp_code(x, y):
return cmp(x.code, y.code)
for n in range(0,len(accounts)):
accounts[n].sort(cmp_code)
merged_accounts=zip(*accounts)
for entry in merged_accounts:
j=0
checked=1
if form['account_choice']!='all': # if checked,include empty a/c;not otherwise
checked=0
if entry[0].id in done:
continue
done[entry[0].id] = 1
if entry[0].child_id: # this is for parent account,dont check 0 for it
checked=4
self.status=1 # for displaying it Bold
else:
self.status=0
if checked==0:
i=0
for i in range(0,len(entry)):
if bal_zero==0:
if entry[i].balance<>0.0:
checked=4
break
else:
checked=3
i=i+1
else:
if entry[i].credit <> 0.0 or entry[i].debit <> 0.0:
checked=4
break
else:
checked=3
i=i+1
if checked==3:
# this is the point where we skip those accounts which are encountered as empty ones
continue
self.empty_parent=0
else:
self.empty_parent=1
res = {
'code': entry[0].code,
'name': entry[0].name,
'level': level,
'status': self.status,
}
for j in range(0,len(entry)):
locale.setlocale(locale.LC_ALL, '')
res["debit"+str(j)]=locale.format("%.2f", entry[j].debit, grouping=True)
res["credit"+str(j)]=locale.format("%.2f", entry[j].credit, grouping=True)
res["balance"+str(j)]=locale.format("%.2f", entry[j].balance, grouping=True)
if j==0:
res["bal_cash"+str(j)]="0.00"
res["bal_perc"+str(j)]="0.00%"
else:
temp_cash=entry[j].balance - entry[j-1].balance
res["bal_cash"+str(j)]=locale.format("%.2f", temp_cash, grouping=True)
if entry[j-1].balance<>0.00:
temp_perc=(entry[j].balance - entry[j-1].balance )*100/entry[j-1].balance
else:
temp_perc=(entry[j].balance) *100
res["bal_perc"+str(j)]=locale.format("%.2f", temp_perc) + "%"
if ref_bal=='nothing':
if level==1:
self.parent_bal=1
else:
self.parent_bal=0
if self.parent_bal==1:
res["balance_perc"+str(j)]="/"
else:
if entry[j].balance==0.00:
if self.baldiv["baldiv"+str(level-1)+str(j)]<>0.00:
res["balance_perc"+str(j)]="0.00%"
else:
res["balance_perc"+str(j)]="/"
else:
if self.baldiv["baldiv"+str(level-1)+str(j)]<>0.00:
temp=self.baldiv["baldiv"+str(level-1)+str(j)]
temp1=(entry[j].balance * 100 )/ float(temp)
temp1=round(temp1,2)
res["balance_perc" + str(j)]=str(temp1)+"%"
else:
res["balance_perc"+str(j)]="/"
else:
res["balance_perc"+str(j)]=str( (entry[j].balance * 100 )/ float(ref_bal)) + "%"
result.append(res)
if entry[0].child_id:
for q in range(0,len(form['fiscalyear'])):
self.baldiv["baldiv"+str(level)+str(q)]=entry[q].balance
ids2 = [(x.code,x.id) for x in entry[0].child_id]
ids2.sort()
dir=[]
dir += self.lines(form, [x[1] for x in ids2], done, level+1)
if dir==[]:
for w in range(0,len(form['fiscalyear'])):
if entry[w].credit <> 0.0 or entry[w].debit <> 0.0 or entry[w].balance<>0.00:
dont_pop=1
break
else:
dont_pop=0
if dont_pop==1:
result +=dir
else:
result.pop(-1) # here we pop up the parent having its children as emprty accounts
else:
result +=dir
return result
def get_years(self, form):
result =[]
res={}
for temp in range(0, len(form['fiscalyear'])):
res={}
fy=self.pool.get('account.fiscalyear').name_get(self.cr, self.uid, form['fiscalyear'][temp])
res['year']=fy[0][1]
res['last_str']=temp
result.append(res)
self.linesForYear(form)
return result
def get_lines(self, year_dict, form):
final_result = []
res = {}
line_l = self.lines(form)
self.cal_total(year_dict)
if line_l:
for l in line_l:
res = {}
res['code'] = l['code']
res['name'] = l['name']
res['level'] = l['level']
for k,v in l.items():
if k.startswith('debit'+str(year_dict['last_str'])):
res['debit'] = v
if k.startswith('credit'+str(year_dict['last_str'])):
res['credit'] = v
if k.startswith('balance'+str(year_dict['last_str'])) and not k.startswith('balance_perc'+str(year_dict['last_str'])):
res['balance'] =v
if k.startswith('balance_perc'+str(year_dict['last_str'])) and not k.startswith('balance'+str(year_dict['last_str'])):
res['balance_perc'] = v
if form['compare_pattern'] == 'bal_perc':
if k.startswith('bal_perc'+str(year_dict['last_str'])):
res['pattern'] = v
elif form['compare_pattern'] == 'bal_cash':
if k.startswith('bal_cash'+str(year_dict['last_str'])):
res['pattern'] = v
else:
res['pattern'] = ''
final_result.append(res)
return final_result
def cal_total(self, year_dict):
total_l = self.result_total
if total_l:
for k,v in total_l.items():
if k.startswith('sum_debit'+str(year_dict['last_str'])):
self.dr_total = v
elif k.startswith('sum_credit'+str(year_dict['last_str'])):
self.cr_total = v
else:
continue
return True
def total_dr(self):
return self.dr_total
def total_cr(self):
return self.cr_total
report_sxw.report_sxw('report.account.account.balance.landscape', 'account.account', 'addons/account/report/account_balance_landscape.rml', parser=account_balance_landscape, header="internal landscape")
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

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