diff --git a/addons/point_of_sale/__terp__.py b/addons/point_of_sale/__terp__.py
index 82c1e5a31da..3127af647df 100644
--- a/addons/point_of_sale/__terp__.py
+++ b/addons/point_of_sale/__terp__.py
@@ -50,6 +50,7 @@ Main features :
'wizard/pos_open_statement.xml',
'wizard/pos_close_statement.xml',
'wizard/pos_box_entries.xml',
+ 'wizard/pos_box_out.xml',
'pos_view.xml',
'pos_sequence.xml',
'posrule_data.xml',
diff --git a/addons/point_of_sale/pos_view.xml b/addons/point_of_sale/pos_view.xml
index 265bdb6d836..0a72e5f1a50 100644
--- a/addons/point_of_sale/pos_view.xml
+++ b/addons/point_of_sale/pos_view.xml
@@ -844,17 +844,17 @@ invoiced
string="Refloat"
action="action_box_entries"
id="menu_wizard_enter_jrnl" sequence="3" />
-
+ id="pos_entries2"/>-->
diff --git a/addons/point_of_sale/wizard/__init__.py b/addons/point_of_sale/wizard/__init__.py
index 17ddf3c5c61..641736a3460 100644
--- a/addons/point_of_sale/wizard/__init__.py
+++ b/addons/point_of_sale/wizard/__init__.py
@@ -22,7 +22,6 @@
import wizard_pos_payment
import wizard_default_journal
-import wizard_refund_order
import wizard_scan_product
import wizard_receipt
import wizard_return
@@ -42,5 +41,6 @@ import pos_get_sale
import pos_open_statement
import pos_close_statement
import pos_box_entries
+import pos_box_out
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/pos_box_entries.py b/addons/point_of_sale/wizard/pos_box_entries.py
index c33bc13a285..7ef9eed6634 100644
--- a/addons/point_of_sale/wizard/pos_box_entries.py
+++ b/addons/point_of_sale/wizard/pos_box_entries.py
@@ -26,28 +26,29 @@ from tools.misc import UpdateableStr
from mx import DateTime
from tools.translate import _
-
-class pos_box_entries(osv.osv_memory):
- _name = 'pos.box.entries'
- _description = 'Pos Box Entries'
-
- def _get_journal(self,cr,uid,context):
- """
+def get_journal(self,cr,uid,context):
+ """
@summary: Make the selection list of Cash Journal .
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param context: A standard dictionary
@return :Return the list of journal
- """
+ """
- obj = self.pool.get('account.journal')
- user = self.pool.get('res.users').browse(cr, uid, uid)
- ids = obj.search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', user.company_id.id)])
- res = obj.read(cr, uid, ids, ['id', 'name'], context)
- res = [(r['id'], r['name']) for r in res]
- res.insert(0, ('', ''))
- return res
+ obj = self.pool.get('account.journal')
+ user = self.pool.get('res.users').browse(cr, uid, uid)
+ ids = obj.search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', user.company_id.id)])
+ res = obj.read(cr, uid, ids, ['id', 'name'], context)
+ res = [(r['id'], r['name']) for r in res]
+ res.insert(0, ('', ''))
+ return res
+
+class pos_box_entries(osv.osv_memory):
+ _name = 'pos.box.entries'
+ _description = 'Pos Box Entries'
+
+
def _get_income_product(self,cr,uid,context):
@@ -70,7 +71,7 @@ class pos_box_entries(osv.osv_memory):
_columns = {
'name': fields.char('Name', size=32,required=True),
- 'journal_id': fields.selection(_get_journal, "Journal",required=True),
+ 'journal_id': fields.selection(get_journal, "Journal",required=True),
'product_id': fields.selection(_get_income_product, "Operation",required=True),
'amount' :fields.float('Amount', digits=(16,2)),
'ref':fields.char('Ref', size=32),
diff --git a/addons/point_of_sale/wizard/pos_box_out.py b/addons/point_of_sale/wizard/pos_box_out.py
new file mode 100644
index 00000000000..c2dcec98a49
--- /dev/null
+++ b/addons/point_of_sale/wizard/pos_box_out.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import netsvc
+from osv import osv,fields
+from tools.translate import _
+from tools.misc import UpdateableStr
+from mx import DateTime
+from tools.translate import _
+import pos_box_entries
+print dir(pos_box_entries)
+
+class pos_box_out(osv.osv_memory):
+ _name = 'pos.box.out'
+ _description = 'Pos Box Out'
+
+ def _get_expense_product(self,cr,uid,context):
+
+ """
+ @summary: Make the selection list of expense product.
+ @param self: The object pointer.
+ @param cr: A database cursor
+ @param uid: ID of the user currently logged in
+ @param context: A standard dictionary
+ @return :Return of operation of product
+ """
+ obj = self.pool.get('product.product')
+ company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
+ ids = obj.search(cr, uid, ['&', ('expense_pdt', '=', True), '|', ('company_id', '=', company_id), ('company_id', '=', None)])
+ res = obj.read(cr, uid, ids, ['id', 'name'], context)
+ res = [(r['id'], r['name']) for r in res]
+ res.insert(0, ('', ''))
+ return res
+
+ _columns = {
+ 'name': fields.char('Name', size=32,required=True),
+ 'journal_id': fields.selection(pos_box_entries.get_journal, "Journal",required=True),
+ 'product_id': fields.selection(_get_expense_product, "Operation",required=True),
+ 'amount' :fields.float('Amount', digits=(16,2)),
+ 'ref':fields.char('Ref', size=32),
+ }
+ _defaults = {
+ 'journal_id': lambda *a: 1,
+ 'product_id': lambda *a: 1,
+ }
+ def get_out(self, cr, uid, ids, context):
+
+ """
+ @summary: Create the entries in the CashBox .
+ @param self: The object pointer.
+ @param cr: A database cursor
+ @param uid: ID of the user currently logged in
+ @param context: A standard dictionary
+ @return :Return of operation of product
+ """
+ args = {}
+ statement_obj= self.pool.get('account.bank.statement')
+ statement_line_obj=self.pool.get('account.bank.statement.line')
+ product_obj= self.pool.get('product.template')
+ productp_obj= self.pool.get('product.product')
+ res_obj = self.pool.get('res.users')
+ for data in self.read(cr, uid, ids):
+
+ curr_company = res_obj.browse(cr,uid,uid).company_id.id
+ statement_id = statement_obj.search(cr,uid, [('journal_id','=',data['journal_id']),('company_id','=',curr_company),('user_id','=',uid),('state','=','open')])
+ monday = (DateTime.now() + DateTime.RelativeDateTime(weekday=(DateTime.Monday,0))).strftime('%Y-%m-%d')
+ sunday = (DateTime.now() + DateTime.RelativeDateTime(weekday=(DateTime.Sunday,0))).strftime('%Y-%m-%d')
+ done_statmt = statement_obj.search(cr,uid, [('date','>=',monday+' 00:00:00'),('date','<=',sunday+' 23:59:59'),('journal_id','=',data['journal_id']),('company_id','=',curr_company),('user_id','=',uid)])
+ stat_done = statement_obj.browse(cr,uid, done_statmt)
+ address_u = res_obj.browse(cr,uid,uid).address_id
+ am = 0.0
+
+ amount_check = productp_obj.browse(cr,uid,data['product_id']).am_out or False
+ for st in stat_done:
+ for s in st.line_ids:
+ if address_u and s.partner_id==address_u.partner_id and s.am_out:
+ am+=s.amount
+ if (-data['amount'] or 0.0)+ am <-(res_obj.browse(cr,uid,uid).company_id.max_diff or 0.0) and amount_check:
+ val = (res_obj.browse(cr,uid,uid).company_id.max_diff or 0.0)+ am
+ raise osv.except_osv(_('Error !'), _('The maximum value you can still withdraw is exceeded. \n Remaining value is equal to %d ')%(val))
+
+ acc_id = product_obj.browse(cr,uid,data['product_id']).property_account_income
+ if not acc_id:
+ raise osv.except_osv(_('Error !'), _('please check that account is set to %s')%(product_obj.browse(cr,uid,data['product_id']).name))
+ if not statement_id:
+ raise osv.except_osv(_('Error !'), _('You have to open at least one cashbox'))
+ if statement_id:
+ statement_id = statement_id[0]
+ if not statement_id:
+ statement_id = statement_obj.create(cr,uid,{'date':time.strftime('%Y-%m-%d 00:00:00'),
+ 'journal_id':data['journal_id'],
+ 'company_id':curr_company,
+ 'user_id':uid,
+ })
+ args['statement_id']= statement_id
+ args['journal_id']= data['journal_id']
+ if acc_id:
+ args['account_id']= acc_id.id
+ amount= data['amount'] or 0.0
+ if data['amount'] > 0:
+ amount= -data['amount']
+ args['amount'] = amount
+ if productp_obj.browse(cr,uid,data['product_id']).am_out:
+ args['am_out'] = True
+ args['ref'] = data['ref'] or ''
+ args['name'] = "%s: %s "%(product_obj.browse(cr,uid,data['product_id']).name, data['name'].decode('utf8'))
+ address_u = res_obj.browse(cr,uid,uid).address_id
+ if address_u:
+ partner_id = address_u.partner_id and address_u.partner_id.id or None
+ args['partner_id'] = partner_id
+ statement_line_id = statement_line_obj.create(cr, uid, args)
+ return {}
+
+pos_box_out()
\ No newline at end of file
diff --git a/addons/point_of_sale/wizard/pos_box_out.xml b/addons/point_of_sale/wizard/pos_box_out.xml
new file mode 100644
index 00000000000..c634b4cf997
--- /dev/null
+++ b/addons/point_of_sale/wizard/pos_box_out.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+ Box Out
+ pos.box.out
+ form
+
+
+
+
+
+
+ Box Out
+ ir.actions.act_window
+ pos.box.out
+ form
+ form
+ new
+
+
+
+
diff --git a/addons/point_of_sale/wizard/wizard_refund_order.py b/addons/point_of_sale/wizard/wizard_refund_order.py
deleted file mode 100644
index 9ecfff0c19b..00000000000
--- a/addons/point_of_sale/wizard/wizard_refund_order.py
+++ /dev/null
@@ -1,232 +0,0 @@
-# -*- encoding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved
-# $Id$
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-
-import time
-import netsvc
-from tools.misc import UpdateableStr
-import wizard
-import pooler
-from mx import DateTime
-from tools.translate import _
-
-
-entry_form = '''
-
-'''
-
-def _get_journal(self,cr,uid,context):
- pool = pooler.get_pool(cr.dbname)
- obj = pool.get('account.journal')
- user = pool.get('res.users').browse(cr, uid, uid)
- ids = obj.search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', user.company_id.id)])
- res = obj.read(cr, uid, ids, ['id', 'name'], context)
- res = [(r['id'], r['name']) for r in res]
- res.insert(0, ('', ''))
- return res
-
-def _get_pdt(self,cr,uid,context):
- pool = pooler.get_pool(cr.dbname)
- obj = pool.get('product.product')
- ids = obj.search(cr, uid, [('income_pdt', '=', True)])
- res = obj.read(cr, uid, ids, ['id', 'name'], context)
- res = [(r['id'], r['name']) for r in res]
- res.insert(0, ('', ''))
- return res
-
-def _get_pdt_exp(self,cr,uid,context):
- pool = pooler.get_pool(cr.dbname)
- obj = pool.get('product.product')
- company_id = pool.get('res.users').browse(cr, uid, uid).company_id.id
- ids = obj.search(cr, uid, ['&', ('expense_pdt', '=', True), '|', ('company_id', '=', company_id), ('company_id', '=', None)])
- res = obj.read(cr, uid, ids, ['id', 'name'], context)
- res = [(r['id'], r['name']) for r in res]
- res.insert(0, ('', ''))
- return res
-
-#entry_fields = {
-# 'journal_id': {'string': 'Journal', 'type': 'selection', 'selection': _get_journal, 'required':True},
-# 'product_id': {'string': 'Operation', 'type': 'selection', 'selection':_get_pdt , 'required':True},
-# 'amount': {'string': 'Amount', 'type': 'float'},
-# 'name': {'string': 'Name', 'type': 'char', 'size': '32', 'required':True},
-# 'ref': {'string': 'Ref.', 'type': 'char', 'size': '32'},
-#
-#}
-
-out_fields = {
- 'journal_id': {'string': 'Journal', 'type': 'selection', 'selection': _get_journal, 'required':True},
- 'product_id': {'string': 'Operation', 'type': 'selection', 'selection':_get_pdt_exp , 'required':True},
- 'amount': {'string': 'Amount', 'type': 'float'},
- 'name': {'string': 'Name', 'type': 'char', 'size': '32', 'required':True},
- 'ref': {'string': 'Ref.', 'type': 'char', 'size': '32'},
-}
-
-def _get_out(self, cr, uid, data, context):
- args = {}
- pool = pooler.get_pool(cr.dbname)
- statement_obj= pool.get('account.bank.statement')
- product_obj= pool.get('product.template')
- productp_obj= pool.get('product.product')
- res_obj = pool.get('res.users')
- curr_company = res_obj.browse(cr,uid,uid).company_id.id
- statement_id = statement_obj.search(cr,uid, [('journal_id','=',data['form']['journal_id']),('company_id','=',curr_company),('user_id','=',uid),('state','=','open')])
- monday = (DateTime.now() + DateTime.RelativeDateTime(weekday=(DateTime.Monday,0))).strftime('%Y-%m-%d')
- sunday = (DateTime.now() + DateTime.RelativeDateTime(weekday=(DateTime.Sunday,0))).strftime('%Y-%m-%d')
- done_statmt = statement_obj.search(cr,uid, [('date','>=',monday+' 00:00:00'),('date','<=',sunday+' 23:59:59'),('journal_id','=',data['form']['journal_id']),('company_id','=',curr_company),('user_id','=',uid)])
- stat_done = statement_obj.browse(cr,uid, done_statmt)
- address_u = pool.get('res.users').browse(cr,uid,uid).address_id
- am = 0.0
- amount_check = productp_obj.browse(cr,uid,data['form']['product_id']).am_out or False
- for st in stat_done:
- for s in st.line_ids:
- if address_u and s.partner_id==address_u.partner_id and s.am_out:
- am+=s.amount
- if (-data['form']['amount'] or 0.0)+ am <-(res_obj.browse(cr,uid,uid).company_id.max_diff or 0.0) and amount_check:
- val = (res_obj.browse(cr,uid,uid).company_id.max_diff or 0.0)+ am
- raise wizard.except_wizard(_('Error !'), _('The maximum value you can still withdraw is exceeded. \n Remaining value is equal to %d ')%(val))
-
- acc_id = product_obj.browse(cr,uid,data['form']['product_id']).property_account_income
- if not acc_id:
- raise wizard.except_wizard(_('Error !'), _('please check that account is set to %s')%(product_obj.browse(cr,uid,data['form']['product_id']).name))
- if not statement_id:
- raise wizard.except_wizard(_('Error !'), _('You have to open at least one cashbox'))
- if statement_id:
- statement_id = statement_id[0]
- if not statement_id:
- statement_id = statement_obj.create(cr,uid,{'date':time.strftime('%Y-%m-%d 00:00:00'),
- 'journal_id':data['form']['journal_id'],
- 'company_id':curr_company,
- 'user_id':uid,
- })
- args['statement_id']= statement_id
- args['journal_id']= data['form']['journal_id']
- if acc_id:
- args['account_id']= acc_id.id
- amount= data['form']['amount'] or 0.0
- if data['form']['amount'] > 0:
- amount= -data['form']['amount']
- args['amount'] = amount
- if productp_obj.browse(cr,uid,data['form']['product_id']).am_out:
- args['am_out'] = True
- args['ref'] = data['form']['ref'] or ''
- args['name'] = "%s: %s "%(product_obj.browse(cr,uid,data['form']['product_id']).name, data['form']['name'].decode('utf8'))
- address_u = pool.get('res.users').browse(cr,uid,uid).address_id
- if address_u:
- partner_id = address_u.partner_id and address_u.partner_id.id or None
- args['partner_id'] = partner_id
- statement_line_id = pool.get('account.bank.statement.line').create(cr, uid, args)
- return {}
-
-#def _get_in(self, cr, uid, data, context):
-# args = {}
-# pool = pooler.get_pool(cr.dbname)
-# statement_obj = pool.get('account.bank.statement')
-# product_obj = pool.get('product.template')
-# res_obj = pool.get('res.users')
-# curr_company = res_obj.browse(cr,uid,uid).company_id.id
-# statement_id = statement_obj.search(cr,uid, [('journal_id','=',data['form']['journal_id']),('company_id','=',curr_company),('user_id','=',uid),('state','=','open')])
-# if not statement_id:
-# raise wizard.except_wizard(_('Error !'), _('You have to open at least one cashbox'))
-#
-# product = pool.get('product.product').browse(cr, uid, data['form']['product_id'])
-# acc_id = product_obj.browse(cr,uid,data['form']['product_id']).property_account_income
-# if not acc_id:
-# raise wizard.except_wizard(_('Error !'), _('please check that account is set to %s')%(product_obj.browse(cr,uid,data['form']['product_id']).name))
-# if statement_id:
-# statement_id = statement_id[0]
-# if not statement_id:
-# statement_id = statement_obj.create(cr,uid,{'date':time.strftime('%Y-%m-%d 00:00:00'),
-# 'journal_id':data['form']['journal_id'],
-# 'company_id':curr_company,
-# 'user_id':uid,
-# })
-#
-# args['statement_id'] = statement_id
-# args['journal_id'] = data['form']['journal_id']
-# if acc_id:
-# args['account_id'] = acc_id.id
-# args['amount'] = data['form']['amount'] or 0.0
-# args['ref'] = "%s" %(data['form']['ref'] or '')
-# args['name'] = "%s: %s "% (product_obj.browse(cr,uid,data['form']['product_id']).name, data['form']['name'].decode('utf8'))
-# address_u = pool.get('res.users').browse(cr,uid,uid).address_id
-# if address_u:
-# partner_id = address_u.partner_id and address_u.partner_id.id or None
-# args['partner_id'] = partner_id
-# statement_line_id = pool.get('account.bank.statement.line').create(cr, uid, args)
-#
-# return {}
-#
-#class box_entries(wizard.interface):
-# states = {
-# 'init': {
-# 'actions': [],
-# 'result': {
-# 'type': 'form',
-# 'arch': entry_form % u'Entrée de caisse',
-# 'fields': entry_fields,
-# 'state': [('end', 'Cancel', 'gtk-cancel'), ('next', 'Make entries in the Cashbox', 'gtk-ok')]
-# }
-# },
-# 'next': {
-# 'actions': [],
-# 'result': {
-# 'type': 'action',
-# 'action': _get_in,
-# 'state': 'end'
-# }
-# },
-# }
-#
-#box_entries('pos.entry')
-
-class box_out(wizard.interface):
- states = {
- 'init': {
- 'actions': [],
- 'result': {
- 'type': 'form',
- 'arch': entry_form % u'Sortie de caisse',
- 'fields': out_fields,
- 'state': [('end', 'Cancel', 'gtk-cancel'), ('next', 'Make Entries in the CashBox', 'gtk-ok')]
- }
- },
- 'next': {
- 'actions': [],
- 'result': {
- 'type': 'action',
- 'action': _get_out,
- 'state': 'end'
- }
- },
- }
-
-box_out('pos.out')
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-