[PYTHON] -pdb import in pos_box
[burette/nrt_point_of_sale.git] / point_of_sale.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #
4 # Non-real time point of sale module for OpenERP, Permit user to record his
5 # sales in point of sale interface in non-real time.
6 # Copyright (C) 2016 L'Heureux Cyclage (<http://www.heureux-cyclage>)
7 # Ludovic CHEVALIER
8 #
9 # This file is a part of Non-real time point of sale
10 #
11 # Non-real time point of sale is free software: you can redistribute it
12 # and/or modify it under the terms of the GNU General Public License as
13 # published by the Free Software Foundation, either version 3 of the
14 # License, or (at your option) any later version.
15 #
16 # Non-real time point of sale is distributed in the hope that it will be
17 # useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
19 # Public License for more details.
20 #
21 # You should have received a copy of the GNU General Public License
22 # along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #
24 ##############################################################################
25
26 from openerp.osv import osv
27 from openerp.osv import orm
28 from openerp.osv import fields
29
30
31 class pos_session(orm.Model):
32 _inherit = 'pos.session'
33
34 _columns = {
35 'start_at': fields.datetime('Opening date'),
36 'stop_at': fields.datetime('Closing date'),
37 }
38
39 def create(self, cr, uid, values, context=None):
40 """
41 Put the same date in bank statements as pos session and define the
42 appropriate period
43 """
44 context = context or {}
45 bank_st_obj = self.pool.get('account.bank.statement')
46 period_obj = self.pool.get('account.period')
47 context = dict(context, account_period_prefer_normal=True)
48
49 id = super(pos_session, self).create(cr, uid, values, context=context)
50 for session in self.browse(cr, uid, [id], context=context):
51 default_date = session.start_at
52 bank_st_ids = bank_st_obj.search(cr, uid, [('pos_session_id', '=', id)], context=context)
53 period = period_obj.find(cr, uid, dt=default_date, context=dict(context or {}, account_period_prefer_normal=True))[0]
54 bank_st_obj.write(cr, uid, bank_st_ids, {'date': default_date, 'period_id': period}, context=context)
55 return id
56
57 def _confirm_orders(self, cr, uid, ids, context=None):
58 """Put the same date in sale account move as pos session"""
59 account_move_obj = self.pool.get('account.move')
60 order_obj = self.pool.get('pos.order')
61 period_obj = self.pool.get('account.period')
62 super(pos_session, self)._confirm_orders(cr, uid, ids, context=context)
63
64 for session in self.browse(cr, uid, ids, context=context):
65 account_move_ids = []
66 order_ids = [order.id for order in session.order_ids if order.state == 'done']
67 if order_ids:
68 company_id = order_obj.browse(cr, uid, order_ids, context=context)[0].company_id.id
69 else:
70 company_id = self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0].company_id.id
71 for order in order_obj.browse(cr, uid, order_ids, context=context):
72 if order.account_move.id not in account_move_ids:
73 account_move_ids.append(order.account_move.id)
74 period = period_obj.find(cr, uid, dt=session.start_at, context=dict(context or {}, company_id=company_id, account_period_prefer_normal=True))[0]
75 account_move_obj.write(cr, uid, account_move_ids, {'date': session.start_at, 'period_id': period}, context=context)
76
77 return True
78
79 def wkf_action_closing_control(self, cr, uid, ids, context=None):
80 """
81 Put same stop_at date in pos_session as its start_at date
82 """
83 res = super(pos_session, self).wkf_action_closing_control(cr, uid, ids, context=context)
84 for session in self.browse(cr, uid, ids, context=context):
85 self.write(cr, uid, [session.id], {'stop_at': session.start_at}, context=context)
86 return res
87
88 def onchange_start_at(self, cr, uid, ids, start_at, context=None):
89 """Define same stop_at as start_at"""
90 if not ids:
91 return {'value': {'stop_at': start_at}}
92 else:
93 for session in self.browse(cr, uid, ids, context=context):
94 return {'value': {'stop_at': start_at}}
95
96
97 class pos_order(orm.Model):
98 _inherit = 'pos.order'
99
100 def create(self, cr, uid, vals, context=None):
101 session_obj = self.pool.get('pos.session')
102 vals.update({'date_order': session_obj.browse(cr, uid, vals['session_id'], context=context).start_at})
103 res = super(pos_order, self).create(cr, uid, vals, context=context)
104 return res
105
106
107 def write(self, cr, uid, ids, vals, context=None):
108 session_obj = self.pool.get('pos.session')
109 for order in self.browse(cr, uid, ids, context=context):
110 default_date_order = order.session_id.start_at
111 vals.update({'date_order': default_date_order})
112 res = super(pos_order, self).write(cr, uid, ids, vals, context=context)
113 return res
114
115 def onchange_session_id(self, cr, uid, ids, session_id, context=None):
116 """Define date order by start date of current session"""
117 res_obj = self.pool.get('pos.session')
118 data = {}
119 if not session_id:
120 return {'value': data}
121 else:
122 for session in res_obj.browse(cr, uid, [session_id],
123 context=context):
124 default_date_order = session.start_at
125 return {'value': {'date_order': default_date_order}}
126
127 def add_payment(self, cr, uid, order_id, data, context=None):
128 """Define payment date by the order date"""
129 statement_obj = self.pool.get('account.bank.statement.line')
130 statement_ids = []
131 order = self.browse(cr, uid, [order_id], context=context)[0]
132 date_order = order.date_order
133 super(pos_order, self).add_payment(cr, uid, order_id, data, context=context)
134
135 for statement in order.statement_ids:
136 statement_ids.append(statement.id)
137 statement_obj.write(cr, uid, statement_ids, {'date': date_order}, context=context)
138 return order_id
139
140 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: