X-Git-Url: http://git.cyclocoop.org/?p=burette%2Fnrt_point_of_sale.git;a=blobdiff_plain;f=point_of_sale.py;fp=point_of_sale.py;h=70f7c3fcce9072b0a38a37606624d1641a7b1053;hp=0000000000000000000000000000000000000000;hb=72fe25042c12a865510836739a83b7ab68c336c9;hpb=27de5666a9e60d5a607c612092e4b885196b6deb diff --git a/point_of_sale.py b/point_of_sale.py new file mode 100644 index 0000000..70f7c3f --- /dev/null +++ b/point_of_sale.py @@ -0,0 +1,140 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Non-real time point of sale module for OpenERP, Permit user to record his +# sales in point of sale interface in non-real time. +# Copyright (C) 2016 L'Heureux Cyclage () +# Ludovic CHEVALIER +# +# This file is a part of Non-real time point of sale +# +# Non-real time point of sale 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. +# +# Non-real time point of sale 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 . +# +############################################################################## + +from openerp.osv import osv +from openerp.osv import orm +from openerp.osv import fields + + +class pos_session(orm.Model): + _inherit = 'pos.session' + + _columns = { + 'start_at': fields.datetime('Opening date'), + 'stop_at': fields.datetime('Closing date'), + } + + def create(self, cr, uid, values, context=None): + """ + Put the same date in bank statements as pos session and define the + appropriate period + """ + context = context or {} + bank_st_obj = self.pool.get('account.bank.statement') + period_obj = self.pool.get('account.period') + context = dict(context, account_period_prefer_normal=True) + + id = super(pos_session, self).create(cr, uid, values, context=context) + for session in self.browse(cr, uid, [id], context=context): + default_date = session.start_at + bank_st_ids = bank_st_obj.search(cr, uid, [('pos_session_id', '=', id)], context=context) + period = period_obj.find(cr, uid, dt=default_date, context=dict(context or {}, account_period_prefer_normal=True))[0] + bank_st_obj.write(cr, uid, bank_st_ids, {'date': default_date, 'period_id': period}, context=context) + return id + + def _confirm_orders(self, cr, uid, ids, context=None): + """Put the same date in sale account move as pos session""" + account_move_obj = self.pool.get('account.move') + order_obj = self.pool.get('pos.order') + period_obj = self.pool.get('account.period') + super(pos_session, self)._confirm_orders(cr, uid, ids, context=context) + + for session in self.browse(cr, uid, ids, context=context): + account_move_ids = [] + order_ids = [order.id for order in session.order_ids if order.state == 'done'] + company_id = order_obj.browse(cr, uid, order_ids, context=context)[0].company_id.id + for order in order_obj.browse(cr, uid, order_ids, context=context): + if order.account_move.id not in account_move_ids: + account_move_ids.append(order.account_move.id) + period = period_obj.find(cr, uid, dt=session.start_at, context=dict(context or {}, company_id=company_id, account_period_prefer_normal=True))[0] + account_move_obj.write(cr, uid, account_move_ids, {'date': session.start_at, 'period_id': period}, context=context) + + return True + + def wkf_action_closing_control(self, cr, uid, ids, context=None): + """ + Disable default start_at date + Piece of this code was copied from + addons/point_of_sale/point_of_sale.py:397 + """ + for session in self.browse(cr, uid, ids, context=context): + for statement in session.statement_ids: + if (statement != session.cash_register_id) and (statement.balance_end != statement.balance_end_real): + self.pool.get('account.bank.statement').write(cr, uid, [statement.id], {'balance_end_real': statement.balance_end}) + return True + + def onchange_start_at(self, cr, uid, ids, start_at, context=None): + """Define same stop_at as start_at""" + if not ids: + return {'value': {'stop_at': start_at}} + else: + for session in self.browse(cr, uid, ids, context=context): + return {'value': {'stop_at': start_at}} + + +class pos_order(orm.Model): + _inherit = 'pos.order' + + def create(self, cr, uid, vals, context=None): + session_obj = self.pool.get('pos.session') + vals.update({'date_order': session_obj.browse(cr, uid, vals['session_id'], context=context).start_at}) + res = super(pos_order, self).create(cr, uid, vals, context=context) + return res + + + def write(self, cr, uid, ids, vals, context=None): + session_obj = self.pool.get('pos.session') + for order in self.browse(cr, uid, ids, context=context): + default_date_order = order.session_id.start_at + vals.update({'date_order': default_date_order}) + res = super(pos_order, self).write(cr, uid, ids, vals, context=context) + return res + + def onchange_session_id(self, cr, uid, ids, session_id, context=None): + """Define date order by start date of current session""" + res_obj = self.pool.get('pos.session') + data = {} + if not session_id: + return {'value': data} + else: + for session in res_obj.browse(cr, uid, [session_id], + context=context): + default_date_order = session.start_at + return {'value': {'date_order': default_date_order}} + + def add_payment(self, cr, uid, order_id, data, context=None): + """Define payment date by the order date""" + statement_obj = self.pool.get('account.bank.statement.line') + statement_ids = [] + order = self.browse(cr, uid, [order_id], context=context)[0] + date_order = order.date_order + super(pos_order, self).add_payment(cr, uid, order_id, data, context=context) + + for statement in order.statement_ids: + statement_ids.append(statement.id) + statement_obj.write(cr, uid, statement_ids, {'date': date_order}, context=context) + return order_id + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: