diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index f1570caab91..430e1597e9d 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -117,6 +117,12 @@ class account_bank_statement(osv.osv): res[statement_id] = (currency_id, currency_names[currency_id]) return res + def _get_statement(self, cr, uid, ids, context=None): + result = {} + for line in self.pool.get('account.bank.statement.line').browse(cr, uid, ids, context=context): + result[line.statement_id.id] = True + return result.keys() + _order = "date desc, id desc" _name = "account.bank.statement" _description = "Bank Statement" @@ -131,7 +137,11 @@ class account_bank_statement(osv.osv): states={'confirm':[('readonly',True)]}), 'balance_end_real': fields.float('Ending Balance', digits_compute=dp.get_precision('Account'), states={'confirm': [('readonly', True)]}), - 'balance_end': fields.function(_end_balance, store=True, # store=True for account_cash_statement + 'balance_end': fields.function(_end_balance, + store = { + 'account.bank.statement': (lambda self, cr, uid, ids, c={}: ids, ['line_ids','move_line_ids'], 10), + 'account.bank.statement.line': (_get_statement, ['amount'], 10), + }, string="Balance", help='Balance as calculated based on Starting Balance and transaction lines'), 'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True), 'line_ids': fields.one2many('account.bank.statement.line', @@ -306,7 +316,7 @@ class account_bank_statement(osv.osv): return self.write(cr, uid, ids, {'state':'confirm'}, context=context) def check_status_condition(self, cr, uid, state, journal_type='bank'): - return state=='draft' + return state in ('draft','open') def button_confirm_bank(self, cr, uid, ids, context=None): obj_seq = self.pool.get('ir.sequence') diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py index e856454703f..a74053bc694 100644 --- a/addons/account/account_cash_statement.py +++ b/addons/account/account_cash_statement.py @@ -184,8 +184,18 @@ class account_cash_statement(osv.osv): res['end'] = end_l return res + def _get_statement(self, cr, uid, ids, context=None): + result = {} + for line in self.pool.get('account.bank.statement.line').browse(cr, uid, ids, context=context): + result[line.statement_id.id] = True + return result.keys() + _columns = { - 'total_entry_encoding': fields.function(_get_sum_entry_encoding, store=True, string="Cash Transaction", help="Total cash transactions"), + 'total_entry_encoding': fields.function(_get_sum_entry_encoding, string="Cash Transaction", help="Total cash transactions", + store = { + 'account.bank.statement': (lambda self, cr, uid, ids, c={}: ids, ['line_ids','move_line_ids'], 10), + 'account.bank.statement.line': (_get_statement, ['amount'], 10), + }), 'closing_date': fields.datetime("Closed On"), 'balance_end_cash': fields.function(_balance_end_cash, store=True, string='Balance', help="Closing balance based on cashBox"), 'starting_details_ids': fields.one2many('account.cashbox.line', 'starting_id', string='Opening Cashbox'), @@ -201,14 +211,6 @@ class account_cash_statement(osv.osv): } def create(self, cr, uid, vals, context=None): - sql = [ - ('journal_id', '=', vals.get('journal_id', False)), - ('state', '=', 'open') - ] - open_jrnl = self.search(cr, uid, sql) - if open_jrnl: - raise osv.except_osv(_('Error'), _('You can not have two open register for the same journal!')) - if self.pool.get('account.journal').browse(cr, uid, vals['journal_id'], context=context).type == 'cash': open_close = self._get_cash_open_close_box_lines(cr, uid, context) if vals.get('starting_details_ids', False): diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 45345554605..ee6a6fa1430 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -2556,7 +2556,7 @@ action = pool.get('res.config').next(cr, uid, [], context) - + diff --git a/addons/point_of_sale/account_bank_statement.py b/addons/point_of_sale/account_bank_statement.py index 8671bf51850..9cc39ced45c 100644 --- a/addons/point_of_sale/account_bank_statement.py +++ b/addons/point_of_sale/account_bank_statement.py @@ -25,9 +25,9 @@ from osv import fields, osv class account_journal(osv.osv): _inherit = 'account.journal' _columns = { - 'auto_cash': fields.boolean('Automatic Opening', help="This field authorize the automatic creation of the cashbox"), - 'check_dtls': fields.boolean('Check Details', help="This field authorize Validation of Cashbox without checking ending details"), - 'journal_users': fields.many2many('res.users', 'pos_journal_users', 'journal_id', 'user_id', 'Users'), + 'auto_cash': fields.boolean('Automatic Opening', help="This field authorize the automatic creation of the cashbox, without control of the initial balance."), + 'check_dtls': fields.boolean('Control Balance Before Closing', help="This field authorize Validation of Cashbox without controlling the closing balance."), + 'journal_user': fields.boolean('PoS Payment Method', help="Check this box if this journal define a payment method that can be used in point of sales."), } _defaults = { 'check_dtls': False, @@ -48,14 +48,6 @@ class account_cash_statement(osv.osv): else: return True - def _user_allow(self, cr, uid, statement_id, context=None): - statement = self.browse(cr, uid, statement_id, context=context) - if (not statement.journal_id.journal_users) and uid == 1: return True - for user in statement.journal_id.journal_users: - if uid == user.id: - return True - return False - def _get_cash_open_box_lines(self, cr, uid, context=None): res = super(account_cash_statement,self)._get_cash_open_box_lines(cr, uid, context) curr = [0.01, 0.02, 0.05, 0.10, 0.20, 0.50] diff --git a/addons/point_of_sale/account_statement_demo.xml b/addons/point_of_sale/account_statement_demo.xml index 7cdbbf99596..e8ee0a7c349 100644 --- a/addons/point_of_sale/account_statement_demo.xml +++ b/addons/point_of_sale/account_statement_demo.xml @@ -1,75 +1,17 @@ - - Visa Journal - VIJ - cash - - - - - - - - - - - - - Bancontact Journal - BACJ - cash - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + - + diff --git a/addons/point_of_sale/account_statement_view.xml b/addons/point_of_sale/account_statement_view.xml index 7cbb9e0b058..ee922d4fee6 100644 --- a/addons/point_of_sale/account_statement_view.xml +++ b/addons/point_of_sale/account_statement_view.xml @@ -11,11 +11,10 @@ - + + - - @@ -65,7 +64,7 @@ - + diff --git a/addons/point_of_sale/point_of_sale_demo.xml b/addons/point_of_sale/point_of_sale_demo.xml index c6fbefb1f6b..fe38cb98cb1 100644 --- a/addons/point_of_sale/point_of_sale_demo.xml +++ b/addons/point_of_sale/point_of_sale_demo.xml @@ -5,7 +5,7 @@ - + diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 4d4669be77d..3ffc5f7dc92 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -130,11 +130,16 @@ + + + + + + + - - @@ -724,6 +729,16 @@ + + All Sales Orders + ir.actions.act_window + pos.order + form + tree,form + [] + + + Invoices ir.actions.act_window diff --git a/addons/point_of_sale/test/00_register_open.yml b/addons/point_of_sale/test/00_register_open.yml index 12adb6543c1..7d5aabbcdc3 100644 --- a/addons/point_of_sale/test/00_register_open.yml +++ b/addons/point_of_sale/test/00_register_open.yml @@ -13,5 +13,5 @@ I check that I have some bank statements open for the admin user - !python {model: account.bank.statement}: | - ids = self.search(cr, uid, [('state', '=', 'open'), ('user_id', '=', 1)]) - assert (len(ids)>0), 'No statement open for the admin user !' + ids = self.search(cr, uid, [('state', 'in', ('open','new')), ('user_id', '=', 1)]) + assert (len(ids)>0), 'No statement open for the admin user!' diff --git a/addons/point_of_sale/wizard/pos_box_entries.py b/addons/point_of_sale/wizard/pos_box_entries.py index 102439fff2d..873f35f024d 100644 --- a/addons/point_of_sale/wizard/pos_box_entries.py +++ b/addons/point_of_sale/wizard/pos_box_entries.py @@ -37,12 +37,9 @@ def get_journal(self, cr, uid, context=None): journal_obj = self.pool.get('account.journal') statement_obj = self.pool.get('account.bank.statement') - cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users WHERE user_id = %s ORDER BY journal_id", (uid, )) - j_ids = map(lambda x1: x1[0], cr.fetchall()) - ids = journal_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)], context=context) - obj_ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', ids)], context=context) - res_obj = journal_obj.read(cr, uid, ids, ['journal_id'], context=context) - res_obj = [(r1['id']) for r1 in res_obj] + + j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context) + obj_ids = statement_obj.search(cr, uid, [('state', '=', 'open'), ('user_id', '=', uid), ('journal_id', 'in', j_ids)], context=context) res = statement_obj.read(cr, uid, obj_ids, ['journal_id'], context=context) res = [(r['journal_id']) for r in res] res.insert(0, ('', '')) diff --git a/addons/point_of_sale/wizard/pos_close_statement.py b/addons/point_of_sale/wizard/pos_close_statement.py index 222338f6e10..92dee2f8e4c 100644 --- a/addons/point_of_sale/wizard/pos_close_statement.py +++ b/addons/point_of_sale/wizard/pos_close_statement.py @@ -38,27 +38,27 @@ class pos_close_statement(osv.osv_memory): mod_obj = self.pool.get('ir.model.data') statement_obj = self.pool.get('account.bank.statement') journal_obj = self.pool.get('account.journal') - cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users " - "WHERE user_id=%s ORDER BY journal_id", (uid, )) - j_ids = map(lambda x1: x1[0], cr.fetchall()) - journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)], context=context) - ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', journal_ids)], context=context) - for journal in journal_obj.browse(cr, uid, journal_ids, context=context): - if not ids: - raise osv.except_osv(_('Message'), _('Cash registers are already closed.')) - else: - if not journal.check_dtls: - statement_obj.button_confirm_cash(cr, uid, ids, context=context) - tree_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_tree') + j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context) + ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', j_ids)], context=context) + if not ids: + raise osv.except_osv(_('Message'), _('Cash registers are already closed.')) + for statement in statement_obj.browse(cr, uid, ids, context=context): + statement_obj.write(cr, uid, [statement.id], { + 'balance_end_real': statement.balance_end + }, context=context) + if not statement.journal_id.check_dtls: + statement_obj.button_confirm_cash(cr, uid, [statement.id], context=context) + + tree_res = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_cash_statement_pos_tree') tree_id = tree_res and tree_res[1] or False form_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_form2') form_id = form_res and form_res[1] or False search_id = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_pos_confirm_cash_statement_filter') - + return { 'domain': "[('id', 'in', " + str(ids) + ")]", - 'name': 'Close Statements', + 'name': _('Close Cash Registers'), 'view_type': 'form', 'view_mode': 'tree, form', 'search_view_id': search_id and search_id[1] or False, @@ -66,7 +66,6 @@ class pos_close_statement(osv.osv_memory): 'views': [(tree_id, 'tree'), (form_id, 'form')], 'type': 'ir.actions.act_window' } - pos_close_statement() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_open_statement.py b/addons/point_of_sale/wizard/pos_open_statement.py index 1e14a0cf652..038ca3b6990 100644 --- a/addons/point_of_sale/wizard/pos_open_statement.py +++ b/addons/point_of_sale/wizard/pos_open_statement.py @@ -42,46 +42,48 @@ class pos_open_statement(osv.osv_memory): journal_obj = self.pool.get('account.journal') if context is None: context = {} - company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id - cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users " - "WHERE user_id = %s ORDER BY journal_id"% (uid, )) - j_ids = map(lambda x1: x1[0], cr.fetchall()) - journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)], context=context) - for journal in journal_obj.browse(cr, uid, journal_ids, context=context): + st_ids = [] + j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context) + + for journal in journal_obj.browse(cr, uid, j_ids, context=context): ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)], context=context) if len(ids): + st_ids += ids continue - number = '' if journal.sequence_id: number = sequence_obj.get_id(cr, uid, journal.sequence_id.id) else: number = sequence_obj.get(cr, uid, 'account.cash.statement') - data.update({'journal_id': journal.id, - 'company_id': company_id, - 'user_id': uid, - 'state': 'draft', - 'name': number }) + data.update({ + 'journal_id': journal.id, + 'user_id': uid, + 'state': 'draft', + 'name': number + }) statement_id = statement_obj.create(cr, uid, data, context=context) - statement_obj.button_open(cr, uid, [statement_id], context) + st_ids.append(statement_id) - tree_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_tree') + if journal.auto_cash: + statement_obj.button_open(cr, uid, [statement_id], context) + + tree_res = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_cash_statement_pos_tree') tree_id = tree_res and tree_res[1] or False form_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_form2') form_id = form_res and form_res[1] or False search_id = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_pos_open_cash_statement_filter') return { - 'domain': "[('state', '=', 'open'),('id', 'in',[ "+','.join(map(str,j_ids))+"])]", - 'name': 'Open Statement', + 'domain': "[('id', 'in',[ "+','.join(map(str,st_ids))+"])]", + 'name': _('Open Cash Registers'), 'view_type': 'form', 'view_mode': 'tree, form', 'search_view_id': search_id and search_id[1] or False , 'res_model': 'account.bank.statement', 'views': [(tree_id, 'tree'), (form_id, 'form')], - 'context': {'search_default_open': 1}, + 'context': {}, 'type': 'ir.actions.act_window' } pos_open_statement() diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml index 6127c166f40..f9939190a7c 100644 --- a/addons/sale/report/sale_report_view.xml +++ b/addons/sale/report/sale_report_view.xml @@ -59,7 +59,7 @@ domain="[('date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]" help="Sales order created in current month"/>