[IMP] Useability and misc fixes in POS

bzr revid: fp@tinyerp.com-20110925210020-5jvd7x38asnbzv5b
This commit is contained in:
Fabien Pinckaers
2011-09-25 23:00:20 +02:00
parent 17dcdf8136
commit d0f8dc83e5
13 changed files with 90 additions and 132 deletions
+12 -2
View File
@@ -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')
+11 -9
View File
@@ -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):
+1 -1
View File
@@ -2556,7 +2556,7 @@ action = pool.get('res.config').next(cr, uid, [], context)
<group col="6" colspan="4">
<field name="name" select="1"/>
<field name="company_id" select="1" groups="base.group_multi_company"/>
<field name="journal_id" on_change="onchange_journal_id(journal_id)" domain="[('type','=','cash')]" 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="period_id" select="1"/>
<field name="currency" invisible="1"/>
+3 -11
View File
@@ -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]
@@ -1,75 +1,17 @@
<?xml version="1.0" ?>
<openerp>
<data>
<record id="pos_visa_journal" model="account.journal">
<field name="name">Visa Journal</field>
<field name="code">VIJ</field>
<field name="type">cash</field>
<field eval="1" name="check_dtls"/>
<field name="view_id" ref="account.account_journal_view"/>
<field name="sequence_id" ref="account.sequence_journal"/>
<field model="account.account" name="default_credit_account_id" ref="account.a_sale"/>
<field model="account.account" name="default_debit_account_id" ref="account.a_sale"/>
<field name="user_id" ref="base.user_root"/>
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
</record>
<!-- <record id="pos_cash_journal" model="account.journal">
<field name="name">Cash Journal</field>
<field name="code">CAJ</field>
<field name="type">cash</field>
<field name="view_id" ref="account.account_journal_view"/>
<field name="sequence_id" ref="account.sequence_journal"/>
<field model="account.account" name="default_credit_account_id" ref="account.a_sale"/>
<field model="account.account" name="default_debit_account_id" ref="account.a_sale"/>
<field name="user_id" ref="base.user_root"/>
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
</record>
-->
<record id="pos_bankcard_journal" model="account.journal">
<field name="name">Bancontact Journal</field>
<field name="code">BACJ</field>
<field name="type">cash</field>
<field eval="1" name="check_dtls"/>
<field name="view_id" ref="account.account_journal_view"/>
<field name="sequence_id" ref="account.sequence_journal"/>
<field model="account.account" name="default_credit_account_id" ref="account.a_sale"/>
<field model="account.account" name="default_debit_account_id" ref="account.a_sale"/>
<field name="user_id" ref="base.user_root"/>
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
</record>
<record id="account.sales_journal" model="account.journal">
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
</record>
<record id="account.refund_sales_journal" model="account.journal">
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
</record>
<record id="account.expenses_journal" model="account.journal">
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
</record>
<record id="account.refund_expenses_journal" model="account.journal">
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
</record>
<record id="account.bank_journal" model="account.journal">
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
<field eval="True" name="journal_user"/>
</record>
<record id="account.check_journal" model="account.journal">
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
</record>
<record id="stock.stock_journal" model="account.journal">
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
<field eval="True" name="journal_user"/>
</record>
<record id="account.cash_journal" model="account.journal">
<field eval="[(6,0,[ref('base.user_root')])]" name="journal_users"/>
<field eval="True" name="journal_user"/>
<field eval="1" name="check_dtls"/>
</record>
@@ -11,11 +11,10 @@
<page string="Point of Sale">
<group col="6" colspan="4">
<separator colspan="6" string="Extended Configuration"/>
<field name="check_dtls" groups="point_of_sale.group_pos_manager" string="Check Cash Balance"/>
<field name="journal_user"/>
<field name="auto_cash"/>
<field name="check_dtls"/>
</group>
<separator colspan="4" string="POS Users"/>
<field name="journal_users" nolabel="1" colspan="4"/>
</page>
</xpath>
</field>
@@ -65,7 +64,7 @@
<search string="Search Cash Statements">
<group>
<filter string="Open" domain="[('state','=','open')]" icon="terp-document-new" name="open"/>
<filter string="Confirm" domain="[('state','=','confirm')]" icon="terp-camera_test"/>
<filter string="Closed" domain="[('state','=','confirm')]" icon="terp-camera_test"/>
<separator orientation="vertical"/>
<field name="date"/>
<field name="name"/>
+1 -1
View File
@@ -5,7 +5,7 @@
<field name="groups_id" eval="[(4,ref('group_pos_user'))]"/>
</record>
<record id="account.cash_journal" model="account.journal">
<field eval="[(6, 0, [ref('base.user_root')])]" name="journal_users"/>
<field eval="True" name="journal_user"/>
</record>
<record id="product_product_putmoneyforchange0" model="product.product">
+17 -2
View File
@@ -130,11 +130,16 @@
<field name="arch" type="xml">
<search string="Search Sales Order">
<filter icon="terp-document-new" string="New" domain="[('state','=','draft')]"/>
<filter icon="gtk-apply" string="Done" domain="[('state','in',('paid','invoiced','done'))]"/>
<separator orientation="vertical"/>
<filter icon="terp-check" string="Invoiced" domain="[('state','=','invoiced')]"/>
<filter icon="gtk-convert" string="Posted" domain="[('state','=','done')]"/>
<separator orientation="vertical"/>
<filter icon="terp-go-month" string="Today" domain="[('date_order','&gt;=',datetime.date.today().strftime('%%Y-%%m-%%d 00:00:00')),('date_order','&lt;=',datetime.date.today().strftime('%%Y-%%m-%%d 23:59:59'))]"/>
<filter icon="gtk-go-forward" string="Yesterday" domain="[('date_order','&lt;',datetime.date.today().strftime('%%Y-%%m-%%d 00:00:00')),('date_order','&gt;=',(datetime.date.today() - relativedelta(days=1)).strftime('%%Y-%%m-%%d 00:00:00'))]"/>
<separator orientation="vertical"/>
<field name="name"/>
<field name="partner_id"/>
<field name="user_id"/>
<field name="date_order" string="Order date"/>
<newline/>
<group expand="0" string="Group By..." groups="base.group_extended">
<filter string="Customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
@@ -724,6 +729,16 @@
<menuitem name="Reporting" parent="menu_point_root" id="menu_point_rep" sequence="20" groups="group_pos_manager"/>
<!-- Invoice -->
<record model="ir.actions.act_window" id="action_pos_sale_all">
<field name="name">All Sales Orders</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">pos.order</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
</record>
<menuitem parent="menu_point_root" id="menu_point_ofsale_all" action="action_pos_sale_all" sequence="1"/>
<record model="ir.actions.act_window" id="action_pos_invoice">
<field name="name">Invoices</field>
<field name="type">ir.actions.act_window</field>
@@ -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!'
@@ -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, ('', ''))
@@ -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:
@@ -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()
+1 -1
View File
@@ -59,7 +59,7 @@
domain="[('date','&lt;=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','&gt;=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]"
help="Sales order created in current month"/>
<filter icon="terp-go-month"
string=" Month-1 "
string="Month-1"
domain="[('date','&lt;=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('date','&gt;=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]"
help="Sales order created in last month"/>
<separator orientation="vertical"/>