[FIX] point_of_sale: respect user timezone for all data in Sale Details
9f0120d73b
solved this issue already, but
it was only applied to POS orderlines. There is other data on the
report (eg. payments, taxes, ...) that should also correctly respect the
user time zone as well.
opw-678748
This commit is contained in:
parent
ae9d57bc1e
commit
49b1742477
|
@ -40,6 +40,19 @@ class pos_details(report_sxw.rml_parse):
|
||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
return user_obj.search(self.cr, self.uid, [])
|
return user_obj.search(self.cr, self.uid, [])
|
||||||
|
|
||||||
|
def _get_utc_time_range(self, form):
|
||||||
|
user = self.pool['res.users'].browse(self.cr, self.uid, self.uid)
|
||||||
|
tz_name = user.tz or self.localcontext.get('tz') or 'UTC'
|
||||||
|
user_tz = pytz.timezone(tz_name)
|
||||||
|
between_dates = {}
|
||||||
|
|
||||||
|
for date_field, delta in {'date_start': {'days': 0}, 'date_end': {'days': 1}}.items():
|
||||||
|
timestamp = datetime.datetime.strptime(form[date_field] + ' 00:00:00', tools.DEFAULT_SERVER_DATETIME_FORMAT) + datetime.timedelta(**delta)
|
||||||
|
timestamp = user_tz.localize(timestamp).astimezone(pytz.utc)
|
||||||
|
between_dates[date_field] = timestamp.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
|
|
||||||
|
return between_dates['date_start'], between_dates['date_end']
|
||||||
|
|
||||||
def _pos_sales_details(self, form):
|
def _pos_sales_details(self, form):
|
||||||
pos_obj = self.pool.get('pos.order')
|
pos_obj = self.pool.get('pos.order')
|
||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
|
@ -47,18 +60,11 @@ class pos_details(report_sxw.rml_parse):
|
||||||
result = {}
|
result = {}
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
user = self.pool['res.users'].browse(self.cr, self.uid, self.uid)
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
tz_name = user.tz or self.localcontext.get('tz') or 'UTC'
|
|
||||||
user_tz = pytz.timezone(tz_name)
|
|
||||||
between_dates = {}
|
|
||||||
for date_field, delta in {'date_start': {'days': 0}, 'date_end': {'days': 1}}.items():
|
|
||||||
timestamp = datetime.datetime.strptime(form[date_field] + ' 00:00:00', tools.DEFAULT_SERVER_DATETIME_FORMAT) + datetime.timedelta(**delta)
|
|
||||||
timestamp = user_tz.localize(timestamp).astimezone(pytz.utc)
|
|
||||||
between_dates[date_field] = timestamp.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
|
||||||
|
|
||||||
pos_ids = pos_obj.search(self.cr, self.uid, [
|
pos_ids = pos_obj.search(self.cr, self.uid, [
|
||||||
('date_order', '>=', between_dates['date_start']),
|
('date_order', '>=', date_start),
|
||||||
('date_order', '<', between_dates['date_end']),
|
('date_order', '<', date_end),
|
||||||
('user_id', 'in', user_ids),
|
('user_id', 'in', user_ids),
|
||||||
('state', 'in', ['done', 'paid', 'invoiced']),
|
('state', 'in', ['done', 'paid', 'invoiced']),
|
||||||
('company_id', '=', company_id)
|
('company_id', '=', company_id)
|
||||||
|
@ -97,7 +103,8 @@ class pos_details(report_sxw.rml_parse):
|
||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('user_id','in',user_ids),('company_id','=',company_id),('invoice_id','<>',False)])
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
|
pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=', date_start),('date_order','<=',date_end),('user_id','in',user_ids),('company_id','=',company_id),('invoice_id','<>',False)])
|
||||||
for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
|
for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
|
||||||
for pol in pos.lines:
|
for pol in pos.lines:
|
||||||
self.total_invoiced += (pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))
|
self.total_invoiced += (pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))
|
||||||
|
@ -115,7 +122,8 @@ class pos_details(report_sxw.rml_parse):
|
||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('user_id','in',user_ids),('company_id','=',company_id)])
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
|
pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',date_start),('date_order','<=',date_end),('user_id','in',user_ids),('company_id','=',company_id)])
|
||||||
for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
|
for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
|
||||||
for pol in pos.lines:
|
for pol in pos.lines:
|
||||||
self.total_discount += ((pol.price_unit * pol.qty) * (pol.discount / 100))
|
self.total_discount += ((pol.price_unit * pol.qty) * (pol.discount / 100))
|
||||||
|
@ -126,7 +134,8 @@ class pos_details(report_sxw.rml_parse):
|
||||||
pos_order_obj = self.pool.get("pos.order")
|
pos_order_obj = self.pool.get("pos.order")
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
company_id = self.pool['res.users'].browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = self.pool['res.users'].browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('state','in',['paid','invoiced','done']),('user_id','in',user_ids), ('company_id', '=', company_id)])
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
|
pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',date_start),('date_order','<=',date_end),('state','in',['paid','invoiced','done']),('user_id','in',user_ids), ('company_id', '=', company_id)])
|
||||||
data={}
|
data={}
|
||||||
if pos_ids:
|
if pos_ids:
|
||||||
st_line_ids = statement_line_obj.search(self.cr, self.uid, [('pos_statement_id', 'in', pos_ids)])
|
st_line_ids = statement_line_obj.search(self.cr, self.uid, [('pos_statement_id', 'in', pos_ids)])
|
||||||
|
@ -175,7 +184,8 @@ class pos_details(report_sxw.rml_parse):
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
pos_order_obj = self.pool.get('pos.order')
|
pos_order_obj = self.pool.get('pos.order')
|
||||||
company_id = self.pool['res.users'].browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = self.pool['res.users'].browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('state','in',['paid','invoiced','done']),('user_id','in',user_ids), ('company_id', '=', company_id)])
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
|
pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',date_start),('date_order','<=',date_end),('state','in',['paid','invoiced','done']),('user_id','in',user_ids), ('company_id', '=', company_id)])
|
||||||
for order in pos_order_obj.browse(self.cr, self.uid, pos_ids):
|
for order in pos_order_obj.browse(self.cr, self.uid, pos_ids):
|
||||||
for line in order.lines:
|
for line in order.lines:
|
||||||
line_taxes = account_tax_obj.compute_all(self.cr, self.uid, line.product_id.taxes_id, line.price_unit, line.qty, product=line.product_id, partner=line.order_id.partner_id or False)
|
line_taxes = account_tax_obj.compute_all(self.cr, self.uid, line.product_id.taxes_id, line.price_unit, line.qty, product=line.product_id, partner=line.order_id.partner_id or False)
|
||||||
|
|
Loading…
Reference in New Issue