From 5de014638cb4cccfd73b3e5c13e37b9ed0e61009 Mon Sep 17 00:00:00 2001 From: Olivier Dony <> Date: Fri, 9 Jul 2010 11:10:29 +0200 Subject: [PATCH 01/17] [IMP] purchase: corrected module descriptor for v6 bzr revid: aline@aline-laptop-20100709091029-j1iadqtg1p66k5v4 --- addons/purchase/__openerp__.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py index f557997497b..471f5213b12 100644 --- a/addons/purchase/__openerp__.py +++ b/addons/purchase/__openerp__.py @@ -36,9 +36,7 @@ 'author': 'Tiny', 'website': 'http://www.openerp.com', 'depends': ['base', 'account', 'stock', 'process', 'procurement'], - 'init_xml': [], - 'update_xml': [ - + 'data': [ 'security/purchase_security.xml', 'security/ir.model.access.csv', 'purchase_workflow.xml', @@ -60,8 +58,9 @@ 'test/purchase_from_order.yml', 'test/purchase_from_manual.yml', # 'test/purchase_from_picking.yml', + 'purchase_unit_test.xml' ], - 'demo_xml': ['purchase_demo.xml','purchase_unit_test.xml'], + 'demo': ['purchase_demo.xml'], 'installable': True, 'active': False, 'certificate': '0057234283549', From 988067423d7e1b841f4539314f63e65960d95573 Mon Sep 17 00:00:00 2001 From: Mantavya Gajjar Date: Fri, 9 Jul 2010 14:42:12 +0530 Subject: [PATCH 02/17] [FIX]: fix a problem for the unreconcile of voucher [IMP]: improve the bank statement and cash statement bzr revid: mga@tinyerp.com-20100709091212-7unqfc73bs62isrv --- addons/account/account_cash_statement.py | 73 ++++++++++++++----- addons/account/account_view.xml | 26 +++++-- addons/account_cancel/account_cancel_view.xml | 13 ++-- .../wizard/account_voucher_unreconcile.py | 2 +- 4 files changed, 81 insertions(+), 33 deletions(-) diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py index 8380a19b411..5838f8cd422 100644 --- a/addons/account/account_cash_statement.py +++ b/addons/account/account_cash_statement.py @@ -67,19 +67,25 @@ class account_cash_statement(osv.osv): _inherit = 'account.bank.statement' - def _get_starting_balance(self, cr, uid, ids, name, arg, context=None): + def _get_starting_balance(self, cr, uid, ids, context=None): - """ Find starting balance " + """ Find starting balance @param name: Names of fields. @param arg: User defined arguments @return: Dictionary of values. - """ + """ res ={} for statement in self.browse(cr, uid, ids): amount_total=0.0 + + if statement.journal_id.type not in('cash'): + continue + for line in statement.starting_details_ids: amount_total+= line.pieces * line.number - res[statement.id]=amount_total + res[statement.id] = { + 'balance_start':amount_total + } return res def _balance_end_cash(self, cr, uid, ids, name, arg, context=None): @@ -116,7 +122,7 @@ class account_cash_statement(osv.osv): """ To get default journal for the object" @param name: Names of fields. @return: journal - """ + """ company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id journal = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', company_id)]) if journal: @@ -166,11 +172,10 @@ class account_cash_statement(osv.osv): company_id = company_pool.search(cr, uid, [])[0] return company_id - + _columns = { 'company_id':fields.many2one('res.company', 'Company', required=False), 'journal_id': fields.many2one('account.journal', 'Journal', required=True), - 'balance_start': fields.function(_get_starting_balance, store=True, method=True, string='Opening Balance', type='float',digits=(16,2), help="Opening balance based on cashBox"), 'balance_end_real': fields.float('Closing Balance', digits=(16,2), states={'confirm':[('readonly', True)]}, help="closing balance entered by the cashbox verifier"), 'state': fields.selection( [('draft', 'Draft'), @@ -205,8 +210,31 @@ class account_cash_statement(osv.osv): for i in starting_details_ids: if i and i[0] and i[1]: i[0], i[1] = 0, 0 - res = super(account_cash_statement, self).create(cr, uid, vals, context=context) - return res + res_id = super(account_cash_statement, self).create(cr, uid, vals, context=context) + res = self._get_starting_balance(cr, uid, [res_id]) + for rs in res: + super(account_cash_statement, self).write(cr, uid, rs, res.get(rs)) + return res_id + + def write(self, cr, uid, ids, vals, context=None): + """ + Update redord(s) comes in {ids}, with new value comes as {vals} + return True on success, False otherwise + + @param cr: cursor to database + @param user: id of current user + @param ids: list of record ids to be update + @param vals: dict of new values to be set + @param context: context arguments, like lang, time zone + + @return: True on success, False otherwise + """ + + super(account_cash_statement, self).write(cr, uid, ids, vals) + res = self._get_starting_balance(cr, uid, ids) + for rs in res: + super(account_cash_statement, self).write(cr, uid, rs, res.get(rs)) + return True def onchange_journal_id(self, cr, uid, statement_id, journal_id, context={}): """ Changes balance start and starting details if journal_id changes" @@ -300,16 +328,20 @@ class account_cash_statement(osv.osv): company_currency_id = res_users_obj.browse(cr, uid, uid, context=context).company_id.currency_id.id for st in self.browse(cr, uid, ids, context): + + self.write(cr, uid, [st.id], {'balance_end_real':st.balance_end}) + st.balance_end_real = st.balance_end + if not st.state == 'open': continue if not self._equal_balance(cr, uid, ids, st, context): - raise osv.except_osv(_('Error !'), _('Cash balance is not matching with closing balance !')) - - if not (abs((st.balance_end or 0.0) - st.balance_end_real) < 0.0001): - raise osv.except_osv(_('Error !'), - _('The statement balance is incorrect !\n') + - _('The expected balance (%.2f) is different than the computed one. (%.2f)') % (st.balance_end_real, st.balance_end)) + raise osv.except_osv(_('Error !'), _('CashBox Balance is not matching with Calculated Balance !')) + +# if not (abs((st.balance_end or 0.0) - st.balance_end_real) < 0.0001): +# raise osv.except_osv(_('Error !'), +# _('The statement balance is incorrect !\n') + +# _('The expected balance (%.2f) is different than the computed one. (%.2f)') % (st.balance_end_real, st.balance_end)) if (not st.journal_id.default_credit_account_id) \ or (not st.journal_id.default_debit_account_id): raise osv.except_osv(_('Configuration Error !'), @@ -435,7 +467,7 @@ class account_cash_statement(osv.osv): if move.reconcile_id and move.reconcile_id.line_ids: torec += map(lambda x: x.id, move.reconcile_id.line_ids) - #try: + if abs(move.reconcile_amount-move.amount)<0.0001: writeoff_acc_id = False @@ -447,13 +479,16 @@ class account_cash_statement(osv.osv): account_move_line_obj.reconcile(cr, uid, torec, 'statement', writeoff_acc_id=writeoff_acc_id, writeoff_period_id=st.period_id.id, writeoff_journal_id=st.journal_id.id, context=context) else: account_move_line_obj.reconcile_partial(cr, uid, torec, 'statement', context) - #except: - # raise osv.except_osv(_('Error !'), _('Unable to reconcile entry "%s": %.2f') % (move.name, move.amount)) if st.journal_id.entry_posted: account_move_obj.write(cr, uid, [move_id], {'state':'posted'}) done.append(st.id) - self.write(cr, uid, done, {'state':'confirm'}, context=context) + + vals = { + 'state':'confirm', + 'closing_date':time.strftime("%Y-%m-%d %H:%M:%S") + } + self.write(cr, uid, done, vals, context=context) return True def button_cancel(self, cr, uid, ids, context={}): diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 80fb20e1fad..854b98a45b8 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -465,7 +465,7 @@ - + @@ -518,6 +518,18 @@ tree,form [('journal_id.type', '=', 'bank')] + + + tree + + + + + + form + + + @@ -2285,7 +2297,7 @@ - + @@ -2318,7 +2330,7 @@ - + @@ -2349,7 +2361,7 @@ - + @@ -2360,13 +2372,13 @@ - + - - + + diff --git a/addons/account_cancel/account_cancel_view.xml b/addons/account_cancel/account_cancel_view.xml index bcb9fb4d34e..5f63b6cf6d7 100644 --- a/addons/account_cancel/account_cancel_view.xml +++ b/addons/account_cancel/account_cancel_view.xml @@ -1,16 +1,17 @@ - + account.journal.form account.journal form - + + - + - - - \ No newline at end of file + + + diff --git a/addons/account_voucher_payment/wizard/account_voucher_unreconcile.py b/addons/account_voucher_payment/wizard/account_voucher_unreconcile.py index 2bfffb372b7..ef30e1af69f 100644 --- a/addons/account_voucher_payment/wizard/account_voucher_unreconcile.py +++ b/addons/account_voucher_payment/wizard/account_voucher_unreconcile.py @@ -49,7 +49,7 @@ class account_voucher_unreconcile(osv.osv_memory): recs = [line.reconcile_id.id] for rec in recs: - obj_reconcile.unlink(cr, uid, rec) + reconcile_pool.unlink(cr, uid, rec) if res.remove: wf_service = netsvc.LocalService("workflow") From f2d8c68370a3ccca858721b0e0b6b277186adce5 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Fri, 9 Jul 2010 14:56:48 +0530 Subject: [PATCH 03/17] [Add] purchase_requisition: Add the requisition_id in procurement bzr revid: sbh@tinyerp.com-20100709092648-imdg0ji0is4to797 --- addons/purchase/purchase.py | 2 +- addons/purchase_requisition/purchase_requisition.py | 8 ++++++-- .../purchase_requisition_view.xml | 13 ++++++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 82e01735b00..d70ea13d39b 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -720,7 +720,7 @@ purchase_order_line() class procurement_order(osv.osv): _inherit = 'procurement.order' _columns = { - 'purchase_id': fields.many2one('purchase.order', 'Latest Requisition'), + 'purchase_id': fields.many2one('purchase.order', 'Purchase Order'), } def action_po_assign(self, cr, uid, ids, context={}): diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index db05650354b..7f7c10a0c8a 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -155,14 +155,17 @@ product_product() class procurement_order(osv.osv): _inherit = 'procurement.order' - + _columns = { + 'requisition_id' : fields.many2one('purchase.requisition','Latest Requisition') + } def make_po(self, cr, uid, ids, context=None): sequence_obj = self.pool.get('ir.sequence') res = super(procurement_order, self).make_po(cr, uid, ids, context=context) for proc_id, po_id in res.items(): procurement = self.browse(cr, uid, proc_id) + requisition_id=False if procurement.product_id.purchase_requisition: - self.pool.get('purchase.requisition').create(cr, uid, { + requisition_id=self.pool.get('purchase.requisition').create(cr, uid, { 'name': sequence_obj.get(cr, uid, 'purchase.order.requisition'), 'origin': procurement.name, 'date_end': procurement.date_planned, @@ -174,6 +177,7 @@ class procurement_order(osv.osv): })], 'purchase_ids': [(6,0,[po_id])] }) + self.write(cr,uid,proc_id,{'requisition_id':requisition_id}) return res procurement_order() diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml index 76aa70aaf42..b8e488ac0cf 100644 --- a/addons/purchase_requisition/purchase_requisition_view.xml +++ b/addons/purchase_requisition/purchase_requisition_view.xml @@ -168,6 +168,17 @@ - + + + procurement.form.inherit + form + procurement.order + + + + + + + From 9ef8ae2cef73fe4d1a745c40af1a0c783013dbbc Mon Sep 17 00:00:00 2001 From: apa-tiny Date: Fri, 9 Jul 2010 15:08:56 +0530 Subject: [PATCH 04/17] [IMP]:sale,purchase:imroved SQL reports bzr revid: apa@tinyerp.com-20100709093856-jqgcv6m4e8usswr1 --- addons/purchase/report/purchase_report.py | 4 ++-- addons/purchase/report/purchase_report_view.xml | 12 ++++++------ addons/sale/report/sale_report_view.xml | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py index 4f5abfe698d..7de197cf07e 100644 --- a/addons/purchase/report/purchase_report.py +++ b/addons/purchase/report/purchase_report.py @@ -58,10 +58,10 @@ class purchase_report(osv.osv): 'delay_pass':fields.float('Days to Deliver', digits=(16,2), readonly=True, group_operator="avg"), 'quantity': fields.float('# of Products', readonly=True), 'price_total': fields.float('Total Price', readonly=True), - 'price_average': fields.float('Unit Price', readonly=True, group_operator="avg"), + 'price_average': fields.float('Average Price', readonly=True, group_operator="avg"), 'negociation': fields.float('Purchase-Standard Price', readonly=True, group_operator="avg"), 'price_standard': fields.float('Products Value', readonly=True, group_operator="sum"), - 'nbr': fields.integer('# of PO Lines', readonly=True), + 'nbr': fields.integer('# of Lines', readonly=True), 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True), diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml index 757fc065a60..c8d88503b46 100644 --- a/addons/purchase/report/purchase_report_view.xml +++ b/addons/purchase/report/purchase_report_view.xml @@ -33,14 +33,14 @@ - + - + - + - - + + @@ -142,7 +142,7 @@ - Purchase Orders + Purchase Analysis purchase.report form tree,graph diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml index 6ab414aad8b..8ab66e79a5f 100644 --- a/addons/sale/report/sale_report_view.xml +++ b/addons/sale/report/sale_report_view.xml @@ -122,6 +122,7 @@ form tree,graph + {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]} From ae59b69c36155764df21c5ed84a410c39e3361f0 Mon Sep 17 00:00:00 2001 From: Mantavya Gajjar Date: Fri, 9 Jul 2010 15:09:38 +0530 Subject: [PATCH 05/17] [FIX]: fix a process of the bank and cash journal confirmation process bzr revid: mga@tinyerp.com-20100709093938-a4nvjkzzo46qoj5x --- addons/account/account_bank_statement.py | 2 +- addons/account/account_cash_statement.py | 6 +++--- addons/account/account_view.xml | 11 +++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 572cb9d04fd..e0d31b9cf18 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -159,7 +159,7 @@ class account_bank_statement(osv.osv): 'period_id': _get_period, } - def button_confirm(self, cr, uid, ids, context={}): + def button_confirm_bank(self, cr, uid, ids, context={}): done = [] res_currency_obj = self.pool.get('res.currency') res_users_obj = self.pool.get('res.users') diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py index 5838f8cd422..896b71e9f25 100644 --- a/addons/account/account_cash_statement.py +++ b/addons/account/account_cash_statement.py @@ -183,7 +183,7 @@ class account_cash_statement(osv.osv): ('open','Open')], 'State', required=True, states={'confirm': [('readonly', True)]}, readonly="1"), 'total_entry_encoding':fields.function(_get_sum_entry_encoding, method=True, store=True, string="Cash Transaction", help="Total cash transactions"), 'closing_date':fields.datetime("Closed On"), - 'balance_end': fields.function(_end_balance, method=True, store=True, string='Balance', help="Closing balance based on transactions"), + 'balance_end': fields.function(_end_balance, method=True, store=True, string='Balance', help="Closing balance based on Opening Balance and Transactions"), 'balance_end_cash': fields.function(_balance_end_cash, method=True, store=True, string='Balance', help="Closing balance based on cashBox"), 'starting_details_ids': fields.one2many('account.cashbox.line', 'starting_id', string='Opening Cashbox'), 'ending_details_ids': fields.one2many('account.cashbox.line', 'ending_id', string='Closing Cashbox'), @@ -313,7 +313,7 @@ class account_cash_statement(osv.osv): self.write(cr, uid, ids, vals) return True - def button_confirm(self, cr, uid, ids, context={}): + def button_confirm_cash(self, cr, uid, ids, context={}): """ Check the starting and ending detail of statement @return: True @@ -324,7 +324,7 @@ class account_cash_statement(osv.osv): account_move_obj = self.pool.get('account.move') account_move_line_obj = self.pool.get('account.move.line') account_bank_statement_line_obj = self.pool.get('account.bank.statement.line') - + company_currency_id = res_users_obj.browse(cr, uid, uid, context=context).company_id.currency_id.id for st in self.browse(cr, uid, ids, context): diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 854b98a45b8..de8bc843faa 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -427,6 +427,9 @@ +