feat: add dlv_account_move_copy_ref — copy customer ref on duplicate of customer invoice/credit note, with OK-popup warning
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [16.0.1.0.0] - 2026-10-04
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Initial release.
|
||||||
|
- `account.move.ref` is copied on duplicate for customer invoices and customer
|
||||||
|
credit notes (`out_invoice`, `out_refund`).
|
||||||
|
- Warning dialog (OK to continue) after the Duplicate action when the copied reference has
|
||||||
|
a value.
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# dlv_account_move_copy_ref
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
In core Odoo the reference of an invoice (`account.move.ref`, label
|
||||||
|
**Customer Reference** on customer documents) is not copied when the invoice is
|
||||||
|
duplicated. This addon makes it copy, and warns the user afterwards.
|
||||||
|
|
||||||
|
## How it works
|
||||||
|
|
||||||
|
- **Python** (`models/account_move.py`): `ref` gets `copy=True`. `copy_data()`
|
||||||
|
removes it again for every move that is not `out_invoice` / `out_refund`, so
|
||||||
|
vendor bills and journal entries keep the core behaviour. An explicit `ref`
|
||||||
|
in the `default` dict always wins (credit note reversal sets its own).
|
||||||
|
- **JS** (`static/src/js/duplicate_warning.js`): patches
|
||||||
|
`FormController.duplicateRecord`. After the duplicate, if the new record is an
|
||||||
|
`account.move` customer invoice/credit note with a non-empty `ref`, a modal alert dialog (OK button)
|
||||||
|
warning is shown: "'Customer Reference' was also copied, check
|
||||||
|
whether it is still relevant or should be removed." (nl: "'Referentie klant'
|
||||||
|
werd ook gekopieerd, kijk na of dit relevant is of dient verwijderd te
|
||||||
|
worden.")
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
- Only the Duplicate action in the form view shows the warning. Server-side
|
||||||
|
`copy()` calls (e.g. recurring entries) copy the reference silently.
|
||||||
|
- No warning when `ref` is empty.
|
||||||
|
|
||||||
|
## Compatibility
|
||||||
|
|
||||||
|
- Odoo 16.0 (Community and Enterprise)
|
||||||
|
- Depends on: `account`
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
bv Domus La Vila — https://domuslavila.eu
|
||||||
|
|
||||||
|
License: LGPL-3
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
{
|
||||||
|
"name": "DLV Account Move Copy Ref",
|
||||||
|
"summary": "Copy the customer reference when duplicating a customer "
|
||||||
|
"invoice or credit note, and warn about it",
|
||||||
|
"description": """
|
||||||
|
By default the reference (account.move.ref, shown as "Customer Reference")
|
||||||
|
is not copied when an invoice is duplicated.
|
||||||
|
|
||||||
|
This addon copies it for customer invoices and customer credit notes
|
||||||
|
(out_invoice, out_refund). Vendor bills and journal entries are unchanged.
|
||||||
|
|
||||||
|
After the Duplicate action in the form view, a warning dialog is shown
|
||||||
|
when the copied reference has a value, so the user can check whether it is
|
||||||
|
still relevant or has to be removed.
|
||||||
|
""",
|
||||||
|
"author": "bv Domus La Vila",
|
||||||
|
"website": "https://domuslavila.eu",
|
||||||
|
"category": "Accounting/Accounting",
|
||||||
|
"version": "16.0.1.0.0",
|
||||||
|
"license": "LGPL-3",
|
||||||
|
"depends": ["account"],
|
||||||
|
"data": [],
|
||||||
|
"assets": {
|
||||||
|
"web.assets_backend": [
|
||||||
|
"dlv_account_move_copy_ref/static/src/js/duplicate_warning.js",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"installable": True,
|
||||||
|
"application": False,
|
||||||
|
"auto_install": False,
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * dlv_account_move_copy_ref
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 16.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#. module: dlv_account_move_copy_ref
|
||||||
|
#. odoo-javascript
|
||||||
|
#: code:addons/dlv_account_move_copy_ref/static/src/js/duplicate_warning.js:0
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"'Customer Reference' was also copied, check whether it is still relevant or "
|
||||||
|
"should be removed. You can find it under the 'Other Info' tab."
|
||||||
|
msgstr ""
|
||||||
|
"'Referentie klant' werd ook gekopieerd, kijk na of dit relevant is of dient "
|
||||||
|
"verwijderd te worden. Je vindt dit onder tab 'Overige info'."
|
||||||
|
|
||||||
|
#. module: dlv_account_move_copy_ref
|
||||||
|
#. odoo-javascript
|
||||||
|
#: code:addons/dlv_account_move_copy_ref/static/src/js/duplicate_warning.js:0
|
||||||
|
#, python-format
|
||||||
|
msgid "Warning"
|
||||||
|
msgstr "Waarschuwing"
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * dlv_account_move_copy_ref
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 16.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"Language: nl_BE\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#. module: dlv_account_move_copy_ref
|
||||||
|
#. odoo-javascript
|
||||||
|
#: code:addons/dlv_account_move_copy_ref/static/src/js/duplicate_warning.js:0
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"'Customer Reference' was also copied, check whether it is still relevant or "
|
||||||
|
"should be removed. You can find it under the 'Other Info' tab."
|
||||||
|
msgstr ""
|
||||||
|
"'Referentie klant' werd ook gekopieerd, kijk na of dit relevant is of dient "
|
||||||
|
"verwijderd te worden. Je vindt dit onder tab 'Overige info'."
|
||||||
|
|
||||||
|
#. module: dlv_account_move_copy_ref
|
||||||
|
#. odoo-javascript
|
||||||
|
#: code:addons/dlv_account_move_copy_ref/static/src/js/duplicate_warning.js:0
|
||||||
|
#, python-format
|
||||||
|
msgid "Warning"
|
||||||
|
msgstr "Waarschuwing"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
from . import account_move
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
CUSTOMER_MOVE_TYPES = ("out_invoice", "out_refund")
|
||||||
|
|
||||||
|
|
||||||
|
class AccountMove(models.Model):
|
||||||
|
_inherit = "account.move"
|
||||||
|
|
||||||
|
# Core has copy=False. Flipped to True here; copy_data() below limits the
|
||||||
|
# effect to customer invoices and credit notes.
|
||||||
|
ref = fields.Char(copy=True)
|
||||||
|
|
||||||
|
def copy_data(self, default=None):
|
||||||
|
data_list = super().copy_data(default)
|
||||||
|
if default and "ref" in default:
|
||||||
|
return data_list
|
||||||
|
for move, data in zip(self, data_list):
|
||||||
|
if move.move_type not in CUSTOMER_MOVE_TYPES:
|
||||||
|
data.pop("ref", None)
|
||||||
|
return data_list
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/** @odoo-module **/
|
||||||
|
|
||||||
|
import { patch } from "@web/core/utils/patch";
|
||||||
|
import { FormController } from "@web/views/form/form_controller";
|
||||||
|
import { AlertDialog } from "@web/core/confirmation_dialog/confirmation_dialog";
|
||||||
|
|
||||||
|
const CUSTOMER_MOVE_TYPES = ["out_invoice", "out_refund"];
|
||||||
|
|
||||||
|
patch(FormController.prototype, "dlv_account_move_copy_ref", {
|
||||||
|
async duplicateRecord() {
|
||||||
|
await this._super(...arguments);
|
||||||
|
const root = this.model.root;
|
||||||
|
if (
|
||||||
|
root.resModel === "account.move" &&
|
||||||
|
CUSTOMER_MOVE_TYPES.includes(root.data.move_type) &&
|
||||||
|
root.data.ref
|
||||||
|
) {
|
||||||
|
await new Promise((resolve) => {
|
||||||
|
this.env.services.dialog.add(
|
||||||
|
AlertDialog,
|
||||||
|
{
|
||||||
|
title: this.env._t("Warning"),
|
||||||
|
body: this.env._t(
|
||||||
|
"'Customer Reference' was also copied, check whether it is " +
|
||||||
|
"still relevant or should be removed. You can find it " +
|
||||||
|
"under the 'Other Info' tab."
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ onClose: resolve }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user