Point_of_sale Task Id 578: add the remove file

bzr revid: sbh@tinyerp.com-20100423145742-urqy20q7a3t8g68y
This commit is contained in:
sbh (Open ERP) 2010-04-23 20:27:42 +05:30
parent a1e3c5c899
commit 9bc41e9170
4 changed files with 339 additions and 267 deletions

View File

@ -21,6 +21,7 @@
##############################################################################
import pos
import account_bank_statement
import pos_account_bank_statement
import stock
import wizard

View File

@ -0,0 +1,248 @@
# encoding: utf-8
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 PC Solutions (<http://pcsol.be>). 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import osv, fields
import time
from mx import DateTime
from decimal import Decimal
from tools.translate import _
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"),
'special_journal':fields.boolean('Special Journal', help="Will put all the orders in waiting status till being accepted"),
'check_dtls': fields.boolean('Check Details', help="This field authorize Validation of Cashbox without checking ending details"),
'statement_sequence_id': fields.many2one('ir.sequence', 'Statement Sequence', \
help="The sequence used for statement numbers in this journal."),
}
_defaults = {
'check_dtls': lambda *a:True,
'auto_cash': lambda *a:True,
}
account_journal()
class singer_statement(osv.osv):
""" Singer Statements """
_name = 'singer.statement'
_description = 'Statements'
def _sub_total(self, cr, uid, ids, name, arg, context=None):
""" Calculates Sub total"
@param name: Names of fields.
@param arg: User defined arguments
@return: Dictionary of values.
"""
res = {}
for obj in self.browse(cr, uid, ids):
res[obj.id] = obj.pieces * obj.number
return res
def on_change_sub(self, cr, uid, ids, pieces, number,*a):
""" Calculates Sub total on change of number
@param pieces: Names of fields.
@param number:
"""
sub=pieces*number
return {'value':{'subtotal': sub or 0.0}}
_columns = {
'pieces': fields.float('Values', digits=(16,2)),
'number': fields.integer('Number'),
'subtotal': fields.function(_sub_total, method=True, string='Sub Total', type='float',digits=(16,2)),
'starting_id': fields.many2one('account.bank.statement',ondelete='cascade'),
'ending_id': fields.many2one('account.bank.statement',ondelete='cascade'),
}
singer_statement()
class account_bank_statement(osv.osv):
_inherit = 'account.bank.statement'
def _get_starting_balance(self, cr, uid, ids, name, arg, context=None):
""" Find starting balance "
@param name: Names of fields.
@param arg: User defined arguments
@return: Dictionary of values.
"""
res ={}
for statement in self.browse(cr, uid, ids):
amount_total=0.0
for line in statement.starting_details_ids:
amount_total+= line.pieces * line.number
res[statement.id]=amount_total
return res
def _get_sum_entry_encoding(self, cr, uid, ids, name, arg, context=None):
""" Find encoding total of statements "
@param name: Names of fields.
@param arg: User defined arguments
@return: Dictionary of values.
"""
res2={}
for statement in self.browse(cr, uid, ids):
encoding_total=0.0
for line in statement.line_ids:
encoding_total+= line.amount
res2[statement.id]=encoding_total
return res2
def _default_journal_id(self, cr, uid, context={}):
""" To get default journal for the object"
@param name: Names of fields.
@return: journal
"""
company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
journal = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('auto_cash','=',False), ('company_id', '=', company_id)])
if journal:
return journal[0]
else:
return False
_columns = {
'journal_id': fields.many2one('account.journal', 'Journal', required=True),
'balance_start': fields.function(_get_starting_balance, method=True, string='Starting Balance', type='float',digits=(16,2)),
'state': fields.selection([('draft', 'Draft'),('confirm', 'Confirm'),('open','Open')],
'State', required=True, states={'confirm': [('readonly', True)]}, readonly="1"),
'total_entry_encoding':fields.function(_get_sum_entry_encoding, method=True, string="Total of Entry encoding"),
'date':fields.datetime("Opening Date"),
'closing_date':fields.datetime("Closing Date"),
'starting_details_ids': fields.one2many('singer.statement', 'starting_id', string='Starting Details'),
'ending_details_ids': fields.one2many('singer.statement', 'ending_id', string='Ending Details'),
'name': fields.char('Name', size=64, required=True, readonly=True),
}
_defaults = {
'state': lambda *a: 'draft',
'name': lambda *a: '/',
'date': lambda *a:time.strftime("%Y-%m-%d %H:%M:%S"),
'journal_id': _default_journal_id,
}
def create(self, cr, uid, vals, context=None):
company_id = vals and vals.get('company_id',False)
if company_id:
open_jrnl = self.search(cr, uid, [('company_id', '=', vals['company_id']), ('journal_id', '=', vals['journal_id']), ('state', '=', 'open')])
if open_jrnl:
raise osv.except_osv('Error', u'Une caisse de type espèce est déjà ouverte')
if 'starting_details_ids' in vals:
vals['starting_details_ids'] = starting_details_ids = map(list, vals['starting_details_ids'])
for i in starting_details_ids:
if i and i[0] and i[1]:
i[0], i[1] = 0, 0
res = super(account_bank_statement, self).create(cr, uid, vals, context=context)
return res
def onchange_journal_id(self, cursor, user, statement_id, journal_id, context=None):
""" Changes balance start and starting details if journal_id changes"
@param statement_id: Changed statement_id
@param journal_id: Changed journal_id
@return: Dictionary of changed values
"""
id_s=[]
if not journal_id:
return {'value': {'balance_start': 0.0}}
balance_start=0.0
cash_obj = self.pool.get('singer.statement')
statement_obj = self.pool.get('account.bank.statement')
cursor.execute("Select a.id from account_bank_statement a where journal_id=%d and user_id=%d order by a.id desc limit 1"%(journal_id,user))
res2=cursor.fetchone()
res2=res2 and res2[0] or None
if res2:
statmt_id=statement_obj.browse(cursor,user,res2)
check_det=statmt_id.journal_id.check_dtls
if not check_det:
balance_start=statmt_id.balance_end_real or 0.0
return {'value': {'balance_start': balance_start}}
cursor.execute("Select a.id from account_bank_statement a, singer_statement s where journal_id=%d and user_id=%d order by a.id desc limit 1"%(journal_id,user))
res1=cursor.fetchone()
res1=res1 and res1[0] or None
if res1:
cursor.execute("Select sum(ss.pieces*ss.number),ss.ending_id from singer_statement ss, account_bank_statement s where ss.ending_id=s.id and s.journal_id=%d and s.user_id=%d and s.id=%d group by ss.ending_id,s.id order by s.id desc"%(journal_id,user, res1))
res = cursor.fetchone()
balance_start = res and res[0] or 0.0
cash_end=res and res[1] or None
id_s=statement_obj.browse(cursor,user,cash_end).ending_details_ids
new=[]
if id_s:
for s in id_s:
new.append(s.id)
return {'value': {'balance_start': balance_start, 'starting_details_ids':new}}
def button_open(self, cr, uid, ids, context=None):
""" Changes statement state to Running.
@return: True
"""
obj_inv = self.browse(cr, uid, ids)[0]
s_id=obj_inv.journal_id
if s_id.statement_sequence_id:
s_id=s_id.id
number = self.pool.get('ir.sequence').get_id(cr, uid, s_id)
else:
number = self.pool.get('ir.sequence').get(cr, uid,
'account.bank.statement')
self.write(cr, uid, ids, {'date':time.strftime("%Y-%m-%d %H:%M:%S"), 'state':'open', 'name':number})
return True
def button_confirm(self, cr, uid, ids, context=None):
""" Check the starting and ending detail of statement
@return: True
"""
val = 0.0
val2 = 0.0
val_statement_line = 0.0
diff = self.pool.get('res.users').browse(cr,uid,uid).company_id.max_diff or 0.0
for statement in self.browse(cr, uid, ids):
bal = statement.balance_end
bal_st=statement.balance_start
for st in statement.line_ids:
val_statement_line += st.amount
for stat in statement.starting_details_ids:
val2 += stat.subtotal
for stat in statement.ending_details_ids:
val += stat.subtotal
if statement.journal_id.check_dtls:
if Decimal(str(val)).quantize(Decimal('.001')) != (Decimal(str(val_statement_line)) + Decimal(str(val2))).quantize(Decimal('.001')):
raise osv.except_osv(_('Invalid action !'), _(' You can not confirm your cashbox, Please enter ending details, missing value matches to "%s"')%(abs(Decimal(str(val))-(Decimal(str(val_statement_line))+Decimal(str(val2))))))
self.write(cr, uid, statement.id, {'balance_end_real':Decimal(str(val_statement_line))+Decimal(str(val2)),'closing_date':time.strftime("%Y-%m-%d %H:%M:%S"),'state':'draft'})
return super(account_bank_statement, self).button_confirm(cr, uid, ids, context=None)
account_bank_statement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -227,6 +227,12 @@ class pos_order(osv.osv):
res[order.id] = val
return res
# def payment_get(self, cr, uid, ids, context=None):
# """ Calculates Total Returned from the order
# @return: Dictionary of values """
# cr.execute("select id from pos_payment where order_id =ANY(%s)",(ids,))
# return [i[0] for i in cr.fetchall()]
def _sale_journal_get(self, cr, uid, context):
""" To get sale journal for this order"
@ -247,6 +253,7 @@ class pos_order(osv.osv):
company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
res = self.pool.get('sale.shop').search(cr, uid, [])
# res = self.pool.get('sale.shop').search(cr, uid, [('company_id', '=', company.id)])
if res:
return res[0]
else:
@ -338,14 +345,24 @@ class pos_order(osv.osv):
'first_name': fields.char('First Name', size=64),
'state_2': fields.function(_get_v,type='selection',selection=[('to_verify', 'To Verify'), ('accepted', 'Accepted'),
('refused', 'Refused')], string='State', readonly=True, method=True, store=True),
# 'last_name': fields.char('Last Name', size=64),
# 'street': fields.char('Street', size=64),
# 'zip2': fields.char('Zip', size=64),
# 'city': fields.char('City', size=64),
# 'mobile': fields.char('Mobile', size=64),
# 'email': fields.char('Email', size=64),
'note': fields.text('Internal Notes'),
'nb_print': fields.integer('Number of Print', readonly=True),
'sale_journal': fields.many2one('account.journal', 'Journal', required=True, states={'draft': [('readonly', False)]}, readonly=True, ),
# 'account_receivable': fields.many2one('account.account',
# 'Default Receivable', required=True, states={'draft': [('readonly', False)]},
# readonly=True, ),
'invoice_wanted': fields.boolean('Create Invoice'),
'note_2': fields.char('Customer Note',size=64),
'type_rec': fields.char('Type of Receipt',size=64),
'remboursed': fields.boolean('Remboursed'),
'contract_number': fields.char('Contact Number', size=512, select=1),
'contract_number': fields.char('Contract Number', size=512, select=1),
'journal_entry': fields.boolean('Journal Entry'),
}
@ -526,6 +543,7 @@ class pos_order(osv.osv):
cr.execute("select s.id from stock_location s, stock_warehouse w where w.lot_stock_id=s.id and w.id= %d "%(order.shop_id.warehouse_id.id))
res=cr.fetchone()
location_id=res and res[0] or None
# location_id = order and order.shop_id and order.shop_id.warehouse_id and order.shop_id.warehouse_id.lot_stock_id.id or None
stock_dest_id = int(val.split(',')[1])
if line.qty < 0:
location_id, stock_dest_id = stock_dest_id, location_id
@ -984,7 +1002,9 @@ class pos_order(osv.osv):
'statement_id': False,
'account_id':order_account
})
# account_move_obj.button_validate(cr, uid, [move_id, payment_move_id], context=context)
self.write(cr,uid,order.id,{'state':'done'})
# account_move_line_obj.reconcile(cr, uid, to_reconcile, type='manual', context=context)
return True
def cancel_picking(self, cr, uid, ids, context=None):
@ -1025,6 +1045,7 @@ class pos_order(osv.osv):
for order in self.browse(cr, uid, ids, context=context):
if not order.journal_entry:
self.create_account_move(cr, uid, ids, context={})
#self.write(cr, uid, ids, {'state': 'done'})
return True
def compute_state(self, cr, uid, id):
@ -1038,6 +1059,31 @@ class pos_order(osv.osv):
pos_order()
class account_bank_statement(osv.osv):
_inherit = 'account.bank.statement'
_columns={
'user_id': fields.many2one('res.users',ondelete='cascade',string='User', readonly=True),
}
_defaults = {
'user_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).id
}
account_bank_statement()
class account_bank_statement_line(osv.osv):
_inherit = 'account.bank.statement.line'
def _get_statement_journal(self, cr, uid, ids, context, *a):
res = {}
for line in self.browse(cr, uid, ids):
res[line.id] = line.statement_id and line.statement_id.journal_id and line.statement_id.journal_id.name or None
return res
_columns={
'journal_id': fields.function(_get_statement_journal, method=True,store=True, string='Journal', type='char', size=64),
'am_out':fields.boolean("To count"),
'is_acc':fields.boolean("Is accompte"),
'pos_statement_id': fields.many2one('pos.order',ondelete='cascade'),
}
account_bank_statement_line()
class pos_order_line(osv.osv):
_name = "pos.order.line"
_description = "Lines of Point of Sale"
@ -1073,6 +1119,7 @@ class pos_order_line(osv.osv):
price = self.price_by_product(cr, uid, ids, line.order_id.pricelist_id.id, line.product_id.id, line.qty, line.order_id.partner_id.id)
if line.discount!=0.0:
res[line.id] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
# res[line.id] = price * line.qty * (1 - (line.discount or 0.0) / 100.0)
else:
res[line.id]=line.price_unit*line.qty
return res
@ -1145,7 +1192,9 @@ class pos_order_line(osv.osv):
'company_id':fields.many2one('res.company', 'Company', required=True),
'notice': fields.char('Discount Notice', size=128, required=True),
'serial_number': fields.char('Serial Number', size=128),
# 'contract_number': fields.char('Contract Number', size=512),
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], required=True, change_default=True),
# 'price_unit': fields.float('Unit Price'),
'price_unit': fields.function(_get_amount, method=True, string='Unit Price', store=True),
'price_ded': fields.float('Discount(Amount)'),
'qty': fields.float('Quantity'),
@ -1273,6 +1322,44 @@ class pos_payment(osv.osv):
pos_payment()
class account_move_line(osv.osv):
_inherit = 'account.move.line'
def create(self, cr, user, vals, context={}):
pos_obj = self.pool.get('pos.order')
val_name = vals.get('name', '')
val_ref = vals.get('ref', '')
if (val_name and 'POS' in val_name) and (val_ref and 'PACK' in val_ref):
aaa = re.search(r'Stock move.\((.*)\)', vals.get('name'))
name_pos = aaa.groups()[0]
pos_id = name_pos.replace('POS ','')
if pos_id and pos_id.isdigit():
pos_curr = pos_obj.browse(cr,user,int(pos_id))
pos_curr = pos_curr and pos_curr.contract_number or ''
vals['ref'] = pos_curr or vals.get('ref')
return super(account_move_line, self).create(cr, user, vals, context)
account_move_line()
class account_move(osv.osv):
_inherit = 'account.move'
def create(self, cr, user, vals, context={}):
pos_obj = self.pool.get('pos.order')
val_name = vals.get('name', '')
val_ref = vals.get('ref', '')
if (val_name and 'POS' in val_name) and (val_ref and 'PACK' in val_ref):
aaa = re.search(r'Stock move.\((.*)\)', vals.get('name'))
name_pos = aaa.groups()[0]
pos_id = name_pos.replace('POS ','')
if pos_id and pos_id.isdigit():
pos_curr = pos_obj.browse(cr,user,int(pos_id))
pos_curr = pos_curr and pos_curr.contract_number or ''
vals['ref'] = pos_curr or vals.get('ref')
return super(account_move, self).create(cr, user, vals, context)
account_move()
class product_product(osv.osv):
_inherit = 'product.product'
_columns = {
@ -1284,13 +1371,5 @@ class product_product(osv.osv):
_defaults = {
'disc_controle': lambda *a: True,
}
class stock_picking(osv.osv):
_inherit = 'stock.picking'
_columns = {
'pos_order': fields.many2one('pos.order', 'Pos order'),
}
stock_picking()
product_product()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -25,222 +25,15 @@ import time
import netsvc
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"),
'special_journal':fields.boolean('Special Journal', help="Will put all the orders in waiting status till being accepted"),
'check_dtls': fields.boolean('Check Details', help="This field authorize Validation of Cashbox without checking ending details"),
'statement_sequence_id': fields.many2one('ir.sequence', 'Statement Sequence', \
help="The sequence used for statement numbers in this journal."),
}
_defaults = {
'check_dtls': lambda *a:True,
'auto_cash': lambda *a:True,
}
account_journal()
class singer_statement(osv.osv):
""" Singer Statements """
_name = 'singer.statement'
_description = 'Statements'
def _sub_total(self, cr, uid, ids, name, arg, context=None):
""" Calculates Sub total"
@param name: Names of fields.
@param arg: User defined arguments
@return: Dictionary of values.
"""
res = {}
for obj in self.browse(cr, uid, ids):
res[obj.id] = obj.pieces * obj.number
return res
def on_change_sub(self, cr, uid, ids, pieces, number,*a):
""" Calculates Sub total on change of number
@param pieces: Names of fields.
@param number:
"""
sub=pieces*number
return {'value':{'subtotal': sub or 0.0}}
_columns = {
'pieces': fields.float('Values', digits=(16,2)),
'number': fields.integer('Number'),
'subtotal': fields.function(_sub_total, method=True, string='Sub Total', type='float',digits=(16,2)),
'starting_id': fields.many2one('account.bank.statement',ondelete='cascade'),
'ending_id': fields.many2one('account.bank.statement',ondelete='cascade'),
}
singer_statement()
class account_bank_statement(osv.osv):
_inherit = 'account.bank.statement'
def _get_starting_balance(self, cr, uid, ids, name, arg, context=None):
""" Find starting balance "
@param name: Names of fields.
@param arg: User defined arguments
@return: Dictionary of values.
"""
res ={}
for statement in self.browse(cr, uid, ids):
amount_total=0.0
for line in statement.starting_details_ids:
amount_total+= line.pieces * line.number
res[statement.id]=amount_total
return res
def _get_sum_entry_encoding(self, cr, uid, ids, name, arg, context=None):
""" Find encoding total of statements "
@param name: Names of fields.
@param arg: User defined arguments
@return: Dictionary of values.
"""
res2={}
for statement in self.browse(cr, uid, ids):
encoding_total=0.0
for line in statement.line_ids:
encoding_total+= line.amount
res2[statement.id]=encoding_total
return res2
def _default_journal_id(self, cr, uid, context={}):
""" To get default journal for the object"
@param name: Names of fields.
@return: journal
"""
company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
journal = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('auto_cash','=',False), ('company_id', '=', company_id)])
if journal:
return journal[0]
else:
return False
_columns = {
'company_id':fields.many2one('res.company', 'Company', required=True),
'journal_id': fields.many2one('account.journal', 'Journal', required=True),
'balance_start': fields.function(_get_starting_balance, method=True, string='Starting Balance', type='float',digits=(16,2)),
'state': fields.selection([('draft', 'Draft'),('confirm', 'Confirm'),('open','Open')],
'State', required=True, states={'confirm': [('readonly', True)]}, readonly="1"),
'total_entry_encoding':fields.function(_get_sum_entry_encoding, method=True, string="Total of Entry encoding"),
'date':fields.datetime("Opening Date"),
'closing_date':fields.datetime("Closing Date"),
'starting_details_ids': fields.one2many('singer.statement', 'starting_id', string='Starting Details'),
'ending_details_ids': fields.one2many('singer.statement', 'ending_id', string='Ending Details'),
'name': fields.char('Name', size=64, required=True, readonly=True),
'user_id': fields.many2one('res.users',ondelete='cascade',string='User', readonly=True),
'company_id':fields.many2one('res.company', 'Company', required=True),
}
_defaults = {
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
'state': lambda *a: 'draft',
'name': lambda *a: '/',
'date': lambda *a:time.strftime("%Y-%m-%d %H:%M:%S"),
'journal_id': _default_journal_id,
'user_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).id
}
def create(self, cr, uid, vals, context=None):
company_id = vals and vals.get('company_id',False)
if company_id:
open_jrnl = self.search(cr, uid, [('company_id', '=', vals['company_id']), ('journal_id', '=', vals['journal_id']), ('state', '=', 'open')])
if open_jrnl:
raise osv.except_osv('Error', u'Une caisse de type espèce est déjà ouverte')
if 'starting_details_ids' in vals:
vals['starting_details_ids'] = starting_details_ids = map(list, vals['starting_details_ids'])
for i in starting_details_ids:
if i and i[0] and i[1]:
i[0], i[1] = 0, 0
res = super(account_bank_statement, self).create(cr, uid, vals, context=context)
return res
def onchange_journal_id(self, cursor, user, statement_id, journal_id, context=None):
""" Changes balance start and starting details if journal_id changes"
@param statement_id: Changed statement_id
@param journal_id: Changed journal_id
@return: Dictionary of changed values
"""
id_s=[]
if not journal_id:
return {'value': {'balance_start': 0.0}}
balance_start=0.0
cash_obj = self.pool.get('singer.statement')
statement_obj = self.pool.get('account.bank.statement')
cursor.execute("Select a.id from account_bank_statement a where journal_id=%d and user_id=%d order by a.id desc limit 1"%(journal_id,user))
res2=cursor.fetchone()
res2=res2 and res2[0] or None
if res2:
statmt_id=statement_obj.browse(cursor,user,res2)
check_det=statmt_id.journal_id.check_dtls
if not check_det:
balance_start=statmt_id.balance_end_real or 0.0
return {'value': {'balance_start': balance_start}}
cursor.execute("Select a.id from account_bank_statement a, singer_statement s where journal_id=%d and user_id=%d order by a.id desc limit 1"%(journal_id,user))
res1=cursor.fetchone()
res1=res1 and res1[0] or None
if res1:
cursor.execute("Select sum(ss.pieces*ss.number),ss.ending_id from singer_statement ss, account_bank_statement s where ss.ending_id=s.id and s.journal_id=%d and s.user_id=%d and s.id=%d group by ss.ending_id,s.id order by s.id desc"%(journal_id,user, res1))
res = cursor.fetchone()
balance_start = res and res[0] or 0.0
cash_end=res and res[1] or None
id_s=statement_obj.browse(cursor,user,cash_end).ending_details_ids
new=[]
if id_s:
for s in id_s:
new.append(s.id)
return {'value': {'balance_start': balance_start, 'starting_details_ids':new}}
def button_open(self, cr, uid, ids, context=None):
""" Changes statement state to Running.
@return: True
"""
obj_inv = self.browse(cr, uid, ids)[0]
s_id=obj_inv.journal_id
if s_id.statement_sequence_id:
s_id=s_id.id
number = self.pool.get('ir.sequence').get_id(cr, uid, s_id)
else:
number = self.pool.get('ir.sequence').get(cr, uid,
'account.bank.statement')
self.write(cr, uid, ids, {'date':time.strftime("%Y-%m-%d %H:%M:%S"), 'state':'open', 'name':number})
return True
def button_confirm(self, cr, uid, ids, context=None):
""" Check the starting and ending detail of statement
@return: True
"""
val = 0.0
val2 = 0.0
val_statement_line = 0.0
diff = self.pool.get('res.users').browse(cr,uid,uid).company_id.max_diff or 0.0
for statement in self.browse(cr, uid, ids):
bal = statement.balance_end
bal_st=statement.balance_start
for st in statement.line_ids:
val_statement_line += st.amount
for stat in statement.starting_details_ids:
val2 += stat.subtotal
for stat in statement.ending_details_ids:
val += stat.subtotal
if statement.journal_id.check_dtls:
if Decimal(str(val)).quantize(Decimal('.001')) != (Decimal(str(val_statement_line)) + Decimal(str(val2))).quantize(Decimal('.001')):
raise osv.except_osv(_('Invalid action !'), _(' You can not confirm your cashbox, Please enter ending details, missing value matches to "%s"')%(abs(Decimal(str(val))-(Decimal(str(val_statement_line))+Decimal(str(val2))))))
self.write(cr, uid, statement.id, {'balance_end_real':Decimal(str(val_statement_line))+Decimal(str(val2)),'closing_date':time.strftime("%Y-%m-%d %H:%M:%S"),'state':'draft'})
return super(account_bank_statement, self).button_confirm(cr, uid, ids, context=None)
account_bank_statement()
class account_bank_statement_line(osv.osv):
@ -261,63 +54,14 @@ class account_bank_statement_line(osv.osv):
if user.company_id:
return user.company_id.id
return self.pool.get('res.company').search(cr, uid, [('parent_id', '=', False)])[0]
def _get_statement_journal(self, cr, uid, ids, context, *a):
res = {}
for line in self.browse(cr, uid, ids):
res[line.id] = line.statement_id and line.statement_id.journal_id and line.statement_id.journal_id.name or None
return res
_inherit = 'account.bank.statement.line'
_columns = {
'company_id':fields.many2one('res.company', 'Company', required=True),
'journal_id': fields.function(_get_statement_journal, method=True,store=True, string='Journal', type='char', size=64),
'am_out':fields.boolean("To count"),
'is_acc':fields.boolean("Is accompte"),
'pos_statement_id': fields.many2one('pos.order',ondelete='cascade'),
}
_defaults = {
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
account_bank_statement_line()
class account_move_line(osv.osv):
_inherit = 'account.move.line'
def create(self, cr, user, vals, context={}):
pos_obj = self.pool.get('pos.order')
val_name = vals.get('name', '')
val_ref = vals.get('ref', '')
if (val_name and 'POS' in val_name) and (val_ref and 'PACK' in val_ref):
aaa = re.search(r'Stock move.\((.*)\)', vals.get('name'))
name_pos = aaa.groups()[0]
pos_id = name_pos.replace('POS ','')
if pos_id and pos_id.isdigit():
pos_curr = pos_obj.browse(cr,user,int(pos_id))
pos_curr = pos_curr and pos_curr.contract_number or ''
vals['ref'] = pos_curr or vals.get('ref')
return super(account_move_line, self).create(cr, user, vals, context)
account_move_line()
class account_move(osv.osv):
_inherit = 'account.move'
def create(self, cr, user, vals, context={}):
pos_obj = self.pool.get('pos.order')
val_name = vals.get('name', '')
val_ref = vals.get('ref', '')
if (val_name and 'POS' in val_name) and (val_ref and 'PACK' in val_ref):
aaa = re.search(r'Stock move.\((.*)\)', vals.get('name'))
name_pos = aaa.groups()[0]
pos_id = name_pos.replace('POS ','')
if pos_id and pos_id.isdigit():
pos_curr = pos_obj.browse(cr,user,int(pos_id))
pos_curr = pos_curr and pos_curr.contract_number or ''
vals['ref'] = pos_curr or vals.get('ref')
return super(account_move, self).create(cr, user, vals, context)
account_move()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: