【问题标题】:How to choose invoices and make payment in payment form odoo14如何选择发票并在支付表单odoo14中付款
【发布时间】:2021-03-05 04:08:11
【问题描述】:

n v14,我想通过选择发票以付款方式进行发票付款。在 v13 中,已经有 invoice_ids 字段,我将只读更改为 0,可以付款。但是在 v14 中,没有 invoice_ids 字段。所以我创建了这个,但我该怎么做呢?我分享我的一些代码

invoice_ids = fields.Many2many('account.move', 'account_invoice_payment_rel', 'payment_id', 'invoice_id', string="Invoices", copy=False,
                                   help="""Technical field containing the invoice for which the payment has been generated.
                                   This does not especially correspond to the invoices reconciled with the payment,
                                   as it can have been generated first, and reconciled later""")

我的看法是

record id="view_account_payment_form_inherit_payment" model="ir.ui.view">
                <field name="name">view.account.payment.form.inherit.payment</field>
                <field name="model">account.payment</field>
                <field name="inherit_id" ref="account.view_account_payment_form"/>
                <field name="arch" type="xml">
                  <xpath expr="//group" position="after">
                    <group invisible="context.get('active_model') == 'account.move'">
                      <field name="invoice_ids" attrs="{'invisible': [('partner_id', '=', False)]}"   readonly="1" domain="[('partner_id','child_of',partner_id),('state','=','posted'),('payment_state','=','not_paid')]" >
                          
                          <tree>
                              <field name="partner_id"/>
                              <field name="name"/>
                              <field name="amount_residual"/>
                              <field name="state"/>
                          </tree>
                      </field>
                    </group>
                    <xpath/>
                    </field>
                    </record/>
              

【问题讨论】:

  • 你找到解决方案了吗?
  • @Bashir。我找到了解决方案
  • 解决方案是什么?
  • @Bashir。我分享了我的代码。希望这对你有用。但是你需要为inoices id编写xml文件。
  • @Bashir。它对你有用吗?

标签: odoo accounting


【解决方案1】:
class AccountPayment(models.Model):
    _inherit = 'account.payment'
    invoice_ids = fields.Many2many('account.move', 'account_invoice_payment_rel', 'payment_id', 'invoice_id', string="Invoices", copy=False,
                                   help="""Technical field containing the invoice for which the payment has been generated.
                                   This does not especially correspond to the invoices reconciled with the payment,
                                   as it can have been generated first, and reconciled later""")

    def action_view_move(self):
        return {
            'name': _('Journal Entries'),
            'view_mode': 'tree,form',
            'res_model': 'account.move',
            'view_id': False,
            'type': 'ir.actions.act_window',
            'domain': [('id', 'in', self.mapped('move_id').ids)],
            'context': {
                'journal_id': self.journal_id.id,
            }
        }

    @api.depends('amount')
    def _compute_amount_untaxed(self):
        rec = []
        untaxed_amount = 0.0
        for payment in self:
            if payment.invoice_ids:
                for invoice in payment.invoice_ids:
                    # untaxed_amount += invoice.amount_untaxed_signed
                    # if invoice.move_type == 'out_invoice':
                    #     untaxed_amount += invoice.amount_untaxed
                    # elif invoice.move_type == 'out_refund':
                    #     untaxed_amount -= invoice.amount_untaxed

                    if invoice.move_type in ['out_invoice','in_refund']:
                        untaxed_amount += invoice.amount_untaxed
                    elif invoice.move_type in ['out_refund','in_invoice']:
                        untaxed_amount -= invoice.amount_untaxed
            payment.amount_untaxed = abs(untaxed_amount)
        return rec
    @api.onchange('invoice_ids')
    def _compute_amount(self):
        logging.info("======================= compute_amount =================")
        logging.info("===== invoice.")      
        total = 0.0
        if self.invoice_ids:
            for invoice in self.invoice_ids:
                if invoice.move_type in ['out_invoice','in_refund']:
                    total += invoice.amount_total_signed
                elif invoice.move_type in ['out_refund','in_invoice']:
                    total -= invoice.amount_total_signed
                self.amount = total

   
    
    def action_post(self):
        res = super(AccountPayment, self).action_post()
        # logging.info("=========================== action_post start here")
        # logging.info(res)
        # logging.info(self)
        for payment_res in self:
            # logging.info("-------- payment_res")
            # logging.info(payment_res)
            # logging.info(payment_res.amount)
            # logging.info(payment_res.invoice_ids)
  
            if payment_res.invoice_ids:
                moves_to_reconcile = []
                # for move in payment_res.move_id.line_ids:
                #     logging.info("============ before_moves_to_reconcile =================")
                #     logging.info(partner_account)
                #     logging.info(payment_res)
                #     logging.info(payment_res.display_name)
                #     logging.info(payment_res.move_id)
                #     logging.info(payment_res.move_id.display_name)
                #     logging.info(move)
                #     logging.info(move.display_name)
                #     logging.info(move.account_id)
                #     logging.info(move.account_id.display_name)
                for move in payment_res.move_id.line_ids:
                    # logging.info("**************************")
                    # logging.info(move.display_name)
                    # logging.info(move.account_id.id)
                    # logging.info(move.account_id.display_name)
                    if move.account_id.id == partner_account:
                        moves_to_reconcile = []
                        moves_to_reconcile.append(move.id)
                        # logging.info("============ moves_to_reconcile1 =================")
                        # logging.info(moves_to_reconcile)
                for invoice in payment_res.invoice_ids:
                    for move in invoice.line_ids:
                        # logging.info("------------------------------------")
                        # logging.info(partner_account)
                        # logging.info(move.account_id.id)
                        # logging.info("------------------------------------")
                        if move.account_id.id == partner_account:
                            moves_to_reconcile.append(move.id)
                # if moves_to_reconcile:
                    # logging.info("============ moves_to_reconcile2 =================")
                    # logging.info(moves_to_reconcile)
                move_lines = self.env['account.move.line'].search([('id','in',moves_to_reconcile)])
                move_lines.reconcile()
        # logging.info("=========================== action_post end here")
        return res
 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2021-12-28
    • 2021-03-24
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多