Я создаю 2 отчета в openerp
используя яшму. Но я использую тот же парсер для двух отчетов, первый отчет - «подробный отчет», а второй - «резюме». В словаре (именованных данных), который добавляется к списку результатов, есть ключи, дата, счет, дебет и кредит. Для подробного отчета мне нужно только получить эти значения от account.move.line
. Но для сводного отчета должна быть только одна строка для строк перемещения учетной записи, содержащих номер счета-фактуры. То есть мне нужно добавить дебетовые и кредитные линии для линий переноса с таким же номером счета и отобразить его как одну строку, как я могу это сделать в Python. Например, список результатовКак добавить (суммировать) два значения в словаре python на основе другого значения?
[{'invoice':1,'debit':10,'credit':10},
{'name':'b','invoice':2,'debit':10,'credit':18},
{'invoice':1,'debit':10,'credit':10}]
и что мне нужно
[{'invoice':1,'debit':20,'credit':20},
{'invoice':2,'debit':10,'credit':18}]
EDIT: Код
move_line_ids = move_line_pool.search(cr, uid, domain, context=context)
print 'move_line_ids', len(move_line_ids)
for move_line in move_line_pool.browse(cr, uid, move_line_ids, context=context):
group_by = grp = grp_acc = ''
debit = credit = bal = 0.0
if move_line.debit > 0.0:
debit = move_line.amount_residual
elif move_line.credit > 0.0:
credit = move_line.amount_residual
bal = debit - credit
if form_group_by == 'group_account_code':
group_by = 'ACCOUNT CODE : '
grp = move_line.account_id.code or ''
grp_acc = move_line.account_id.name or ''
elif form_group_by == 'group_order_no':
group_by = 'ORDER : '
grp = move_line.sale_id.name or ''
else:
group_by = 'INVOICE : '
grp = move_line.invoice.number or ''
date = dt.strptime(str(move_line.date), '%Y-%m-%d').strftime('%d-%m-%Y')
data = {
'period': period,
'date': date,
'company': company or '',
'so': move_line.sale_id.name or '',
'invoice': move_line.invoice.number or '',
'po': '',
'status': '',
'ref': move_line.move_id.name or '',
'debit': debit,
'credit': credit,
'bal': bal,
'fc': '',
'f_amt': '',
'trx': move_line.journal_id.code or '',
'account': move_line.account_id.name or '',
'account_code': move_line.account_id.code or '',
'acc_range': acc_range,
'group_by': group_by,
'grp': grp,
'grp_acc': grp_acc,
}
result.append(data)
if form_group_by == 'group_account_code':
result = sorted(result, key=lambda k: k['account_code'])
elif form_group_by == 'group_order_no':
result = sorted(result, key=lambda k: k['so'])
else:
result = sorted(result, key=lambda k: k['invoice'])
return result
Только учти ключи invoice,debit and credit
в словаре, другие не нужны для обновления, если счет-фактура одинаковый.
Он уверен, может быть сделано с питоном, но я считаю, что лучше сделать с помощью SQL GroupBy/сумму. Пожалуйста, покажите код, как вы производите первый вывод. – alko
@alko Я обновил вопрос .. –