[IMP] point_of_sale: Add some fields in readonly mode

bzr revid: stw@openerp.com-20120509081942-oo65eepvzi0whz03
This commit is contained in:
Stephane Wirtel 2012-05-09 10:19:42 +02:00
parent 8f4c7e161d
commit 2def801d80
2 changed files with 115 additions and 39 deletions

View File

@ -36,20 +36,42 @@ _logger = logging.getLogger(__name__)
class pos_config(osv.osv):
_name = 'pos.config'
POS_CONFIG_STATE = [('draft', 'Draft'),('active', 'Active'),('inactive', 'Inactive'),('deprecated', 'Deprecated')]
POS_CONFIG_STATE = [
('draft', 'Draft'),
('active', 'Active'),
('inactive', 'Inactive'),
('deprecated', 'Deprecated')
]
_columns = {
'name' : fields.char('Name', size=32, select=1, required=True),
'journal_ids' : fields.many2many('account.journal', 'pos_config_journal_rel', 'pos_config_id', 'journal_id', 'Payment Methods', domain="[('journal_user', '=', True )]"),
'shop_id' : fields.many2one('sale.shop', 'Shop', required=True, select=1),
'journal_id' : fields.many2one('account.journal', 'Journal', required=True, select=1, domain=[('type', '=', 'sale')]),
'profit_account_id' : fields.many2one('account.account', 'Profit Account', required=True, select=1),
'loss_account_id' : fields.many2one('account.account', 'Loss Account', required=True, select=1),
'authorized_cashbox_diff' : fields.integer('Authorized Cashbox Difference (%)'),
'authorized_cashbox_diff_fixed' : fields.integer('Authorized Cashbox Difference (Fixed Amount)'),
'name' : fields.char('Name', size=32,
select=1,
required=True,
readonly=True,
states={'draft' : [('readonly', False)]}
),
'journal_ids' : fields.many2many('account.journal',
'pos_config_journal_rel',
'pos_config_id',
'journal_id',
'Payment Methods',
domain="[('journal_user', '=', True )]",
readonly=True,
states={'draft' : [('readonly', False)]}
),
'shop_id' : fields.many2one('sale.shop', 'Shop',
required=True,
select=1,
readonly=True,
states={'draft' : [('readonly', False)]}
),
'journal_id' : fields.many2one('account.journal', 'Journal',
required=True,
select=1,
domain=[('type', '=', 'sale')],
readonly=True,
states={'draft' : [('readonly', False)]}
),
'iface_self_checkout' : fields.boolean('Self Checkout Mode'),
'iface_websql' : fields.boolean('WebSQL (to store data)'),
'iface_led' : fields.boolean('LED Interface'),
@ -59,17 +81,19 @@ class pos_config(osv.osv):
'iface_barscan' : fields.boolean('BarScan Interface'),
'iface_vkeyboard' : fields.boolean('Virtual KeyBoard Interface'),
'state' : fields.selection(POS_CONFIG_STATE, 'State', required=True, readonly=True),
'state' : fields.selection(POS_CONFIG_STATE, 'State',
required=True,
readonly=True),
'sequence_id' : fields.many2one('ir.sequence', 'Sequence', readonly=True),
# Add a sequence when we create a new pos.config object
'user_id' : fields.many2one('res.users', 'User'),
'sequence_id' : fields.many2one('ir.sequence', 'Sequence',
readonly=True),
'user_id' : fields.many2one('res.users', 'User',
readonly=True,
states={'draft' : [('readonly', False)]}
),
}
#def default_get(self, cr, uid, fieldnames, context=None):
# return dict()
_defaults = {
'state' : 'draft',
'user_id' : lambda obj, cr, uid, context: uid,
@ -165,21 +189,45 @@ class pos_session(osv.osv):
#]
_columns = {
'config_id' : fields.many2one('pos.config', 'PoS', required=True, select=1, domain="[('state', '=', 'active')]"),
'config_id' : fields.many2one('pos.config', 'PoS',
required=True,
select=1,
domain="[('state', '=', 'active')]",
readonly=True,
states={'draft' : [('readonly', False)]}
),
'name' : fields.char('Session Sequence', size=32, required=True, select=1, readonly=1),
'user_id' : fields.many2one('res.users', 'User', required=True, select=1),
'start_at' : fields.datetime('Opening Date'), #, readonly=True),
'name' : fields.char('Session Sequence', size=32,
required=True,
select=1,
readonly=True,
states={'draft' : [('readonly', False)]}
),
'user_id' : fields.many2one('res.users', 'User',
required=True,
select=1,
readonly=True,
states={'draft' : [('readonly', False)]}
),
'start_at' : fields.datetime('Opening Date'),
'stop_at' : fields.datetime('Closing Date'),
'state' : fields.selection(POS_SESSION_STATE, 'State', required=True, readonly=True, select=1),
'state' : fields.selection(POS_SESSION_STATE, 'State',
required=True,
readonly=True,
select=1),
'cash_register_id' : fields.many2one('account.bank.statement', 'Bank Account Statement', ondelete='cascade'),
'cash_register_id' : fields.many2one('account.bank.statement', 'Bank Account Statement',
ondelete='cascade'),
'details_ids' : fields.related('cash_register_id', 'details_ids',
type='one2many', relation='account.cashbox.line',
string='CashBox Lines'),
'journal_ids' : fields.related('config_id', 'journal_ids', type='many2many', relation='account.journal', string='Journals'),
'journal_ids' : fields.related('config_id', 'journal_ids',
type='many2many',
readonly=True,
relation='account.journal',
string='Journals'),
'order_ids' : fields.one2many('pos.order', 'session_id', 'Orders'),
}
@ -296,7 +344,14 @@ class pos_session(osv.osv):
if not session_id:
pos_config_proxy = self.pool.get('pos.config')
pos_config_ids = pos_config_proxy.search(cr, uid, [('user_id', '=', uid),('state', '=', 'active')], limit=1, order='create_date desc')
domain = [
('user_id', '=', uid),
('state', '=', 'active'),
]
pos_config_ids = pos_config_proxy.search(cr, uid, domain,
limit=1,
order='create_date desc',
context=context)
if not pos_config_ids:
raise osv.except_osv(_('Error !'),
@ -311,6 +366,7 @@ class pos_session(osv.osv):
'journal_id' : config.journal_id.id,
'user_id': current_user.id,
}
session_id = self.create(cr, uid, values, context=context)
wkf_service = netsvc.LocalService('workflow')
wkf_service.trg_validate(uid, 'pos.session', session_id, 'open', cr)

View File

@ -774,13 +774,6 @@
<separator string="Accounting" colspan="4" />
<field name="shop_id" widget="selection" />
<field name="journal_id" widget="selection" />
<separator string="Cash Differences" colspan="4" />
<field name="profit_account_id" />
<field name="loss_account_id" />
<field name="authorized_cashbox_diff" />
<field name="authorized_cashbox_diff_fixed" />
</page>
<page string="Interfaces">
<field name="iface_self_checkout" />
@ -792,12 +785,10 @@
<field name="iface_barscan" />
<field name="iface_vkeyboard" />
</page>
<page string="Other">
<page string="Others">
<field name="user_id" />
<field name="sequence_id" />
</page>
</notebook>
<group colspan="4" col="6">
@ -816,13 +807,41 @@
<field name="model">pos.config</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="PoS Configuration">
<tree string="PoS Configuration" colors="grey:state == 'inactive'">
<field name="name" />
<field name="user_id" />
<field name="journal_id" />
<field name="shop_id" />
<field name="state" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_pos_config_search">
<field name="name">pos.config.search.view</field>
<field name="model">pos.config</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="PoS Config">
<filter string="Active" domain="[('state', '=', 'active')]" />
<filter string="Inactive" domain="[('state', '=', 'inactive')]" />
<separator orientation="vertical"/>
<field name="name" />
<field name="user_id" />
<field name="journal_id" />
<field name="shop_id" />
<newline />
<group expand="0" string="Group By...">
<filter string="User" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}" />
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by' : 'journal_id'}" />
<filter string="Shop" icon="terp-go-home" domain="[]" context="{'group_by' : 'shop_id'}" />
</group>
</search>
</field>
</record>
<act_window
id="act_pos_config_sessions"
name="Sessions"
@ -831,11 +850,12 @@
domain="[('config_id', '=', active_id)]" />
<record model="ir.actions.act_window" id="action_pos_config_pos">
<field name="name">Point of Sales</field>
<field name="name">PoS Config</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">pos.config</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_pos_config_search" />
</record>
<menuitem