[FIX] point_of_sale: Fix some bugs
bzr revid: stw@openerp.com-20120507130946-13i3yq82oi69zjjt
This commit is contained in:
parent
d7b5e5a6ef
commit
6cefb2c802
|
@ -74,6 +74,21 @@ class account_cash_statement(osv.osv):
|
|||
res.sort()
|
||||
return res
|
||||
|
||||
def search(self, cr, uid, domain, offset=0, limit=None, order=None, context=None, count=False):
|
||||
if not context:
|
||||
context = {}
|
||||
import pdb
|
||||
pdb.set_trace()
|
||||
pos_session_id = context.pop('pos_session_id', False) or False
|
||||
if pos_session_id and isinstance(pos_session_id, (int, long)):
|
||||
session = self.pool.get('pos.session').browse(cr, uid, pos_session_id, context=context)
|
||||
return [
|
||||
statement.id
|
||||
for order in session.order_ids
|
||||
for statement in order.statement_ids
|
||||
]
|
||||
return super(account_cash_statement, self).search(cr, uid, domain, offset=offset, limit=limit, order=order, context=context, count=count)
|
||||
|
||||
account_cash_statement()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -151,7 +151,15 @@ 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 = [
|
||||
# ('new', 'Opening Control'),
|
||||
# ('opened', 'Opened'),
|
||||
# ('closed', 'Closing Control'),
|
||||
# ('posted', 'Closed & Posted'),
|
||||
#]
|
||||
|
||||
_columns = {
|
||||
'config_id' : fields.many2one('pos.config', 'PoS', required=True, select=1, domain="[('state', '=', 'active')]"),
|
||||
|
@ -168,6 +176,7 @@ class pos_session(osv.osv):
|
|||
'details_ids' : fields.related('cash_register_id', 'details_ids',
|
||||
type='one2many', relation='account.cashbox.line',
|
||||
string='CashBox Lines'),
|
||||
'order_ids' : fields.one2many('pos.order', 'session_id', 'Orders'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
@ -180,7 +189,7 @@ 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, name, context=None):
|
||||
def _create_cash_register(self, cr, uid, pos_config, context=None):
|
||||
if not pos_config:
|
||||
return False
|
||||
|
||||
|
@ -196,7 +205,6 @@ class pos_session(osv.osv):
|
|||
return False
|
||||
|
||||
values = {
|
||||
'name' : name,
|
||||
'journal_id' : journal_id,
|
||||
}
|
||||
cash_register_id = proxy.create(cr, uid, values, context=context)
|
||||
|
@ -211,7 +219,7 @@ class pos_session(osv.osv):
|
|||
name = pos_config.sequence_id._next()
|
||||
values.update(
|
||||
name=name,
|
||||
cash_register_id=self._create_cash_register(cr, uid, pos_config, name, context=context),
|
||||
cash_register_id=self._create_cash_register(cr, uid, pos_config, context=context),
|
||||
)
|
||||
else:
|
||||
raise osv.except_osv(_('Error!'), _('There is no POS Config attached to this POS Session'))
|
||||
|
@ -228,14 +236,33 @@ class pos_session(osv.osv):
|
|||
|
||||
record.write(values, context=context)
|
||||
|
||||
record.cash_register_id.button_open(context=context)
|
||||
|
||||
return True
|
||||
|
||||
def wkf_action_close(self, cr, uid, ids, context=None):
|
||||
# Close CashBox
|
||||
record.cash_register_id.button_confirm_cash(context=context)
|
||||
return self.write(cr, uid, ids, {'state' : 'close', 'stop_at' : time.strftime('%Y-%m-%d %H:%M:%S')}, context=context)
|
||||
|
||||
def wkf_action_post(self, cr, uid, ids, context=None):
|
||||
self._confirm_orders(cr, uid, ids, context=context)
|
||||
return self.write(cr, uid, ids, {'state' : 'post'}, context=context)
|
||||
|
||||
def _confirm_orders(self, cr, uid, ids, context=None):
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
|
||||
for session in self.browse(cr, uid, ids, context=context):
|
||||
for order in session.order_ids:
|
||||
if order.state != 'paid':
|
||||
raise osv.except_osv(
|
||||
_('Error !'),
|
||||
_("You can not confirm all orders of this session, because they have not the 'paid' status"))
|
||||
else:
|
||||
wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr)
|
||||
|
||||
return True
|
||||
|
||||
def get_current_session(self, cr, uid, context=None):
|
||||
current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||
domain = [
|
||||
|
@ -295,6 +322,7 @@ class pos_order(osv.osv):
|
|||
session_id = self.pool.get('pos.session').get_current_session()
|
||||
for order in orders:
|
||||
# order :: {'name': 'Order 1329148448062', 'amount_paid': 9.42, 'lines': [[0, 0, {'discount': 0, 'price_unit': 1.46, 'product_id': 124, 'qty': 5}], [0, 0, {'discount': 0, 'price_unit': 0.53, 'product_id': 62, 'qty': 4}]], 'statement_ids': [[0, 0, {'journal_id': 7, 'amount': 9.42, 'name': '2012-02-13 15:54:12', 'account_id': 12, 'statement_id': 21}]], 'amount_tax': 0, 'amount_return': 0, 'amount_total': 9.42}
|
||||
order['session_id'] = session_id
|
||||
order_obj = self.pool.get('pos.order')
|
||||
# get statements out of order because they will be generated with add_payment to ensure
|
||||
# the module behavior is the same when using the front-end or the back-end
|
||||
|
@ -547,11 +575,14 @@ class pos_order(osv.osv):
|
|||
msg = _('There is no receivable account defined to make payment for the partner: "%s" (id:%d)') % (order.partner_id.name, order.partner_id.id,)
|
||||
raise osv.except_osv(_('Configuration Error !'), msg)
|
||||
|
||||
statement_id = statement_obj.search(cr,uid, [
|
||||
('journal_id', '=', int(data['journal'])),
|
||||
('company_id', '=', curr_company),
|
||||
('user_id', '=', uid),
|
||||
('state', '=', 'open')], context=context)
|
||||
context.pop('pos_session_id', False)
|
||||
domain = [
|
||||
('journal_id', '=', int(data['journal'])),
|
||||
('company_id', '=', curr_company),
|
||||
('user_id', '=', uid),
|
||||
('state', '=', 'open')
|
||||
]
|
||||
statement_id = statement_obj.search(cr,uid, domain, context=context)
|
||||
if len(statement_id) == 0:
|
||||
raise osv.except_osv(_('Error !'), _('You have to open at least one cashbox'))
|
||||
if statement_id:
|
||||
|
|
|
@ -923,7 +923,7 @@
|
|||
|
||||
|
||||
<record model="ir.actions.act_window" id="action_pos_session">
|
||||
<field name="name">Point of Sales Session</field>
|
||||
<field name="name">PoS Sessions</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">pos.session</field>
|
||||
<field name="view_type">form</field>
|
||||
|
@ -943,15 +943,14 @@
|
|||
src_model="pos.session"
|
||||
res_model="pos.order"
|
||||
domain="[('session_id', '=', active_id)]" />
|
||||
<!--
|
||||
TODO
|
||||
|
||||
<act_window
|
||||
id="act_pos_session_statements"
|
||||
name="Statements"
|
||||
src_model="pos.session"
|
||||
res_model="account.bank.statement"
|
||||
domain="[]" />
|
||||
-->
|
||||
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>
|
||||
|
|
|
@ -34,7 +34,7 @@ class pos_confirm(osv.osv_memory):
|
|||
for order in order_obj.browse(cr, uid, ids, context=context):
|
||||
todo = True
|
||||
for line in order.statement_ids:
|
||||
if line.statement_id.state <> 'confirm':
|
||||
if line.statement_id.state != 'confirm':
|
||||
todo = False
|
||||
break
|
||||
if todo:
|
||||
|
|
|
@ -32,6 +32,8 @@ class account_journal(osv.osv):
|
|||
def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
|
||||
if not context:
|
||||
context = {}
|
||||
import pdb
|
||||
pdb.set_trace()
|
||||
|
||||
session_id = context.get('pos_session_id', False) or False
|
||||
|
||||
|
@ -44,6 +46,8 @@ class account_journal(osv.osv):
|
|||
|
||||
return super(account_journal, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count)
|
||||
|
||||
account_journal()
|
||||
|
||||
class pos_make_payment(osv.osv_memory):
|
||||
_name = 'pos.make.payment'
|
||||
_description = 'Point of Sale Payment'
|
||||
|
@ -61,7 +65,7 @@ class pos_make_payment(osv.osv_memory):
|
|||
amount = order.amount_total - order.amount_paid
|
||||
data = self.read(cr, uid, ids, context=context)[0]
|
||||
# this is probably a problem of osv_memory as it's not compatible with normal OSV's
|
||||
#data['journal'] = data['journal'][0]
|
||||
data['journal'] = data['journal_id'][0]
|
||||
|
||||
if amount != 0.0:
|
||||
order_obj.add_payment(cr, uid, active_id, data, context=context)
|
||||
|
@ -95,8 +99,17 @@ class pos_make_payment(osv.osv_memory):
|
|||
}
|
||||
|
||||
def _default_journal(self, cr, uid, context=None):
|
||||
res = pos_box_entries.get_journal(self, cr, uid, context=context)
|
||||
return len(res)>1 and res[1][0] or False
|
||||
if not context:
|
||||
context = {}
|
||||
pos_session_id = context.get('pos_session_id', False) or False
|
||||
|
||||
if isinstance(pos_session_id, (long, int)):
|
||||
session = self.pool.get('pos.session').browse(cr, uid, pos_session_id, context=context)
|
||||
for journal in session.config_id.journal_ids:
|
||||
if journal.type == 'cash':
|
||||
return journal.id
|
||||
|
||||
return False
|
||||
|
||||
def _default_amount(self, cr, uid, context=None):
|
||||
order_obj = self.pool.get('pos.order')
|
||||
|
@ -107,16 +120,15 @@ class pos_make_payment(osv.osv_memory):
|
|||
return False
|
||||
|
||||
_columns = {
|
||||
#'journal': fields.selection(pos_box_entries.get_journal, "Payment Mode", required=True),
|
||||
'journal_id' : fields.many2one('account.journal', 'Payment Mode', required=True),
|
||||
'amount': fields.float('Amount', digits=(16,2), required= True),
|
||||
'payment_name': fields.char('Payment Reference', size=32),
|
||||
'payment_date': fields.date('Payment Date', required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'journal_id' : _default_journal,
|
||||
'payment_date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'amount': _default_amount,
|
||||
#'journal': _default_journal
|
||||
}
|
||||
|
||||
pos_make_payment()
|
||||
|
|
|
@ -10,8 +10,7 @@
|
|||
<form string="Add payment :">
|
||||
<group colspan="4" col="4" >
|
||||
<group colspan="4">
|
||||
<!--<field name="journal"/>-->
|
||||
<field name="journal_id" widget="selection" />
|
||||
<field name="journal_id" />
|
||||
<field name="amount" />
|
||||
<field name="payment_name"/>
|
||||
</group>
|
||||
|
|
Loading…
Reference in New Issue