Как рассчитать дебетовую, кредитную сумму в счетах поставщика в Odoo?
Я новичок в Odoo Accounting. Я столкнулся с проблемой при расчете суммы дебета и кредита по счету поставщика. Я добавил два новых поля в строку заказа на покупку, Discount_type и Discount_amt. Промежуточное значение должно быть (price_unit * количество) - скидка. Я мог подсчитать промежуточную сумму. Но когда я проверяю записи журнала, сумма дебета и кредита не меняется. То есть сумма скидки не вычитается. Но когда я сохранил форму, я получил ошибку, в которой говорилось, что дебет и кредит не были сбалансированы. Как я могу это сделать?
def compute_price_subtotal(self):
for line in self:
line.discount_type = line.purchase_line_id.discount_type
line.discount_amt = line.purchase_line_id.discount_amt
qty = line.quantity or 0
price_unit = line.price_unit or 0
subtotal = price_unit * qty
discount_type = line.discount_type
discount_amount = line.discount_amt
if discount_type == 'fixed':
discount = discount_amount * qty
line.price_subtotal = subtotal - discount
elif discount_type == 'percentage':
discount = subtotal * (discount_amount / 100)
line.price_subtotal = subtotal - discount
else:
line.price_subtotal = subtotal
if line.move_id.type in line.move_id.get_outbound_types():
sign = 1
elif line.move_id.type in line.move_id.get_inbound_types():
sign = -1
else:
sign = 1
price_subtotal = sign * line.price_subtotal
line.update({
'debit': price_subtotal > 0.0 and price_subtotal or 0.0,
'credit': price_subtotal < 0.0 and -price_subtotal or 0.0,
})
Вышеупомянутый метод предназначен для расчета price_subtotal, дебетовой и кредитной.
На рисунке не облагаемая налогом сумма составляет 13800, а налог - 690. Таким образом, общая сумма будет 13800 + 690 = 14490. Но в элементах журнала это 15000, а промежуточные значения отличаются.
1 ответ
Это связано с тем, что вы изменяете только интересующую вас строку. Это пытается изменить дебет / кредит, но это оставляет движение счета несбалансированным. Поскольку это нарушает ограничения, изменение учета предотвращается.
Вам нужно сбалансировать ход, прежде чем что-либо в нем обновлять. Это включает в себя обновление строки налога и строки к оплате / получению. Когда у вас есть все эти строки, вы можете обновить весь перенос учетной записи.
Это означает, что вам нужно сделать что-то вроде этого: (при условии, что расчет уже выполнен)
lines_to_write = [
(1, line_A_id, line_A_values),
(1, tax_line_id, tax_line_values),
(1, receivable_line_id, receivable_line_values)
]
move.write({'line_ids': lines_to_write})
Вы можете получить список команд здесь
Кстати, чтобы пересчитать дебет и кредит при изменении бизнес-поля, вы можете (должны) вызвать метод _get_fields_onchange_subtotal_model, чтобы получить новые значения, а затем обновить строку перемещения счета этими новыми значениями.
Одна из причин - то, что бухгалтерский учет и счет-фактура могли быть в разной валюте.
Отказ от ответственности: изменять налоги следует только в том случае, если вы уверены в том, что делаете. Это может повлиять на налоговый отчет пользователя.