Как рассчитать дебетовую, кредитную сумму в счетах поставщика в 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, чтобы получить новые значения, а затем обновить строку перемещения счета этими новыми значениями.

Одна из причин - то, что бухгалтерский учет и счет-фактура могли быть в разной валюте.

Отказ от ответственности: изменять налоги следует только в том случае, если вы уверены в том, что делаете. Это может повлиять на налоговый отчет пользователя.

Другие вопросы по тегам