[IMP] point_of_sale: Add a list of bank statement in the PoS Session

bzr revid: stw@openerp.com-20120509142211-z1x3c24tya2rcvyb
This commit is contained in:
Stephane Wirtel 2012-05-09 16:22:11 +02:00
parent a4dd08a340
commit b4d61d8de9
2 changed files with 63 additions and 40 deletions

View File

@ -178,9 +178,6 @@ pos_config()
class pos_session(osv.osv):
_name = 'pos.session'
#"status [BUTTON TEXT]" -> utiliser
# "opening control (open) -> opened (cashbox control) -> closing control (close) -> closed & posted"
#POS_SESSION_STATE = [('new', 'New'),('opened', 'Opened'),('closed', 'Closed'),('posted', 'Posted')]
POS_SESSION_STATE = [
('opening_control', 'Opening Control'), # Signal open
('opened', 'Opened'), # Signal closing
@ -188,6 +185,18 @@ class pos_session(osv.osv):
('closed', 'Closed'),
]
def _compute_cash_register_id(self, cr, uid, ids, fieldnames, args, context=None):
result = dict.fromkeys(ids, False)
for record in self.browse(cr, uid, ids, context=context):
cash_register_id = False
for bank_statement in record.statement_ids:
if bank_statement.journal_id.type == 'cash':
cash_register_id = bank_statement.id
break
result[record.id] = cash_register_id
return result
_columns = {
'config_id' : fields.many2one('pos.config', 'PoS',
required=True,
@ -217,8 +226,9 @@ class pos_session(osv.osv):
readonly=True,
select=1),
'cash_register_id' : fields.many2one('account.bank.statement', 'Bank Account Statement',
ondelete='cascade'),
'cash_register_id' : fields.function(_compute_cash_register_id, method=True,
type='many2one', relation='account.bank.statement',
string='Cash Register', store=True),
'details_ids' : fields.related('cash_register_id', 'details_ids',
type='one2many', relation='account.cashbox.line',
@ -229,6 +239,13 @@ class pos_session(osv.osv):
relation='account.journal',
string='Journals'),
'order_ids' : fields.one2many('pos.order', 'session_id', 'Orders'),
'statement_ids' : fields.many2many('account.bank.statement',
'pos_session_statement_rel',
'session_id',
'statement_id',
'Bank Statement',
readonly=True),
}
_defaults = {
@ -241,49 +258,35 @@ class pos_session(osv.osv):
('uniq_name', 'unique(name)', "The name of this POS Session must be unique !"),
]
def _create_cash_register(self, cr, uid, pos_config, user_id, context=None):
if not pos_config:
return False
proxy = self.pool.get('account.bank.statement')
journal_id = False
for journal in pos_config.journal_ids:
if journal.type == 'cash':
journal_id = journal.id
break
if not journal_id:
return False
values = {
'journal_id' : journal_id,
'user_id' : pos_config.user_id and pos_config.user_id.id or uid,
}
cash_register_id = proxy.create(cr, uid, values, context=context)
return cash_register_id
def create(self, cr, uid, values, context=None):
config_id = values.get('config_id', False) or False
pos_config = None
if config_id:
pos_config = self.pool.get('pos.config').browse(cr, uid, config_id, context=context)
name = pos_config.sequence_id._next()
user_id = values.get('user_id', uid) or uid
values.update(
name=name,
cash_register_id=self._create_cash_register(cr, uid, pos_config, user_id=user_id, context=context),
)
else:
raise osv.except_osv(_('Error!'), _('There is no POS Config attached to this POS Session'))
bank_statement_ids = []
for journal in pos_config.journal_ids:
bank_values = {
'journal_id' : journal.id,
'user_id' : pos_config.user_id and pos_config.user_id.id or uid,
}
statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context)
bank_statement_ids.append(statement_id)
values.update({
'name' : pos_config.sequence_id._next(),
'statement_ids' : [(6, 0, bank_statement_ids)]
})
return super(pos_session, self).create(cr, uid, values, context=context)
def unlink(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids, context=context):
if obj.cash_register_id:
obj.cash_register_id.unlink(context=context)
for statement in obj.statement_ids:
statement.unlink(context=context)
return True
def on_change_config(self, cr, uid, ids, config_id, context=None):
@ -305,14 +308,20 @@ class pos_session(osv.osv):
record.write(values, context=context)
record.cash_register_id.button_open(context=context)
for st in record.statement_ids:
st.button_open(context=context)
return True
def wkf_action_closing_control(self, cr, uid, ids, context=None):
# Close CashBox
for record in self.browse(cr, uid, ids, context=context):
record.cash_register_id.button_confirm_cash(context=context)
for st in record.statement_ids:
if st.journal_id.type == 'cash':
st.button_confirm_cash(context=context)
if st.journal_id.type == 'bank':
st.button_confirm_bank(context=context)
return self.write(cr, uid, ids, {'state' : 'closing_control', 'stop_at' : time.strftime('%Y-%m-%d %H:%M:%S')}, context=context)
def wkf_action_close(self, cr, uid, ids, context=None):

View File

@ -894,6 +894,19 @@
</tree>
</field>
</page>
<page string="Accouting">
<field name="statement_ids" colspan="4" nolabel="1">
<tree string="Statements">
<field name="name" />
<field name="currency" />
<field name="journal_id" />
<field name="period_id" />
<field name="account_id" />
<field name="difference" />
<field name="state" />
</tree>
</field>
</page>
</notebook>
<group colspan="4" col="5">
@ -976,6 +989,7 @@
domain="[]"
context="{'pos_session_id' : active_id}" />
<record id="view_pos_order_filter" model="ir.ui.view">
<field name="name">pos.order.list.select</field>
<field name="model">pos.order</field>