[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')
|
||||
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):
|
||||
pos_obj = self.pool.get('pos.order')
|
||||
user_obj = self.pool.get('res.users')
|
||||
|
@ -47,18 +60,11 @@ class pos_details(report_sxw.rml_parse):
|
|||
result = {}
|
||||
user_ids = form['user_ids'] or self._get_all_users()
|
||||
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)
|
||||
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)
|
||||
date_start, date_end = self._get_utc_time_range(form)
|
||||
|
||||
pos_ids = pos_obj.search(self.cr, self.uid, [
|
||||
('date_order', '>=', between_dates['date_start']),
|
||||
('date_order', '<', between_dates['date_end']),
|
||||
('date_order', '>=', date_start),
|
||||
('date_order', '<', date_end),
|
||||
('user_id', 'in', user_ids),
|
||||
('state', 'in', ['done', 'paid', 'invoiced']),
|
||||
('company_id', '=', company_id)
|
||||
|
@ -97,7 +103,8 @@ class pos_details(report_sxw.rml_parse):
|
|||
user_obj = self.pool.get('res.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
|
||||
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 pol in pos.lines:
|
||||
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_ids = form['user_ids'] or self._get_all_users()
|
||||
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 pol in pos.lines:
|
||||
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")
|
||||
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
|
||||
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={}
|
||||
if 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()
|
||||
pos_order_obj = self.pool.get('pos.order')
|
||||
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 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)
|
||||
|
|
Loading…
Reference in New Issue