Update sale_down_payment
This commit is contained in:
@@ -12,9 +12,9 @@
|
|||||||
Sale Down Payment
|
Sale Down Payment
|
||||||
=================
|
=================
|
||||||
|
|
||||||
This module adds a link between payment and sale orders. It allows to see advanced payment directly on the sale order form view.
|
This module adds a link between payments and sale orders. It allows to see down payments directly on the sale order form view.
|
||||||
|
|
||||||
After processing a bank statement, you can start a wizard to link unreconciled incoming payments to a sale order.
|
After processing a bank statement, you can start a wizard to link unreconciled incoming payments to a sale order. There is also a button *Register Payment* on the sale order.
|
||||||
|
|
||||||
This module targets B2B companies that don't want to generate a down payment invoice for an advanced payment.
|
This module targets B2B companies that don't want to generate a down payment invoice for an advanced payment.
|
||||||
|
|
||||||
@@ -29,6 +29,7 @@ This module has been written by Alexis de Lattre from Akretion
|
|||||||
'views/account_bank_statement.xml',
|
'views/account_bank_statement.xml',
|
||||||
'views/sale.xml',
|
'views/sale.xml',
|
||||||
'views/account_move_line.xml',
|
'views/account_move_line.xml',
|
||||||
|
'views/account_payment.xml',
|
||||||
],
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
from . import sale
|
from . import sale
|
||||||
from . import account_move_line
|
from . import account_move_line
|
||||||
|
from . import account_payment
|
||||||
|
|||||||
59
sale_down_payment/models/account_payment.py
Normal file
59
sale_down_payment/models/account_payment.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# Copyright 2019 Akretion France (http://www.akretion.com)
|
||||||
|
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
from odoo.tools import float_round
|
||||||
|
|
||||||
|
|
||||||
|
class AccountPayment(models.Model):
|
||||||
|
_inherit = 'account.payment'
|
||||||
|
|
||||||
|
sale_id = fields.Many2one('sale.order', string='Sale Order')
|
||||||
|
|
||||||
|
def action_validate_invoice_payment(self):
|
||||||
|
if self.sale_id:
|
||||||
|
self.post()
|
||||||
|
else:
|
||||||
|
return super(AccountPayment, self).\
|
||||||
|
action_validate_invoice_payment()
|
||||||
|
|
||||||
|
def _get_counterpart_move_line_vals(self, invoice=False):
|
||||||
|
res = super(AccountPayment, self)._get_counterpart_move_line_vals(
|
||||||
|
invoice=invoice)
|
||||||
|
if self.sale_id:
|
||||||
|
res['sale_id'] = self.sale_id.id
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
class AccountAbstractPayment(models.AbstractModel):
|
||||||
|
_inherit = "account.abstract.payment"
|
||||||
|
|
||||||
|
def default_get(self, fields_list):
|
||||||
|
res = super(AccountAbstractPayment, self).default_get(fields_list)
|
||||||
|
if (
|
||||||
|
self._context.get('active_model') == 'sale.order' and
|
||||||
|
self._context.get('active_id')):
|
||||||
|
so = self.env['sale.order'].browse(self._context['active_id'])
|
||||||
|
res.update({
|
||||||
|
'amount': so.amount_total,
|
||||||
|
'currency_id': so.currency_id.id,
|
||||||
|
'payment_type': 'inbound',
|
||||||
|
'partner_id': so.partner_invoice_id.commercial_partner_id.id,
|
||||||
|
'partner_type': 'customer',
|
||||||
|
'communication': so.name,
|
||||||
|
'sale_id': so.id,
|
||||||
|
})
|
||||||
|
return res
|
||||||
|
|
||||||
|
def _compute_payment_amount(self, invoices=None, currency=None):
|
||||||
|
amount = super(AccountAbstractPayment, self)._compute_payment_amount(
|
||||||
|
invoices=invoices, currency=currency)
|
||||||
|
if self.sale_id:
|
||||||
|
payment_currency = currency
|
||||||
|
if not payment_currency:
|
||||||
|
payment_currency = self.sale_id.currency_id
|
||||||
|
amount = float_round(
|
||||||
|
self.sale_id.amount_total - self.sale_id.amount_down_payment,
|
||||||
|
precision_rounding=payment_currency.rounding)
|
||||||
|
return amount
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import api, fields, models
|
from odoo import api, fields, models
|
||||||
|
from odoo.tools import float_round
|
||||||
|
|
||||||
|
|
||||||
class SaleOrder(models.Model):
|
class SaleOrder(models.Model):
|
||||||
@@ -13,6 +14,9 @@ class SaleOrder(models.Model):
|
|||||||
readonly=True)
|
readonly=True)
|
||||||
amount_down_payment = fields.Monetary(
|
amount_down_payment = fields.Monetary(
|
||||||
compute='_compute_amount_down_payment', string='Down Payment Amount')
|
compute='_compute_amount_down_payment', string='Down Payment Amount')
|
||||||
|
# amount_residual : only used to hide 'Register Payment' button
|
||||||
|
amount_residual = fields.Monetary(
|
||||||
|
compute='_compute_amount_down_payment', string='Residual')
|
||||||
|
|
||||||
@api.depends(
|
@api.depends(
|
||||||
'payment_line_ids.credit', 'payment_line_ids.debit',
|
'payment_line_ids.credit', 'payment_line_ids.debit',
|
||||||
@@ -36,4 +40,9 @@ class SaleOrder(models.Model):
|
|||||||
down_payment -= sale.company_id.currency_id._convert(
|
down_payment -= sale.company_id.currency_id._convert(
|
||||||
pl.balance, sale_currency, sale.company_id,
|
pl.balance, sale_currency, sale.company_id,
|
||||||
pl.date)
|
pl.date)
|
||||||
|
down_payment = float_round(
|
||||||
|
down_payment, precision_rounding=sale.currency_id.rounding)
|
||||||
sale.amount_down_payment = down_payment
|
sale.amount_down_payment = down_payment
|
||||||
|
sale.amount_residual = float_round(
|
||||||
|
sale.amount_total - down_payment,
|
||||||
|
precision_rounding=sale.currency_id.rounding)
|
||||||
|
|||||||
23
sale_down_payment/views/account_payment.xml
Normal file
23
sale_down_payment/views/account_payment.xml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2018 Akretion France (http://www.akretion.com/)
|
||||||
|
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
-->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
|
||||||
|
<record id="view_account_payment_sale_form" model="ir.ui.view">
|
||||||
|
<field name="name">account.payment.sale.form</field>
|
||||||
|
<field name="model">account.payment</field>
|
||||||
|
<field name="inherit_id" ref="account.view_account_payment_invoice_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="invoice_ids" position="after">
|
||||||
|
<field name="sale_id" invisible="1"/>
|
||||||
|
</field>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -8,6 +8,14 @@
|
|||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
|
|
||||||
|
<record id="sale_account_payment_action" model="ir.actions.act_window">
|
||||||
|
<field name="name">Register Payment</field>
|
||||||
|
<field name="res_model">account.payment</field>
|
||||||
|
<field name="view_mode">form</field>
|
||||||
|
<field name="view_id" ref="account.view_account_payment_invoice_form"/>
|
||||||
|
<field name="target">new</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<record id="view_order_form" model="ir.ui.view">
|
<record id="view_order_form" model="ir.ui.view">
|
||||||
<field name="name">advance_payment.sale.order.form</field>
|
<field name="name">advance_payment.sale.order.form</field>
|
||||||
<field name="model">sale.order</field>
|
<field name="model">sale.order</field>
|
||||||
@@ -16,6 +24,7 @@
|
|||||||
<notebook position="inside">
|
<notebook position="inside">
|
||||||
<page name="advance_payment" string="Advance Payments">
|
<page name="advance_payment" string="Advance Payments">
|
||||||
<field name="payment_line_ids" nolabel="1"/>
|
<field name="payment_line_ids" nolabel="1"/>
|
||||||
|
<field name="amount_residual" invisible="1"/>
|
||||||
</page>
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
<field name="amount_total" position="after">
|
<field name="amount_total" position="after">
|
||||||
@@ -24,6 +33,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<field name="amount_down_payment" nolabel="1" class="oe_subtotal_footer_separator"/>
|
<field name="amount_down_payment" nolabel="1" class="oe_subtotal_footer_separator"/>
|
||||||
</field>
|
</field>
|
||||||
|
<button name="action_cancel" position="before">
|
||||||
|
<button type="action" name="%(sale_account_payment_action)d" string="Register Payment" attrs="{'invisible': ['|', ('amount_residual', '<=', 0), ('invoice_status', '=', 'invoiced')]}"/>
|
||||||
|
</button>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user