Compare commits

..

194 Commits

Author SHA1 Message Date
Florian da Costa
3f133ab663 [IMP] Add default agent boolean when creating an agent from the commission profile view 2025-09-10 10:46:26 +02:00
Florian da Costa
47197eb5f6 [FIX] chatter in commission result view + add action name for all commission related new actions 2025-09-09 12:21:32 +02:00
Florian da Costa
5ca18e6374 [MIG] commission_simple_agent_purchase to 18 2025-09-09 12:04:37 +02:00
Benoît
4d52d54460 fix missing import 2025-09-02 17:50:27 +02:00
Benoît
0a260e0b54 mig report 2025-09-02 17:30:48 +02:00
Florian da Costa
46e11948fd [MIG] commission_simple_agent : technical migration to 18 2025-09-02 16:02:40 +02:00
Florian da Costa
a19ec0db45 [MIG] commission_simple to 18 2025-09-02 15:59:08 +02:00
Florian da Costa
6af8aac67e [MIG] sale_agent to v18 2025-09-02 15:32:29 +02:00
Alexis de Lattre
36b35f1b87 [IMP] l10n_fr_account_profile_akretion: Add dep on account_dashboard_banner 2025-07-17 15:28:24 +02:00
Alexis de Lattre
f1f808d977 [UDP] l10n_fr_account_profile_akretion: new module names and newly ported modules 2025-06-25 16:02:24 +02:00
Alexis de Lattre
11f3d393b5 mail_debrand has been moved from OCA/social to OCA/mail in v18 2025-06-25 12:31:18 +02:00
Alexis de Lattre
ca5730c701 [IMP] base_profile_akretion: add mail_debrand 2025-06-25 12:23:13 +02:00
Alexis de Lattre
76a1bbd9f4 [IMP] stock_usability_akretion: add button to show reservations from quand tree view 2025-06-23 12:32:03 +02:00
Alexis de Lattre
48d5a3b327 [IMP] stock_quant_package_move_wizard: more accurate source location on picking when all quants have the same location 2025-06-23 12:24:43 +02:00
Akretion Git Bot
836a88dfeb [BOT] add or update setup/_metapackage 2025-05-26 10:16:44 +00:00
Akretion Git Bot
8182b839d4 [BOT] add pyproject.toml 2025-05-26 10:16:43 +00:00
Akretion Git Bot
6cd86f8820 [ADD] icon.png 2025-05-26 10:16:43 +00:00
Alexis de Lattre
76e93f0379 [MIG] l10n_fr_account_profile_akretion from v16 to v18 2025-05-26 12:16:18 +02:00
Alexis de Lattre
d9f65b96fc Remove patch web-advanced_search_startswith.diff (native in v18) 2025-05-26 11:47:26 +02:00
Akretion Git Bot
a729762b4a [BOT] add or update setup/_metapackage 2025-05-26 09:19:03 +00:00
Akretion Git Bot
18551f9b0d [BOT] add pyproject.toml 2025-05-26 09:19:03 +00:00
Akretion Git Bot
05b2d14cd2 [ADD] icon.png 2025-05-26 09:19:02 +00:00
Akretion Git Bot
1d57615b97 [UPD] README.rst 2025-05-26 09:19:02 +00:00
Alexis de Lattre
545cd797e3 [MIG] base_company_extension, eradicate_quick_create, mail_usability_akretion, base_profile_akretion to v18 2025-05-26 11:18:22 +02:00
Alexis de Lattre
70b66681d6 [IMP] stock_usability_akretion: add seller_id on orderpoints 2025-05-20 10:30:29 +02:00
Akretion Git Bot
2e93aaa55b [UPD] README.rst 2025-04-01 16:35:45 +00:00
Alexis de Lattre
5b6a166ed6 [IMP] account_usability_akretion: add move_id on account.payment form view 2025-04-01 18:35:07 +02:00
Alexis de Lattre
a6f1d4a230 [IMP] stock_valuation_xlsx: move field in wizard 2025-02-26 12:12:17 +01:00
Akretion Bot
4abcac94d5 [BOT] add or update setup/_metapackage 2025-01-30 02:36:14 +00:00
Akretion Bot
30d16837ed [BOT] add pyproject.toml 2025-01-30 02:36:14 +00:00
Akretion Bot
9068bf1d97 [ADD] icon.png 2025-01-30 02:36:14 +00:00
Akretion Bot
d0f9ce3d62 [UPD] README.rst 2025-01-30 02:36:13 +00:00
Alexis de Lattre
b0961e4f8d [FIX] base_partner_ref: don't display [REF] when there is show_address in contex 2025-01-15 21:29:29 +01:00
Alexis de Lattre
ea4b698590 [IMP] base_usability: add siren/siret on display method for partners 2025-01-14 15:43:00 +01:00
Benoît Guillot
a0aec274a5 Merge pull request #229 from akretion/18.0-base_usability_akretion_Send-mail
[FIX] base_usability_akretion ir.mail_server send mail
2025-01-09 14:06:14 +01:00
David Beal
65458407b7 REMove developer_menu: see OCA/server-ux 2025-01-09 12:45:52 +01:00
Bonnerue
62ca33ed4b [FIX] base_usability_akretion ir.mail_server send mail 2025-01-09 12:02:40 +01:00
Alexis de Lattre
dbc2b3ddcc [MIG] pos-always_open_cashbox.diff to v18 2024-12-31 18:14:31 +01:00
Alexis de Lattre
8d5a23b478 [MIG] mrp_usability_akretion: migrate to v18 2024-12-31 11:28:06 +01:00
Alexis de Lattre
fae6bf361a [MIG] sale_stock_usability_akretion: migrate to 18 2024-12-31 11:01:01 +01:00
Alexis de Lattre
b51c1ff7d9 [MIG] sale_usability_akretion: migrate to v18 2024-12-31 10:38:09 +01:00
Alexis de Lattre
bdf4a527de [MIG] account_usability_akretion to v18
Move code from account_usability_akretion to base_usability_akretion
2024-12-31 01:02:50 +01:00
Alexis de Lattre
8e5d3b8a74 [MIG] purchase_stock_usability_akretion to v18
incoterm_id is a field of purchase module, not purchase_stock ; so move
the inherit of this field from purchase_stock_usability_akretion to
purchase_usability_akretion
2024-12-30 12:47:30 +01:00
Alexis de Lattre
b9d313fa8c [MIG] stock_usability_akretion to v18 2024-12-30 12:18:32 +01:00
Alexis de Lattre
37fb616524 [MIG] purchase_usability_akretion to v18 2024-12-30 00:06:13 +01:00
Alexis de Lattre
88f6521964 [MIG] pos_usability_akretion: migrate to v18 2024-12-29 00:41:22 +01:00
Alexis de Lattre
ab7ec7829d [MIG] product_usability_akretion to v18 2024-12-28 23:52:48 +01:00
Alexis de Lattre
f9f06d83e2 [MIG] base_usability_akretion, base_partner_ref, partner_tree_default_account, partner_tree_default_base, partner_tree_default_contacts to v18 2024-12-25 01:50:21 +01:00
Alexis de Lattre
47cf7389cc [FIX] pos_check_deposit: fix field visibility 2024-12-24 12:50:47 +01:00
Alexis de Lattre
29a2739c18 [MIG] pos_check_deposit to v18 2024-12-24 12:29:14 +01:00
Alexis de Lattre
13744fc404 Initialize v18 branch
Rename *_usability modules to *_usability_akretion
2024-12-24 10:11:21 +01:00
Alexis de Lattre
9913924202 stock_usability: avoid double menu entry "Locations" under Inventory > Analysis (one native on quants and a second one on stock.location added by stock_usability) 2024-12-20 16:57:59 +01:00
Alexis de Lattre
cc29d1d29f stock_valuation_xlsx: update translation 2024-12-20 16:51:07 +01:00
Alexis de Lattre
7b55172537 [IMP] stock_valuation_xlsx: remove XLSX in menu entry names 2024-12-20 16:39:08 +01:00
Alexis de Lattre
5f227f9b72 [IMP] intrastat_product_type: improve support for is accessory cost 2024-12-16 14:20:51 +00:00
Alexis de Lattre
c6fb47c1e2 [IMP] account_usability_akretion: improve industry_id in account.invoice.report 2024-12-16 14:20:27 +00:00
Alexis de Lattre
c0edd6fa57 base_dynamic_list: Improve module description 2024-12-16 14:20:03 +00:00
Alexis de Lattre
9ea7a79d21 [MIG] intrastat_product_type from v14 to v16 2024-12-11 22:45:45 +01:00
Alexis de Lattre
d9b43df0f1 commission_simple: display fields on account.move.line 2024-12-10 13:02:46 +01:00
Alexis de Lattre
ba7406290b sale_stock_usability: Add code for delivery report with prices (for export) 2024-12-06 10:22:45 +00:00
Alexis de Lattre
5af6c895d0 Add modules commission_simple, commission_simple_agent, commission_simple_agent_purchase
Add demo data in sale_agent
2024-11-30 01:19:31 +01:00
Alexis de Lattre
7bdd579b1c [IMP] product_usability: add main supplier in tree view as optional 2024-11-25 09:33:03 +01:00
Alexis de Lattre
c9f0569516 [IMP] account_usability_akretion: improve action from account.account form view that jumps to account.move.line tree view 2024-11-25 08:23:45 +00:00
Alexis de Lattre
c37b607f97 [IMP] sale_agent: add tracking and fr translation 2024-11-21 09:59:39 +01:00
Alexis de Lattre
5f4929f819 [IMP] base_usability: add possibility to have fax in header if partner_fax is installed 2024-11-19 16:14:35 +00:00
Alexis de Lattre
59c7084159 base_company_extension: handle case where company legal type is already in company name 2024-11-19 15:28:59 +00:00
Alexis de Lattre
a2952ca6b2 [IMP] base_usability: add fields in partner tree view with optional=hide 2024-11-08 16:19:39 +00:00
Alexis de Lattre
f5b8f1674a [FIX] sale_agent: double string 2024-11-07 17:24:57 +01:00
Alexis de Lattre
e22badc605 Add module sale_agent 2024-11-07 17:18:57 +01:00
Alexis de Lattre
f93f17b27b [IMP] stock_usability: add tracking on lot fields (model already inherit from mail.thread) 2024-11-05 00:21:36 +01:00
Florian
74586cff13 Merge pull request #220 from akretion/16-account-usability-warning-existing-reverse-move
[16] account_usability_akretion : Replace error by warning in case a user try to reverse an already reversed account move
2024-10-23 11:27:11 +02:00
Alexis de Lattre
48c0e02e94 [IMP] stock_valuation_xlsx french translation 2024-10-22 10:06:19 +02:00
Alexis de Lattre
a035748c2d [IMP] stock_valuation_xlsx: FR translation 2024-10-21 18:39:45 +02:00
Alexis de Lattre
594c3fb0ed [IMP] stock_valuation_xlsx: add barcode in stock variation report
Fix empty col in variation XLSX report
2024-10-21 17:31:02 +02:00
Alexis de Lattre
02c082f966 [MIG] stock_valuation_xlsx from v14 to v16 2024-10-21 14:46:24 +02:00
Alexis de Lattre
97cf376e90 purchase_usability: take into account ir.config_parameter usability.line_name_no_product_code when using _prepare_purchase_order_line() 2024-10-17 10:57:35 +02:00
Alexis de Lattre
c3f007e716 [IMP] product_usability: optional=show on min_qty 2024-10-15 12:33:36 +00:00
Alexis de Lattre
a333bc4e84 [IMP] stock_usability: always show picking_type_id in the last tab of the picking form view 2024-10-10 17:27:08 +00:00
Alexis de Lattre
9e5670934e Improve mrp_subcontracting_usability: add fields in views, domain on subcontractor_ids M2M field on mrp.bom. 2024-10-08 13:54:36 +00:00
Alexis de Lattre
c74a647945 [IMP] account_usability_akretion: simplify code for invoice attach del upon invoice back to draft 2024-09-30 10:54:14 +02:00
Alexis de Lattre
fca7209056 [FIX] account_usability_akretion: fix deletion of PDF invoice attachment when invoice is back to draft 2024-09-30 09:08:58 +02:00
Alexis de Lattre
6d9b4c92eb sale_stock_usability: add method to display delivery order on out invoice report 2024-09-30 08:18:37 +02:00
Alexis de Lattre
68327c28b6 base_usability: Add rcs_siren in company header 2024-09-30 08:15:07 +02:00
Alexis de Lattre
592e40637a mrp_usability: add tracking on some fields 2024-09-30 08:12:56 +02:00
Alexis de Lattre
b6624f2491 [IMP] account_usability_akretion: add search on account in account.move search view 2024-09-30 08:07:00 +02:00
Alexis de Lattre
3a11c99ccb stock_usability: Add product_barcode on orderpoint tree view (optional hide) 2024-09-30 07:47:36 +02:00
Alexis de Lattre
36f277940c [MIG] partner_products_shortcut to v16 2024-09-30 07:40:24 +02:00
Florian da Costa
c09e3a1108 [IMP] account_usability_akretion : Replace error by warning in case a user try to reverse an already reversed account move
The goal is to allow multiple refund for a single invoice. It may happen to refund invoice partially and they refund again partially later.
2024-08-28 15:49:26 +02:00
Alexis de Lattre
3b5b64349b stock_usability: trigger now 'manual' by default 2024-07-18 13:11:32 +00:00
Alexis de Lattre
efddeb3a3c product_usability: add support for GTIN-14 in barcode type 2024-07-18 13:05:50 +00:00
Alexis de Lattre
c126a286c4 forward port patch web-buttons_14_max_instead_of_7.diff from v14 to v16 2024-07-15 08:29:31 +00:00
Alexis de Lattre
670ba212d9 Remove patch web-export-add_technical_field_name.diff because the feature is now native 2024-07-11 18:53:03 +02:00
Alexis de Lattre
c26ed6cdfb base_partner_ref: Remove commented code 2024-07-09 14:45:39 +02:00
Alexis de Lattre
dd0841385f account_usability_akretion: update FR translation
Fix res.company form view
sale_usability: enable static terms on res.company form view
2024-07-09 12:50:52 +02:00
Alexis de Lattre
b91abe54a5 Add fr translation several usability modules
Add fr translation for crm_usability, delivery_usability, link_tracker_usability, mail_usability, mass_mailing_usability, mrp_subcontracting_usability and pos_usability
2024-07-08 00:12:44 +02:00
Raphaël Valyi
210af49098 Merge pull request #219 from akretion/16.0-mig-sale_no_optional_product
[MIG] sale_no_optional_product
2024-07-06 16:06:46 -03:00
Raphaël Valyi
19158d9309 [MIG] sale_no_optional_product 2024-07-05 21:02:46 +00:00
Alexis de Lattre
4577524f0e stock_usability: add FR translation 2024-07-05 00:32:26 +02:00
Alexis de Lattre
8fd0cb5601 mrp_usability: update FR translation 2024-07-04 18:23:23 +02:00
Alexis de Lattre
8d584871d6 sale_usability+sale_stock_usability: update FR translation
sale_usability: remove wizard discount on all lines, which is mostly native
2024-07-04 18:13:41 +02:00
Alexis de Lattre
a7fd6a1361 purchase_usability+purchase_stock_usability: Add FR translation 2024-07-04 17:32:51 +02:00
Alexis de Lattre
2b2293593c product_usability: add FR translation 2024-07-04 17:15:53 +02:00
Alexis de Lattre
f1614afda2 base_usability: update fr translation 2024-07-04 16:49:54 +02:00
Alexis de Lattre
227a7ec18d Add patch for OCA localization 2024-06-21 17:32:16 +02:00
Arnaud LAYEC
827557689f Add a 'send & save' button next to 'save & close' 2024-06-15 12:30:21 +02:00
Arnaud LAYEC
67ff087f6e Add 'Opportunity' field on a new 'CRM' notebook page on Calendar 2024-06-15 12:30:21 +02:00
Arnaud LAYEC
9507be2943 [base_mail_sender_bcc] manifest version change from 14 to 16.0.1.0.0 2024-06-15 12:30:21 +02:00
Alexis de Lattre
740d167331 purchase_stock_generic_product and sale_stock_generic_product: allows the use of generic products 2024-06-15 12:24:12 +02:00
Alexis de Lattre
d07e38e1f3 base_usability: add group by on industry_id on partner search view 2024-06-13 10:04:08 +02:00
Alexis de Lattre
55b84a170e account_usability_ak: pivot view by default on account.invoice.report 2024-06-13 10:03:03 +02:00
Mourad
252da11a30 [16.0] IMP display currency for partner bank account 2024-05-06 14:07:28 +02:00
Alexis de Lattre
4ee69f3bff pos_usability: add payment methods in tree view of pos.order (via a computed char field) 2024-04-12 15:08:01 +00:00
Alexis de Lattre
46fcf5c0ef base_usability: add name_get() on ir.model.fields
Add patch to add technical field name in export dialog box
2024-04-11 19:29:14 +02:00
Alexis de Lattre
2c794033b0 mrp_usability: Allow to change the destination location until 'Mark as done'
Native behavior: it is only possible to change the destination stock
location of a production order in draft state.
2024-04-09 19:27:07 +02:00
Alexis de Lattre
2f784eb1a0 sale_usability: improve tree view of sale.order 2024-04-09 17:03:11 +02:00
Alexis de Lattre
b019baed6e [IMP] base_usability: improve report header methods on res.company 2024-03-27 11:17:26 +01:00
David Beal
5532a8e165 IMP dev_menu: update items 2024-03-22 10:26:41 +01:00
Olivier Nibart
a4c2a43cf7 [16.0][MIG] product_manager_group 2024-03-14 16:12:31 +01:00
Olivier Nibart
f9246c6988 [16.0][MIG] product_manager_group_stock 2024-03-14 16:12:04 +01:00
Alexis de Lattre
8364b42930 product_print_zpl_barcode: add timeout and improve error message 2024-03-13 12:27:09 +01:00
Alexis de Lattre
df370f4948 account_usability_ak: optional=show on general account of analytic lines 2024-03-06 16:04:03 +00:00
Alexis de Lattre
282f48db3e sale_order_route: fix crash upon module installation and add route_id in sale.report
sale_stock_usability: direct access to warehouse_id in the sale.report pivot view
2024-02-27 12:34:25 +01:00
Alexis de Lattre
73c3c1a664 base_usability: add ape, eori and siret as ready-to-go fields in header 2024-02-07 22:01:30 +00:00
Alexis de Lattre
ac0afd6e2b [FIX] product_print_zpl_barcode: remove usage of print group 2024-01-30 18:05:14 +01:00
Alexis de Lattre
a61d1458d8 product_print_zpl_barcode: remove dependency on base_report_to_printer
We now print directly on the ZPL printer, without going through CUPS
2024-01-30 17:00:56 +01:00
Alexis de Lattre
0756beb8f5 base_usability: add web-advanced_search_startswith.diff 2024-01-22 23:47:15 +01:00
Alexis de Lattre
0656d319ce stock_usability: improve product.template tree view 2024-01-18 13:50:10 +00:00
Alexis de Lattre
a517fe67a8 account_usability_akretion: update account.invoice.report views 2024-01-18 13:22:46 +00:00
Alexis de Lattre
2953baba22 [FIX] purchase_stock_usability and purchase_usability: fix computation of supplier code 2023-11-30 10:41:08 +00:00
Alexis de Lattre
5ea3f5adfd [MIG] sale_order_route: to v16 2023-11-30 10:40:27 +00:00
Alexis de Lattre
92a1b511c1 purchase_stock_usability: add product_supplier_code in tree view of stock.move and stock.move.line
purchase_usability: improve computation of product_supplier_code on purchase order line
2023-11-29 16:51:15 +01:00
Alexis de Lattre
5ad925cee1 [MIG] base_dynamic_list from v14 to v16 2023-11-23 19:07:55 +01:00
Alexis de Lattre
b8e335fb10 [MIG] link_tracker_usability to v16 2023-11-23 11:51:37 +01:00
Alexis de Lattre
c693ccc62c pos_usability: add patch "pos-always_open_cashbox.diff" 2023-10-24 11:50:00 +02:00
Alexis de Lattre
983a25367f pos_usability : finalize order by sequence on pos.payment.method 2023-10-23 15:22:36 +02:00
Alexis de Lattre
e36f88e23a pos_usability: add sequenc eon pos.payment.method 2023-10-23 12:40:09 +00:00
Alexis de Lattre
18e9ed99ff [FIX] stock_quant_package_move_wizard: set picking_id on stock.move.line 2023-10-05 21:57:57 +02:00
Alexis de Lattre
dea732e270 account_usability_ak: add blocked on account.move and show warning banner on invoice form view 2023-09-27 23:41:58 +02:00
Alexis de Lattre
150916200d stock_usability: remove default filter my counts 2023-09-11 19:09:05 +02:00
Alexis de Lattre
48247b6d06 Add module sale_remove_my_quotation_filter 2023-09-11 18:42:08 +02:00
Alexis de Lattre
1971808c7d purchase_stock_usability: add picking_type_id in tree view (hide) 2023-09-06 16:02:11 +02:00
Alexis de Lattre
5724d31ac1 stock_usability: Add computed field is_dropship (needed to customize some reports)
Add optional fields in stock.move tree view
2023-09-06 15:56:12 +02:00
Alexis de Lattre
3ecfde15f0 Add module mrp_subcontracting_usability 2023-09-06 15:43:38 +02:00
Alexis de Lattre
44fedbf72e [MIG] base_partner_one2many_phone v14 -> v16 2023-09-06 00:41:29 +02:00
Alexis de Lattre
5f731d18f1 Fix string 2023-07-15 15:40:48 +02:00
Alexis de Lattre
7477deeae3 product_print_zpl_barcode: print multi labels at once
Print from product tree view and form view (product.product and product.template)
Print from done stock picking using must_print_barcode
2023-07-15 15:16:58 +02:00
Alexis de Lattre
2905b5f426 pos_usability: add product_id in pos.order.line form view 2023-07-13 11:58:25 +02:00
Alexis de Lattre
42287c674a Remove module sales_team_usability
Remove module sales_team_usability because, in v16, it's too risky to
change a field from translate=True to Translate=False
2023-06-29 15:19:04 +02:00
Alexis de Lattre
01eff33bcb account_usability_ak : improve journal view (hide->show on payment_account_id) 2023-06-29 12:46:18 +02:00
Alexis de Lattre
14bb6c5834 [MIG] eradicate_quick_create to v16 2023-06-29 11:12:05 +02:00
Mourad
695eaed6b9 [FIX][16.0] account_usability_akretion : Translations 2023-06-12 16:54:19 +02:00
Alexis de Lattre
2a862a96d5 [MIG] base_partner_ref to v16 2023-06-02 16:29:10 +02:00
Alexis de Lattre
e435a250f3 account_usability_akretion: add chatter messages when reversing an account.move
This is a forward-port of a commit in account_usability v14
2023-05-16 19:48:14 +02:00
Alexis de Lattre
facd3adf74 account_product_fiscal_classification_pos_sale: Add inherit of group_by 2023-05-15 15:03:54 +02:00
Alexis de Lattre
e5393eb88d Rename to account_product_fiscal_classification_pos_sale 2023-05-15 15:01:17 +02:00
Alexis de Lattre
2764390d40 Add module account_product_fiscal_classification_sale 2023-05-15 14:29:40 +02:00
Alexis de Lattre
d87ff61f2f account_usability_akretion: show inv duplicate warning not only in draft state, but also in posted state
Add confirm button on cancel button
2023-04-06 18:32:48 +02:00
David Beal
a1f8185549 IMP dev_menu: apply new style for menuitem 2023-03-23 12:19:54 +01:00
David Beal
2997154c49 Update menu_view.xml 2023-03-23 12:19:54 +01:00
David Beal
db24e73175 IMP base_usa: add write_date on config parameter 2023-03-22 10:08:07 +01:00
Alexis de Lattre
1e19fc906c [MIG] pos_usability to v16 2023-03-17 10:20:29 +00:00
Alexis de Lattre
b954772126 account_usability: fix journal form view 2023-03-03 11:26:37 +01:00
Alexis de Lattre
3f16203ffc account_usability: remove account type from res.partner.tree view 2023-03-02 14:48:37 +01:00
Alexis de Lattre
21f5b53f8b [MIG] product_print_zpl_barcode to v16 2023-03-01 23:19:50 +01:00
Alexis de Lattre
02970847f4 stock_usability: add simple stock.quant tree view (readonly) without JS
Add a button from stock.location to access simple stock.quant tree view
2023-02-13 23:46:30 +01:00
Alexis de Lattre
16f5c9e955 [ADD] stock_quant_package_move_wizard 2023-02-13 23:44:01 +01:00
Alexis de Lattre
875eadc516 Add module pos_check_deposit 2022-12-29 22:44:12 +01:00
Alexis de Lattre
f9f5d2e1b9 account_usability_akretion: fix crash on account.account search on code 2022-12-29 00:07:08 +01:00
Alexis de Lattre
795e9a1737 stock_usability: inventory: set default location via filter on location 2022-12-27 14:30:24 +01:00
Alexis de Lattre
492a7275c2 Remove translate=False
fixes bug #190
2022-12-17 18:51:14 +01:00
Alexis de Lattre
16c4b1cebe Restore sale/purchase/account line 'name' field without product_code via ir.config_parameter 2022-12-14 09:51:51 +00:00
Alexis de Lattre
aad5fa4ff0 account_usability_ak : update for py3o 2022-12-14 09:46:19 +01:00
Alexis de Lattre
a0c1d5f55f [MIG] account_usability to v16 + rename to account_usability_akretion 2022-12-13 23:02:02 +01:00
Alexis de Lattre
a63c35fcbf [MIG] partner tree and product tree modules 2022-12-13 10:49:22 +01:00
Alexis de Lattre
03d045be1c product_usability: ondelete=restrict on supplierinfo/partner_id
Add tracking on uom fields on product.template
2022-12-12 20:43:33 +00:00
Alexis de Lattre
a86f90b382 product_usability: group by detailed_type, not by type 2022-12-10 16:29:44 +00:00
Alexis de Lattre
4aaee98c43 stock_usability: add removal strategy in location tree view (optional) 2022-12-10 15:40:34 +00:00
Alexis de Lattre
62627a63a6 product_usability: set default list_price value to 0 2022-12-10 13:44:50 +00:00
Alexis de Lattre
6d69bc659e [MIG] sale_confirm_wizard and sale_quotation_title
Update sale_usability to take advantage of base_view_inheritance_extension in v16
2022-12-08 08:40:53 +01:00
Alexis de Lattre
767c6a7fd9 [MIG] sale_stock_usability to v16 2022-10-31 00:02:57 +01:00
Alexis de Lattre
fbdf814cb0 [MIG] sale_usability to v16 2022-10-30 23:44:09 +01:00
Alexis de Lattre
5c14e3199e stock_usability: improve display of reservations
mrp_usability: disable change in view to fix a bug
2022-10-29 21:45:02 +02:00
Alexis de Lattre
70957e8404 product_usability: remove pre-compute=True on non-stored field 2022-10-29 15:44:40 +02:00
Alexis de Lattre
6025575ae4 [MIG] crm_usability to v16 2022-10-27 23:23:32 +02:00
Alexis de Lattre
8486c75f90 [MIG] delivery_usability to v16 2022-10-27 23:13:29 +02:00
Alexis de Lattre
a7a1eefb15 [MIG] base_company_extension to v16 2022-10-27 22:35:11 +02:00
Alexis de Lattre
fe6a332ba9 [MIG] mail_usability 2022-10-27 22:27:44 +02:00
Alexis de Lattre
bbb0cb17f7 [MIG] mrp_usability to v16 2022-10-27 22:23:25 +02:00
Alexis de Lattre
71ebe2adea [MIG] purchase_stock_usability to v16 2022-10-27 22:04:17 +02:00
Alexis de Lattre
367cb1af93 [MIG] purchase_usability to v16 2022-10-27 21:57:19 +02:00
Alexis de Lattre
a9292506ae [MIG] product_usability to v16 2022-10-27 21:27:46 +02:00
Alexis de Lattre
15c77b3e8a [MIG] stock_usability from v14 to v16 2022-10-27 00:05:43 +02:00
Alexis de Lattre
4f13432bdc [MIG] base_usability to v16 2022-10-26 22:03:36 +02:00
Alexis de Lattre
9aac933dcb Initialize v16 branch 2022-10-26 21:09:52 +02:00
721 changed files with 12104 additions and 11385 deletions

View File

@@ -1,27 +0,0 @@
===============================
Bank Reconciliation Report XLSX
===============================
In Odoo v13+, a bank reconciliation report is not really needed because all the payments executed that are not debited/credited on the bank account are in separate waiting accounts. But accountants want a bank reconciliation report, so this module adds one, even if it is quite different from a classic bank reconciliation report.
Configuration
=============
This module doesn't require any configuration.
Usage
=====
You can launch the Bank Reconciliation Report wizard from:
* the menu *Accounting > Reports > Bank > Bank Reconciliation*,
* the invoicing dashboard: on a bank journal, click on the options, then select *Bank Reconciliation*.
* the form view of a bank statement: click on the button *Bank Reconciliation Report*.
Credits
=======
Contributors
------------
* Alexis de Lattre <alexis.delattre@akretion.com>

View File

@@ -1,21 +0,0 @@
# Copyright 2017-2023 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).
{
"name": "Bank Reconciliation Report",
"version": "14.0.1.0.0",
"license": "AGPL-3",
"author": "Akretion",
"website": "https://github.com/akretion/odoo-usability",
"summary": "Bank reconciliation XLSX report",
"depends": ["account", "report_xlsx"],
"data": [
"report/report.xml",
"wizard/bank_reconciliation_report_wizard_view.xml",
"views/account_bank_statement.xml",
"views/account_journal.xml",
"security/ir.model.access.csv",
],
"installable": True,
}

View File

@@ -1,213 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_bank_reconciliation_summary_xlsx
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-13 10:31+0000\n"
"PO-Revision-Date: 2023-01-13 10:31+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Amount"
msgstr "Montant"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Balance %s:"
msgstr "Solde %s :"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__journal_ids
msgid "Bank Journals"
msgstr "Journaux de banque"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.actions.act_window,name:account_bank_reconciliation_summary_xlsx.bank_reconciliation_report_wizard_action
#: model:ir.ui.menu,name:account_bank_reconciliation_summary_xlsx.bank_reconciliation_report_wizard_menu
#: model_terms:ir.ui.view,arch_db:account_bank_reconciliation_summary_xlsx.account_journal_dashboard_kanban_view
msgid "Bank Reconciliation"
msgstr "Rapprochement bancaire"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#: model_terms:ir.ui.view,arch_db:account_bank_reconciliation_summary_xlsx.view_bank_statement_form
#, python-format
msgid "Bank Reconciliation Report"
msgstr "Rapport de rapprochement bancaire"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model,name:account_bank_reconciliation_summary_xlsx.model_bank_reconciliation_report_wizard
msgid "Bank Reconciliation Report Wizard"
msgstr "Assistant rapport de rapprochement bancaire"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.actions.report,name:account_bank_reconciliation_summary_xlsx.bank_reconciliation_xlsx
msgid "Bank Reconciliation XLSX"
msgstr "Rapprochement bancaire XLSX"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model,name:account_bank_reconciliation_summary_xlsx.model_report_bank_reconciliation_xlsx
msgid "Bank Reconciliation XLSX Report"
msgstr "Rapport de rapprochement bancaire XLSX"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.ui.menu,name:account_bank_reconciliation_summary_xlsx.menu_report_bank_root
msgid "Bank Reports"
msgstr "Rapports bancaires"
#. module: account_bank_reconciliation_summary_xlsx
#: model_terms:ir.ui.view,arch_db:account_bank_reconciliation_summary_xlsx.bank_reconciliation_report_wizard_form
msgid "Cancel"
msgstr "Annuler"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__company_id
#, python-format
msgid "Company"
msgstr "Société"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Counter-part"
msgstr "Contre partie"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__create_date
msgid "Created on"
msgstr "Créé le"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__date
#, python-format
msgid "Date"
msgstr ""
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__display_name
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_report_bank_reconciliation_xlsx__display_name
msgid "Display Name"
msgstr ""
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields.selection,name:account_bank_reconciliation_summary_xlsx.selection__bank_reconciliation_report_wizard__move_state__draft_posted
msgid "Draft and Posted Entries"
msgstr "Écritures brouillon et comptabilisées"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__move_state
#, python-format
msgid "Entries"
msgstr "Écritures"
#. module: account_bank_reconciliation_summary_xlsx
#: model_terms:ir.ui.view,arch_db:account_bank_reconciliation_summary_xlsx.bank_reconciliation_report_wizard_form
msgid "Export XLSX"
msgstr ""
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Generated on %s"
msgstr "Généré le %s"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__id
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_report_bank_reconciliation_xlsx__id
msgid "ID"
msgstr ""
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Journal"
msgstr ""
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Label"
msgstr "Libellé"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard____last_update
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_report_bank_reconciliation_xlsx____last_update
msgid "Last Modified on"
msgstr ""
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__write_uid
msgid "Last Updated by"
msgstr ""
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields,field_description:account_bank_reconciliation_summary_xlsx.field_bank_reconciliation_report_wizard__write_date
msgid "Last Updated on"
msgstr ""
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Move Number"
msgstr "Numéro de pièce"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "No bank journal selected."
msgstr "Aucun journal de banque sélectionné."
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "None"
msgstr "Aucun"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Partner"
msgstr "Partenaire"
#. module: account_bank_reconciliation_summary_xlsx
#: model:ir.model.fields.selection,name:account_bank_reconciliation_summary_xlsx.selection__bank_reconciliation_report_wizard__move_state__posted
msgid "Posted Entries"
msgstr "Écritures comptabilisées"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Ref."
msgstr "Réf."
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "Sub-total:"
msgstr "Sous-total :"
#. module: account_bank_reconciliation_summary_xlsx
#: code:addons/account_bank_reconciliation_summary_xlsx/report/bank_reconciliation_xlsx.py:0
#, python-format
msgid "TOTAL:"
msgstr "TOTAL :"

View File

@@ -1 +0,0 @@
from . import bank_reconciliation_xlsx

View File

@@ -1,296 +0,0 @@
# Copyright 2017-2023 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 _, models
from odoo.exceptions import UserError
from datetime import datetime
from odoo.tools.misc import format_datetime
import pytz
class BankReconciliationXlsx(models.AbstractModel):
_name = "report.bank.reconciliation.xlsx"
_description = "Bank Reconciliation XLSX Report"
_inherit = "report.report_xlsx.abstract"
def _domain_add_move_state(self, wizard, domain):
if wizard.move_state == 'posted':
domain.append(('parent_state', '=', 'posted'))
elif wizard.move_state == 'draft_posted':
domain.append(('parent_state', 'in', ('draft', 'posted')))
def _get_account_balance(self, account, wizard):
domain = [
('account_id', '=', account.id),
('date', '<=', wizard.date),
('company_id', '=', wizard.company_id.id),
]
self._domain_add_move_state(wizard, domain)
res_rg = self.env['account.move.line'].read_group(domain, ['balance:sum'], [])
account_bal = res_rg and res_rg[0].get('balance', 0.0) or 0.0
return account_bal
def _prepare_payment_move_lines(self, journal, account, wizard, unreconciled_only=True):
domain = [
("company_id", "=", wizard.company_id.id),
("account_id", "=", account.id),
("journal_id", "=", journal.id),
("date", "<=", wizard.date),
]
if unreconciled_only:
limit_datetime_naive = datetime.combine(wizard.date, datetime.max.time())
tz = pytz.timezone(self.env.user.tz)
limit_datetime_aware = tz.localize(limit_datetime_naive)
limit_datetime_utc = limit_datetime_aware.astimezone(pytz.utc)
limit_datetime = limit_datetime_utc.replace(tzinfo=None)
domain += [
'|', ('full_reconcile_id', '=', False),
('full_reconcile_id.create_date', '>', limit_datetime)]
self._domain_add_move_state(wizard, domain)
mlines = self.env["account.move.line"].search(domain)
res = []
for mline in mlines:
move = mline.move_id
cpart = []
for line in move.line_ids:
if (
line.account_id != account
and line.account_id.code not in cpart
):
cpart.append(line.account_id.code)
counterpart = " ,".join(cpart)
res.append(
{
"date": mline.date,
"ref": move.ref or "",
"label": mline.name,
"partner": mline.partner_id.display_name or "",
"amount": mline.balance,
"move_name": move.name,
"counterpart": counterpart,
}
)
return res
def _write_move_lines_block(self, jdi, row, account, add2total=True):
sheet = jdi['sheet']
style = jdi['style']
style_suffix = not add2total and '_warn' or ''
subtotal = 0.0
mlines = self._prepare_payment_move_lines(jdi['journal'], account, jdi['wizard'])
if mlines or add2total:
sheet.write(row, 0, '%s %s' % (account.name, account.code), style['title' + style_suffix])
sheet.write(row, 1, "", style['title' + style_suffix])
if not mlines:
if add2total:
sheet.write(row, 2, _("None"), style['none'])
else:
return
else:
row += 1
col_labels = [
_("Date"),
_("Partner"),
_("Amount"),
_("Move Number"),
_("Counter-part"),
_("Ref."),
_("Label"),
]
col = 0
for col_label in col_labels:
sheet.write(row, col, col_label, style['col_header'])
col += 1
row += 1
start_line = row + 1
for mline in mlines:
sheet.write(row, 0, mline["date"], style['regular_date'])
sheet.write(row, 1, mline["partner"], style['regular'])
sheet.write(row, 2, mline["amount"], style['currency'])
sheet.write(row, 3, mline["move_name"], style['regular'])
sheet.write(row, 4, mline["counterpart"], style['regular'])
sheet.write(row, 5, mline["ref"], style['regular'])
sheet.write(row, 6, mline["label"], style['regular'])
subtotal += mline["amount"]
row += 1
end_line = row
for col in range(1):
sheet.write(row, col, "", style['title' + style_suffix])
sheet.write(row, 1, _("Sub-total:") + ' ', style['title_right' + style_suffix])
formula = '=SUM(%s%d:%s%d)' % (
jdi['total_col'], start_line, jdi['total_col'], end_line)
sheet.write_formula(row, 2, formula, style['currency_bg' + style_suffix], subtotal)
if add2total:
jdi['total'] += subtotal
jdi['total_formula'] += '+%s%d' % (jdi['total_col'], row + 1)
return row
def generate_xlsx_report(self, workbook, data, wizard):
if not wizard.journal_ids:
raise UserError(_("No bank journal selected."))
date_dt = wizard.date
company = wizard.company_id
style = self._get_style(workbook, company)
move_state_label = dict(
wizard.fields_get('move_state', 'selection')['move_state']['selection'])
generated_on_label = _('Generated on %s') % format_datetime(
self.env, datetime.utcnow())
for journal in wizard.journal_ids:
row = 0
sheet = workbook.add_worksheet(journal.code or journal.name)
jdi = {
'wizard': wizard,
'journal': journal,
'style': style,
'sheet': sheet,
'total': 0.0,
'total_formula': '=',
'total_col': 'C',
}
sheet.write(
row,
0,
_("Bank Reconciliation Report"),
style['doc_title'],
)
row += 1
sheet.write(row, 0, generated_on_label, style['small'])
sheet.set_row(0, 26)
sheet.set_column(0, 0, 10)
sheet.set_column(1, 1, 35)
sheet.set_column(2, 2, 15)
sheet.set_column(3, 3, 15)
sheet.set_column(4, 4, 25)
sheet.set_column(5, 5, 30)
sheet.set_column(6, 6, 60)
row += 3
sheet.write(row, 0, _("Company"), style['wizard_field'])
sheet.write(row, 1, wizard.company_id.display_name, style['wizard_value'])
row += 1
sheet.write(row, 0, _("Date"), style['wizard_field'])
sheet.write(row, 1, date_dt, style['wizard_value_date'])
row += 1
sheet.write(row, 0, _("Journal"), style['wizard_field'])
sheet.write(row, 1, journal.display_name, style['wizard_value'])
row += 1
sheet.write(row, 0, _("Entries"), style['wizard_field'])
sheet.write(row, 1, move_state_label[wizard.move_state], style['wizard_value'])
# 1) Show balance of bank account
row += 3
bank_account = journal.default_account_id
for col in range(1):
sheet.write(row, col, "", style['title'])
sheet.write(row, 1, _("Balance %s:") % bank_account.code + ' ', style['title_right'])
account_bal = self._get_account_balance(bank_account, wizard)
sheet.write(row, 2, account_bal, style['currency_bg'])
jdi['total'] += account_bal
jdi['total_formula'] += '%s%d' % (jdi['total_col'], row + 1)
row += 2
# 2) Show payment lines IN (debit)
debit_account = journal.payment_debit_account_id
row = self._write_move_lines_block(jdi, row, debit_account)
row += 2
# 3) Show payment lines OUT (credit)
credit_account = journal.payment_credit_account_id
row = self._write_move_lines_block(jdi, row, credit_account)
row += 2
for col in range(1):
sheet.write(row, col, "", style['title'])
sheet.write(row, 1, _("TOTAL:") + ' ', style['title_right'])
sheet.write_formula(
row, 2, jdi['total_formula'], style['currency_bg'], jdi['total'])
row += 3
# 4) Show suspense account lines
row = self._write_move_lines_block(
jdi, row, journal.suspense_account_id, add2total=False)
def _get_style(self, workbook, company):
style = {}
font_size = 10
light_grey = "#eeeeee"
title_blue = "#e6e6fa"
subtotal_orange = "#ffcc00"
title_warn = "#ff9999"
subtotal_warn = "#ffff99"
light_purple = "#ffdeff"
lang_code = self.env.user.lang
lang = False
if lang_code:
lang = self.env["res.lang"].search([("code", "=", lang_code)])
if not lang:
lang = self.env["res.lang"].search([], limit=1)
xls_date_format = (
lang.date_format.replace("%Y", "yyyy")
.replace("%m", "mm")
.replace("%d", "dd")
.replace("%y", "yy")
)
style['doc_title'] = workbook.add_format(
{"bold": True, "font_size": font_size + 4})
style['small'] = workbook.add_format({"font_size": font_size - 3})
style['col_header'] = workbook.add_format(
{
"bold": True,
"bg_color": light_grey,
"text_wrap": True,
"font_size": font_size,
"align": "center",
}
)
title_style = {
"bold": True,
"bg_color": title_blue,
"font_size": font_size,
"align": "left",
}
style['title_right'] = workbook.add_format(dict(title_style, align="right"))
style['title'] = workbook.add_format(dict(title_style))
style['wizard_field'] = workbook.add_format(dict(title_style, bg_color=light_grey))
wizard_value_style = {
"bg_color": light_purple,
"bold": True,
"font_size": font_size,
"align": "left",
}
style['wizard_value'] = workbook.add_format(wizard_value_style)
style['wizard_value_date'] = workbook.add_format(
dict(wizard_value_style, num_format=xls_date_format))
style['none'] = workbook.add_format(
{"bold": True, "font_size": font_size, "align": "right", "bg_color": subtotal_orange}
)
# WARN for suspense account
style['title_warn'] = workbook.add_format(
dict(title_style, align="left", bg_color=title_warn))
style['title_right_warn'] = workbook.add_format(
dict(title_style, align="right", bg_color=title_warn))
style['regular'] = workbook.add_format({"font_size": font_size})
if "%" in xls_date_format:
# fallback
xls_date_format = "yyyy-mm-dd"
style['regular_date'] = workbook.add_format(
{"num_format": xls_date_format, "font_size": font_size, "align": "left"}
)
cur_format = "#,##0.00 %s" % (
company.currency_id.symbol or company.currency_id.name
)
# It seems that Excel replaces automatically the decimal
# and thousand separator by those of the language under which
# Excel runs
currency_style = {"num_format": cur_format, "font_size": font_size}
style['currency'] = workbook.add_format(currency_style)
style['currency_bg'] = workbook.add_format(
dict(currency_style, bg_color=subtotal_orange))
style['currency_bg_warn'] = workbook.add_format(
dict(currency_style, bg_color=subtotal_warn))
return style

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2017-2023 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="bank_reconciliation_xlsx" model="ir.actions.report">
<field name="name">Bank Reconciliation XLSX</field>
<field name="model">bank.reconciliation.report.wizard</field>
<field name="report_type">xlsx</field>
<field name="report_name">bank.reconciliation.xlsx</field>
<field name="report_file">bank.reconciliation.xlsx</field>
<!-- print_report_name doesn't work here... -->
<field name="print_report_name">'bank_reconciliation-%s' % (object.date)</field>
</record>
</odoo>

View File

@@ -1,3 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_bank_reconciliation_report_wizard_user,Full access on bank.reconciliation.report.wizard,model_bank_reconciliation_report_wizard,account.group_account_user,1,1,1,1
access_bank_reconciliation_report_wizard_readonly,Full access on bank.reconciliation.report.wizard,model_bank_reconciliation_report_wizard,account.group_account_readonly,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_bank_reconciliation_report_wizard_user Full access on bank.reconciliation.report.wizard model_bank_reconciliation_report_wizard account.group_account_user 1 1 1 1
3 access_bank_reconciliation_report_wizard_readonly Full access on bank.reconciliation.report.wizard model_bank_reconciliation_report_wizard account.group_account_readonly 1 1 1 1

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2017-2020 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_bank_statement_form" model="ir.ui.view">
<field name="name">bank_rec_summary.account.bank.statement.form</field>
<field name="model">account.bank.statement</field>
<field name="inherit_id" ref="account.view_bank_statement_form" />
<field name="arch" type="xml">
<button name="button_reprocess" position="after">
<button
name="%(bank_reconciliation_report_wizard_action)d"
type="action"
string="Bank Reconciliation Report"
context="{'default_journal_ids': [journal_id]}"
/>
</button>
</field>
</record>
</odoo>

View File

@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2018-2023 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>
<!-- Accounting Dashboard -->
<record id="account_journal_dashboard_kanban_view" model="ir.ui.view">
<field
name="name"
>bank_reconciliation_summarry.account_journal_dashboard</field>
<field name="model">account.journal</field>
<field name="inherit_id" ref="account.account_journal_dashboard_kanban_view" />
<field name="arch" type="xml">
<xpath expr="//a[@name='open_collect_money']/.." position="before">
<div name="bank_reconciliation_report">
<a
role="menuitem"
type="action"
name="%(bank_reconciliation_report_wizard_action)d"
context="{'default_journal_ids': [active_id]}"
>Bank Reconciliation</a>
</div>
</xpath>
</field>
</record>
</odoo>

View File

@@ -1 +0,0 @@
from . import bank_reconciliation_report_wizard

View File

@@ -1,42 +0,0 @@
# Copyright 2017-2023 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 api, fields, models
class BankReconciliationReportWizard(models.TransientModel):
_name = "bank.reconciliation.report.wizard"
_description = "Bank Reconciliation Report Wizard"
_check_company_auto = True
company_id = fields.Many2one(
'res.company', string='Company',
ondelete='cascade', required=True,
default=lambda self: self.env.company)
date = fields.Date(required=True, default=fields.Date.context_today)
move_state = fields.Selection(
[("posted", "Posted Entries"), ("draft_posted", "Draft and Posted Entries")],
string="Entries",
required=True,
default="posted",
)
journal_ids = fields.Many2many(
"account.journal",
string="Bank Journals",
domain="[('type', '=', 'bank'), ('company_id', '=', company_id)]",
required=True,
check_company=True,
default=lambda self: self._default_journal_ids(),
)
@api.model
def _default_journal_ids(self):
journals = self.env["account.journal"].search(
[
("type", "=", "bank"),
("bank_account_id", "!=", False),
("company_id", "=", self.env.company.id),
]
)
return journals

View File

@@ -1,49 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2017-2023 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="bank_reconciliation_report_wizard_form" model="ir.ui.view">
<field name="name">bank.reconciliation.report.wizard.form</field>
<field name="model">bank.reconciliation.report.wizard</field>
<field name="arch" type="xml">
<form>
<group name="main">
<field name="company_id" invisible="1" />
<field name="date" />
<field name="journal_ids" widget="many2many_tags" options="{'no_open': True, 'no_create': True}"/>
<field name="move_state" widget="radio"/>
</group>
<footer>
<button
name="%(account_bank_reconciliation_summary_xlsx.bank_reconciliation_xlsx)d"
string="Export XLSX"
type="action"
class="btn-primary"
/>
<button special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="bank_reconciliation_report_wizard_action" model="ir.actions.act_window">
<field name="name">Bank Reconciliation</field>
<field name="res_model">bank.reconciliation.report.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem
id="menu_report_bank_root"
parent="account.menu_finance_reports"
name="Bank Reports"
sequence="12"
/>
<menuitem
id="bank_reconciliation_report_wizard_menu"
action="bank_reconciliation_report_wizard_action"
parent="menu_report_bank_root"
sequence="10"
/>
</odoo>

View File

@@ -1,23 +0,0 @@
# © 2016-2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Account Fiscal Position Payable Receivable",
"version": "12.0.1.0.0",
"category": "Accounting & Finance",
"license": "AGPL-3",
"summary": "Configure payable/receivable accounts on fiscal positions",
"description": """
Account Fiscal Position Payable Receivable
==========================================
This module allows to configure a special *Partner Receivable Account* and a special *Partner Payable Account* on fiscal positions. This is used in the onchange of the fiscal position of partners.
This module has been written by Alexis de Lattre from Akretion <alexis.delattre@akretion.com>.
""",
"author": "Akretion",
"website": "http://www.akretion.com",
"depends": ["account"],
"data": ["views/account_fiscal_position_view.xml"],
"installable": False,
}

View File

@@ -1,2 +0,0 @@
from . import account_fiscal_position
from . import res_partner

View File

@@ -1,21 +0,0 @@
# © 2016-2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields
class AccountFiscalPosition(models.Model):
_inherit = "account.fiscal.position"
receivable_account_id = fields.Many2one(
"account.account",
string="Partner Receivable Account",
company_dependent=True,
domain=[("internal_type", "=", "receivable")],
)
payable_account_id = fields.Many2one(
"account.account",
string="Partner Payable Account",
company_dependent=True,
domain=[("internal_type", "=", "payable")],
)

View File

@@ -1,25 +0,0 @@
# © 2016-2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, api
class ResPartner(models.Model):
_inherit = "res.partner"
@api.onchange("property_account_position_id")
def fiscal_position_receivable_payable_change(self):
fp = self.property_account_position_id
ipo = self.env["ir.property"]
if fp.receivable_account_id:
self.property_account_receivable_id = fp.receivable_account_id
else:
self.property_account_receivable_id = ipo.get(
"property_account_receivable_id", "res.partner"
)
if fp.payable_account_id:
self.property_account_payable_id = fp.payable_account_id
else:
self.property_account_payable_id = ipo.get(
"property_account_payable_id", "res.partner"
)

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
© 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<odoo>
<record id="view_account_position_form" model="ir.ui.view">
<field name="name">receivable_payable.fiscal_position_form</field>
<field name="model">account.fiscal.position</field>
<field name="inherit_id" ref="account.view_account_position_form" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="receivable_account_id"/>
<field name="payable_account_id"/>
</field>
</field>
</record>
</odoo>

View File

@@ -1 +1,2 @@
from . import models
from . import account_invoice
from . import account_invoice_report

View File

@@ -4,7 +4,7 @@
{
'name': 'Account Invoice Margin',
'version': '14.0.1.0.0',
'version': '12.0.1.0.0',
'category': 'Invoicing Management',
'license': 'AGPL-3',
'summary': 'Copy standard price on invoice line and compute margins',
@@ -15,10 +15,10 @@ This module has been written by Alexis de Lattre from Akretion
<alexis.delattre@akretion.com>.
""",
'author': 'Akretion',
'website': 'https://github.com/akretion/odoo-usability',
'website': 'http://www.akretion.com',
'depends': ['account'],
'data': [
'views/account_move.xml',
'account_invoice_view.xml',
],
'installable': True,
'installable': False,
}

View File

@@ -0,0 +1,152 @@
# Copyright 2015-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 api, fields, models
import odoo.addons.decimal_precision as dp
class AccountInvoiceLine(models.Model):
_inherit = 'account.invoice.line'
standard_price_company_currency = fields.Float(
string='Cost Price in Company Currency', readonly=True,
digits=dp.get_precision('Product Price'),
help="Cost price in company currency in the unit of measure "
"of the invoice line (which may be different from the unit "
"of measure of the product).")
standard_price_invoice_currency = fields.Float(
string='Cost Price in Invoice Currency', readonly=True,
compute='_compute_margin', store=True,
digits=dp.get_precision('Product Price'),
help="Cost price in invoice currency in the unit of measure "
"of the invoice line")
margin_invoice_currency = fields.Monetary(
string='Margin in Invoice Currency', readonly=True, store=True,
compute='_compute_margin', currency_field='currency_id')
margin_company_currency = fields.Monetary(
string='Margin in Company Currency', readonly=True, store=True,
compute='_compute_margin', currency_field='company_currency_id')
margin_rate = fields.Float(
string="Margin Rate", readonly=True, store=True,
compute='_compute_margin',
digits=(16, 2), help="Margin rate in percentage of the sale price")
@api.depends(
'standard_price_company_currency', 'invoice_id.currency_id',
'invoice_id.type', 'invoice_id.company_id',
'invoice_id.date_invoice', 'quantity', 'price_subtotal')
def _compute_margin(self):
for il in self:
standard_price_inv_cur = 0.0
margin_inv_cur = 0.0
margin_comp_cur = 0.0
margin_rate = 0.0
inv = il.invoice_id
if inv and inv.type in ('out_invoice', 'out_refund'):
# it works in _get_current_rate
# even if we set date = False in context
# standard_price_inv_cur is in the UoM of the invoice line
date = inv._get_currency_rate_date() or\
fields.Date.context_today(self)
company = inv.company_id
company_currency = company.currency_id
standard_price_inv_cur =\
company_currency._convert(
il.standard_price_company_currency,
inv.currency_id, company, date)
margin_inv_cur =\
il.price_subtotal - il.quantity * standard_price_inv_cur
margin_comp_cur = inv.currency_id._convert(
margin_inv_cur, company_currency, company, date)
if il.price_subtotal:
margin_rate = 100 * margin_inv_cur / il.price_subtotal
# for a refund, margin should be negative
# but margin rate should stay positive
if inv.type == 'out_refund':
margin_inv_cur *= -1
margin_comp_cur *= -1
il.standard_price_invoice_currency = standard_price_inv_cur
il.margin_invoice_currency = margin_inv_cur
il.margin_company_currency = margin_comp_cur
il.margin_rate = margin_rate
# We want to copy standard_price on invoice line for customer
# invoice/refunds. We can't do that via on_change of product_id,
# because it is not always played when invoice is created from code
# => we inherit write/create
# We write standard_price_company_currency even on supplier invoice/refunds
# because we don't have access to the 'type' of the invoice
@api.model
def create(self, vals):
if vals.get('product_id'):
pp = self.env['product.product'].browse(vals['product_id'])
std_price = pp.standard_price
inv_uom_id = vals.get('uom_id')
if inv_uom_id and inv_uom_id != pp.uom_id.id:
inv_uom = self.env['uom.uom'].browse(inv_uom_id)
std_price = pp.uom_id._compute_price(
std_price, inv_uom)
vals['standard_price_company_currency'] = std_price
return super(AccountInvoiceLine, self).create(vals)
def write(self, vals):
if not vals:
vals = {}
if 'product_id' in vals or 'uom_id' in vals:
for il in self:
if 'product_id' in vals:
if vals.get('product_id'):
pp = self.env['product.product'].browse(
vals['product_id'])
else:
pp = False
else:
pp = il.product_id or False
# uom_id is NOT a required field
if 'uom_id' in vals:
if vals.get('uom_id'):
inv_uom = self.env['uom.uom'].browse(
vals['uom_id'])
else:
inv_uom = False
else:
inv_uom = il.uom_id or False
std_price = 0.0
if pp:
std_price = pp.standard_price
if inv_uom and inv_uom != pp.uom_id:
std_price = pp.uom_id._compute_price(
std_price, inv_uom)
il.write({'standard_price_company_currency': std_price})
return super(AccountInvoiceLine, self).write(vals)
class AccountInvoice(models.Model):
_inherit = 'account.invoice'
margin_invoice_currency = fields.Monetary(
string='Margin in Invoice Currency',
compute='_compute_margin', store=True, readonly=True,
currency_field='currency_id')
margin_company_currency = fields.Monetary(
string='Margin in Company Currency',
compute='_compute_margin', store=True, readonly=True,
currency_field='company_currency_id')
@api.depends(
'type',
'invoice_line_ids.margin_invoice_currency',
'invoice_line_ids.margin_company_currency')
def _compute_margin(self):
res = self.env['account.invoice.line'].read_group(
[('invoice_id', 'in', self.ids)],
['invoice_id', 'margin_invoice_currency',
'margin_company_currency'],
['invoice_id'])
for re in res:
if re['invoice_id']:
inv = self.browse(re['invoice_id'][0])
if inv.type in ('out_invoice', 'out_refund'):
inv.margin_invoice_currency = re['margin_invoice_currency']
inv.margin_company_currency = re['margin_company_currency']

View File

@@ -0,0 +1,60 @@
# Copyright 2018-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 api, fields, models
class AccountInvoiceReport(models.Model):
_inherit = 'account.invoice.report'
margin = fields.Float(string='Margin', readonly=True)
# why digits=0 ??? Why is it like that in the native "account" module
user_currency_margin = fields.Float(
string="Margin", compute='_compute_user_currency_margin', digits=0)
_depends = {
'account.invoice': [
'account_id', 'amount_total_company_signed',
'commercial_partner_id', 'company_id',
'currency_id', 'date_due', 'date_invoice', 'fiscal_position_id',
'journal_id', 'number', 'partner_bank_id', 'partner_id',
'payment_term_id', 'residual', 'state', 'type', 'user_id',
],
'account.invoice.line': [
'account_id', 'invoice_id', 'price_subtotal', 'product_id',
'quantity', 'uom_id', 'account_analytic_id',
'margin_company_currency',
],
'product.product': ['product_tmpl_id'],
'product.template': ['categ_id'],
'uom.uom': ['category_id', 'factor', 'name', 'uom_type'],
'res.currency.rate': ['currency_id', 'name'],
'res.partner': ['country_id'],
}
@api.depends('currency_id', 'date', 'margin')
def _compute_user_currency_margin(self):
user_currency = self.env.user.company_id.currency_id
currency_rate = self.env['res.currency.rate'].search([
('rate', '=', 1),
'|',
('company_id', '=', self.env.user.company_id.id),
('company_id', '=', False)], limit=1)
base_currency = currency_rate.currency_id
for record in self:
date = record.date or fields.Date.today()
company = record.company_id
record.user_currency_margin = base_currency._convert(
record.margin, user_currency, company, date)
# TODO check for refunds
def _sub_select(self):
select_str = super(AccountInvoiceReport, self)._sub_select()
select_str += ", SUM(ail.margin_company_currency) AS margin"
return select_str
def _select(self):
select_str = super(AccountInvoiceReport, self)._select()
select_str += ", sub.margin AS margin"
return select_str

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
© 2015-2017 Akretion (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_invoice_line_form" model="ir.ui.view">
<field name="name">margin.account.invoice.line.form</field>
<field name="model">account.invoice.line</field>
<field name="inherit_id" ref="account.view_invoice_line_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='analytic_tag_ids']/.." position="inside">
<field name="standard_price_company_currency"
string="Cost Price in Comp. Cur."
groups="base.group_no_one"/>
<field name="standard_price_invoice_currency"
string="Cost Price in Inv. Cur."
groups="base.group_no_one"/>
<field name="margin_invoice_currency"
string="Margin in Inv. Cur."
groups="base.group_no_one"/>
<field name="margin_company_currency"
string="Margin in Comp. Cur."
groups="base.group_no_one"/>
<label for="margin_rate" groups="base.group_no_one"/>
<div name="margin_rate" groups="base.group_no_one">
<field name="margin_rate" class="oe_inline"/> %
</div>
</xpath>
</field>
</record>
<record id="invoice_form" model="ir.ui.view">
<field name="name">margin.account.invoice.form</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml">
<field name="move_id" position="after">
<field name="margin_invoice_currency"
string="Margin in Inv. Cur." groups="base.group_no_one"/>
<field name="margin_company_currency"
string="Margin in Comp. Cur." groups="base.group_no_one"/>
</field>
</field>
</record>
</odoo>

View File

@@ -1,2 +0,0 @@
from . import account_move
from . import account_invoice_report

View File

@@ -1,36 +0,0 @@
# Copyright 2018-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 api, fields, models
class AccountInvoiceReport(models.Model):
_inherit = 'account.invoice.report'
margin = fields.Float(string='Margin', readonly=True)
# added margin_company_currency on account.move.line
_depends = {
'account.move': [
'name', 'state', 'move_type', 'partner_id', 'invoice_user_id', 'fiscal_position_id',
'invoice_date', 'invoice_date_due', 'invoice_payment_term_id', 'partner_bank_id',
],
'account.move.line': [
'quantity', 'price_subtotal', 'amount_residual', 'balance', 'amount_currency',
'move_id', 'product_id', 'product_uom_id', 'account_id', 'analytic_account_id',
'journal_id', 'company_id', 'currency_id', 'partner_id',
'margin_company_currency',
],
'product.product': ['product_tmpl_id'],
'product.template': ['categ_id'],
'uom.uom': ['category_id', 'factor', 'name', 'uom_type'],
'res.currency.rate': ['currency_id', 'name'],
'res.partner': ['country_id'],
}
@api.model
def _select(self):
select_str = super()._select()
select_str += ", line.margin_company_currency * currency_table.rate AS margin"
return select_str

View File

@@ -1,155 +0,0 @@
# Copyright 2015-2021 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 api, fields, models
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
standard_price_company_currency = fields.Float(
string='Unit Cost Price in Company Currency', readonly=True,
digits='Product Price',
help="Unit Cost price in company currency in the unit of measure "
"of the invoice line (which may be different from the unit "
"of measure of the product).")
standard_price_invoice_currency = fields.Float(
string='Unit Cost Price in Invoice Currency',
compute='_compute_margin', store=True, digits='Product Price',
help="Unit Cost price in invoice currency in the unit of measure "
"of the invoice line.")
margin_invoice_currency = fields.Monetary(
string='Margin in Invoice Currency', store=True,
compute='_compute_margin', currency_field='currency_id')
margin_company_currency = fields.Monetary(
string='Margin in Company Currency', store=True,
compute='_compute_margin', currency_field='company_currency_id')
margin_rate = fields.Float(
string="Margin Rate", readonly=True, store=True,
compute='_compute_margin',
digits=(16, 2), help="Margin rate in percentage of the sale price")
@api.depends(
'standard_price_company_currency', 'move_id.currency_id',
'move_id.move_type', 'move_id.company_id',
'move_id.invoice_date', 'quantity', 'price_subtotal')
def _compute_margin(self):
for ml in self:
standard_price_inv_cur = 0.0
margin_inv_cur = 0.0
margin_comp_cur = 0.0
margin_rate = 0.0
move = ml.move_id
if move.move_type and move.move_type in ('out_invoice', 'out_refund'):
# it works in _get_current_rate
# even if we set date = False in context
# standard_price_inv_cur is in the UoM of the invoice line
date = move.date or fields.Date.context_today(self)
company = move.company_id
company_currency = company.currency_id
standard_price_inv_cur =\
company_currency._convert(
ml.standard_price_company_currency,
ml.currency_id, company, date)
margin_inv_cur =\
ml.price_subtotal - ml.quantity * standard_price_inv_cur
margin_comp_cur = move.currency_id._convert(
margin_inv_cur, company_currency, company, date)
if ml.price_subtotal:
margin_rate = 100 * margin_inv_cur / ml.price_subtotal
# for a refund, margin should be negative
# but margin rate should stay positive
if move.move_type == 'out_refund':
margin_inv_cur *= -1
margin_comp_cur *= -1
ml.standard_price_invoice_currency = standard_price_inv_cur
ml.margin_invoice_currency = margin_inv_cur
ml.margin_company_currency = margin_comp_cur
ml.margin_rate = margin_rate
# We want to copy standard_price on invoice line for customer
# invoice/refunds. We can't do that via on_change of product_id,
# because it is not always played when invoice is created from code
# => we inherit write/create
# We write standard_price_company_currency even on supplier invoice/refunds
# because we don't have access to the 'type' of the invoice
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if vals.get('product_id') and not vals.get('display_type'):
pp = self.env['product.product'].browse(vals['product_id'])
std_price = pp.standard_price
inv_uom_id = vals.get('product_uom_id')
if inv_uom_id and inv_uom_id != pp.uom_id.id:
inv_uom = self.env['uom.uom'].browse(inv_uom_id)
std_price = pp.uom_id._compute_price(
std_price, inv_uom)
vals['standard_price_company_currency'] = std_price
return super().create(vals_list)
def write(self, vals):
if not vals:
vals = {}
if 'product_id' in vals or 'product_uom_id' in vals:
for il in self:
if 'product_id' in vals:
if vals.get('product_id'):
pp = self.env['product.product'].browse(
vals['product_id'])
else:
pp = False
else:
pp = il.product_id or False
# uom_id is NOT a required field
if 'product_uom_id' in vals:
if vals.get('product_uom_id'):
inv_uom = self.env['uom.uom'].browse(
vals['product_uom_id'])
else:
inv_uom = False
else:
inv_uom = il.uom_id or False
std_price = 0.0
if pp:
std_price = pp.standard_price
if inv_uom and inv_uom != pp.uom_id:
std_price = pp.uom_id._compute_price(
std_price, inv_uom)
il.write({'standard_price_company_currency': std_price})
return super().write(vals)
class AccountMove(models.Model):
_inherit = 'account.move'
margin_invoice_currency = fields.Monetary(
string='Margin in Invoice Currency',
compute='_compute_margin', store=True,
currency_field='currency_id')
margin_company_currency = fields.Monetary(
string='Margin in Company Currency',
compute='_compute_margin', store=True,
currency_field='company_currency_id')
@api.depends(
'move_type',
'invoice_line_ids.margin_invoice_currency',
'invoice_line_ids.margin_company_currency')
def _compute_margin(self):
rg_res = self.env['account.move.line'].read_group(
[
('move_id', 'in', self.ids),
('display_type', '=', False),
('exclude_from_invoice_tab', '=', False),
('move_id.move_type', 'in', ('out_invoice', 'out_refund')),
],
['move_id', 'margin_invoice_currency:sum', 'margin_company_currency:sum'],
['move_id'])
mapped_data = dict([(x['move_id'][0], {
'margin_invoice_currency': x['margin_invoice_currency'],
'margin_company_currency': x['margin_company_currency'],
}) for x in rg_res])
for move in self:
move.margin_invoice_currency = mapped_data.get(move.id, {}).get('margin_invoice_currency')
move.margin_company_currency = mapped_data.get(move.id, {}).get('margin_company_currency')

View File

@@ -1,55 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2024 Akretion (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_move_form" model="ir.ui.view">
<field name="name">margin.account.move.form</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<group name="sale_info_group" position="inside">
<field name="margin_invoice_currency"
groups="base.group_no_one"
attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
<field name="margin_company_currency"
groups="base.group_no_one"
attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
</group>
<xpath expr="//field[@name='invoice_line_ids']/tree/field[@name='price_total']" position="after">
<field name="standard_price_invoice_currency" optional="hide" attrs="{'column_invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
<field name="margin_invoice_currency" optional="hide" attrs="{'column_invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
<field name="margin_rate" optional="hide" string="Margin Rate (%)" attrs="{'column_invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
</xpath>
<xpath expr="//field[@name='invoice_line_ids']/form//field[@name='price_total']/.." position="inside">
<field name="standard_price_company_currency"
groups="base.group_no_one" attrs="{'invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
<field name="standard_price_invoice_currency"
groups="base.group_no_one" attrs="{'invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
<field name="margin_invoice_currency"
groups="base.group_no_one" attrs="{'invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
<field name="margin_company_currency"
groups="base.group_no_one" attrs="{'invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
<label for="margin_rate" groups="base.group_no_one" attrs="{'invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
<div name="margin_rate" groups="base.group_no_one" attrs="{'invisible': [('parent.move_type', 'not in', ('out_invoice', 'out_refund'))]}">
<field name="margin_rate" class="oe_inline"/> %
</div>
</xpath>
</field>
</record>
<record id="view_invoice_tree" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_invoice_tree"/>
<field name="arch" type="xml">
<field name="amount_residual_signed" position="after">
<field name="margin_company_currency" optional="hide" sum="1" invisible="context.get('default_move_type') not in ('out_invoice', 'out_refund')" string="Margin"/>
</field>
</field>
</record>
</odoo>

View File

@@ -18,5 +18,5 @@
'wizard/account_move_update_view.xml',
'views/account_move.xml',
],
'installable': True,
'installable': False,
}

View File

@@ -1,243 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_update_wizard
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__price_subtotal
msgid "Amount"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__analytic_account_id
msgid "Analytic Account"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__analytic_tag_ids
msgid "Analytic Tags"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__partner_bank_id
msgid "Bank Account"
msgstr ""
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
msgid "Bill Reference"
msgstr ""
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
msgid "Cancel"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__company_id
msgid "Company"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__create_uid
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__create_uid
msgid "Created by"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__create_date
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__create_date
msgid "Created on"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__currency_id
msgid "Currency"
msgstr ""
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
msgid "Customer Reference"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__name
msgid "Description"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move__display_name
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__display_name
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__display_name
msgid "Display Name"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__display_type
msgid "Display Type"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move__id
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__id
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__id
msgid "ID"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__invoice_id
msgid "Invoice"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__invoice_line_id
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__line_ids
msgid "Invoice Lines"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.actions.act_window,name:account_invoice_update_wizard.account_invoice_update_action
msgid "Invoice Update Wizard"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model,name:account_invoice_update_wizard.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move____last_update
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update____last_update
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update____last_update
msgid "Last Modified on"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__write_uid
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__write_uid
msgid "Last Updated by"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__write_date
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__write_date
msgid "Last Updated on"
msgstr ""
#. module: account_invoice_update_wizard
#: code:addons/account_invoice_update_wizard/wizard/account_move_update.py:0
#, python-format
msgid "Non-legal fields of invoice updated via the Invoice Update wizard."
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields.selection,name:account_invoice_update_wizard.selection__account_move_line_update__display_type__line_note
msgid "Note"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__partner_id
msgid "Partner"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__invoice_payment_term_id
msgid "Payment Term"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__quantity
msgid "Quantity"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__ref
msgid "Reference"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__user_id
msgid "Salesperson"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields.selection,name:account_invoice_update_wizard.selection__account_move_line_update__display_type__line_section
msgid "Section"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__sequence
msgid "Sequence"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__invoice_origin
msgid "Source Document"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,help:account_invoice_update_wizard.field_account_move_line_update__display_type
msgid "Technical field for UX purpose."
msgstr ""
#. module: account_invoice_update_wizard
#: code:addons/account_invoice_update_wizard/wizard/account_move_update.py:0
#, python-format
msgid ""
"The original payment term '%s' doesn't have the same terms (number of terms "
"and/or amount) as the new payment term '%s'. You can only switch to a "
"payment term that has the same number of terms with the same amount."
msgstr ""
#. module: account_invoice_update_wizard
#: code:addons/account_invoice_update_wizard/wizard/account_move_update.py:0
#, python-format
msgid ""
"This wizard doesn't support the update of payment terms on an invoice which "
"is partially or fully paid."
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__move_type
msgid "Type"
msgstr ""
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
msgid "Update"
msgstr ""
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.view_move_form_inherit
msgid "Update Invoice"
msgstr ""
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
msgid "Update Invoice Wizard"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model,name:account_invoice_update_wizard.model_account_move_line_update
msgid "Update non-legal fields of invoice lines"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__parent_id
msgid "Wizard"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model,name:account_invoice_update_wizard.model_account_move_update
msgid "Wizard to update non-legal fields of invoice"
msgstr ""

View File

@@ -1,250 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_update_wizard
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__price_subtotal
msgid "Amount"
msgstr "Montant"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__analytic_account_id
msgid "Analytic Account"
msgstr "Compte Analytique"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__analytic_tag_ids
msgid "Analytic Tags"
msgstr "Tag Analytique"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__partner_bank_id
msgid "Bank Account"
msgstr "Compte Bancaire"
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
#, fuzzy
msgid "Bill Reference"
msgstr "Reference Client"
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
msgid "Cancel"
msgstr "Annuler"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__company_id
msgid "Company"
msgstr "Société"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__create_uid
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__create_date
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__create_date
msgid "Created on"
msgstr "Créé le"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__currency_id
msgid "Currency"
msgstr "Devise"
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
#, fuzzy
msgid "Customer Reference"
msgstr "Reference Client"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__name
msgid "Description"
msgstr "Description"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move__display_name
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__display_name
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__display_name
msgid "Display Name"
msgstr "Nom"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__display_type
msgid "Display Type"
msgstr "Type Affichage"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move__id
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__id
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__id
msgid "ID"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__invoice_id
msgid "Invoice"
msgstr "Facture"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__invoice_line_id
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__line_ids
msgid "Invoice Lines"
msgstr "Ligne de factures"
#. module: account_invoice_update_wizard
#: model:ir.actions.act_window,name:account_invoice_update_wizard.account_invoice_update_action
msgid "Invoice Update Wizard"
msgstr "Assistance de mise à jour de la facture"
#. module: account_invoice_update_wizard
#: model:ir.model,name:account_invoice_update_wizard.model_account_move
msgid "Journal Entry"
msgstr "Entrée comptable"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move____last_update
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update____last_update
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update____last_update
msgid "Last Modified on"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__write_uid
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__write_uid
msgid "Last Updated by"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__write_date
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__write_date
msgid "Last Updated on"
msgstr ""
#. module: account_invoice_update_wizard
#: code:addons/account_invoice_update_wizard/wizard/account_move_update.py:0
#, python-format
msgid "Non-legal fields of invoice updated via the Invoice Update wizard."
msgstr "Champs non légaux mis à jour via l'assistant"
#. module: account_invoice_update_wizard
#: model:ir.model.fields.selection,name:account_invoice_update_wizard.selection__account_move_line_update__display_type__line_note
msgid "Note"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__partner_id
msgid "Partner"
msgstr "Client"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__invoice_payment_term_id
msgid "Payment Term"
msgstr "Condition de paiement"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__quantity
msgid "Quantity"
msgstr "Quantité"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__ref
#, fuzzy
msgid "Reference"
msgstr "Reference Client"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__user_id
msgid "Salesperson"
msgstr "Vendeur"
#. module: account_invoice_update_wizard
#: model:ir.model.fields.selection,name:account_invoice_update_wizard.selection__account_move_line_update__display_type__line_section
msgid "Section"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__sequence
msgid "Sequence"
msgstr "Sequence"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__invoice_origin
msgid "Source Document"
msgstr "Origine du document"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,help:account_invoice_update_wizard.field_account_move_line_update__display_type
msgid "Technical field for UX purpose."
msgstr ""
#. module: account_invoice_update_wizard
#: code:addons/account_invoice_update_wizard/wizard/account_move_update.py:0
#, python-format
msgid ""
"The original payment term '%s' doesn't have the same terms (number of terms "
"and/or amount) as the new payment term '%s'. You can only switch to a "
"payment term that has the same number of terms with the same amount."
msgstr ""
#. module: account_invoice_update_wizard
#: code:addons/account_invoice_update_wizard/wizard/account_move_update.py:0
#, python-format
msgid ""
"This wizard doesn't support the update of payment terms on an invoice which "
"is partially or fully paid."
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_update__move_type
msgid "Type"
msgstr ""
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
msgid "Update"
msgstr "Mettre à jour"
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.view_move_form_inherit
msgid "Update Invoice"
msgstr "Mettre à jour"
#. module: account_invoice_update_wizard
#: model_terms:ir.ui.view,arch_db:account_invoice_update_wizard.account_invoice_update_form
msgid "Update Invoice Wizard"
msgstr "Assistant de mise à jour"
#. module: account_invoice_update_wizard
#: model:ir.model,name:account_invoice_update_wizard.model_account_move_line_update
msgid "Update non-legal fields of invoice lines"
msgstr "Mettre à jour les champs non légaux des lignes de facture"
#. module: account_invoice_update_wizard
#: model:ir.model.fields,field_description:account_invoice_update_wizard.field_account_move_line_update__parent_id
msgid "Wizard"
msgstr ""
#. module: account_invoice_update_wizard
#: model:ir.model,name:account_invoice_update_wizard.model_account_move_update
msgid "Wizard to update non-legal fields of invoice"
msgstr "Assistant pour mettre à jours les champs non légaux"
#~ msgid "Account"
#~ msgstr "Compte"

View File

@@ -11,8 +11,7 @@
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<button name="button_draft" position="before">
<button name="prepare_update_wizard" type="object" string="Update Invoice" groups="account.group_account_invoice" attrs="{'invisible': ['|', ('state', '!=', 'posted'), ('move_type', '=', 'entry')]}"/>
<button name="prepare_update_wizard" type="object" string="Update Entry" groups="account.group_account_invoice" attrs="{'invisible': ['|', ('state', '!=', 'posted'), ('move_type', '!=', 'entry')]}"/>
<button name="prepare_update_wizard" type="object" string="Update Invoice" states="posted" groups="account.group_account_invoice"/>
</button>
</field>
</record>

View File

@@ -21,7 +21,6 @@ class AccountMoveUpdate(models.TransientModel):
invoice_payment_term_id = fields.Many2one(
'account.payment.term', string='Payment Term')
ref = fields.Char(string='Reference') # field label is customized in the view
invoice_date = fields.Date()
invoice_origin = fields.Char(string='Source Document')
partner_bank_id = fields.Many2one(
'res.partner.bank', string='Bank Account')
@@ -31,7 +30,7 @@ class AccountMoveUpdate(models.TransientModel):
@api.model
def _simple_fields2update(self):
'''List boolean, date, datetime, char, text fields'''
return ['ref', 'invoice_origin', 'invoice_date']
return ['ref', 'invoice_origin']
@api.model
def _m2o_fields2update(self):
@@ -49,7 +48,6 @@ class AccountMoveUpdate(models.TransientModel):
aa_tags = [(6, 0, aa_tags.ids)] if aa_tags else False
res['line_ids'].append([0, 0, {
'invoice_line_id': line.id,
'sequence': line.sequence,
'name': line.name,
'quantity': line.quantity,
'price_subtotal': line.price_subtotal,
@@ -233,9 +231,7 @@ class AccountMoveUpdate(models.TransientModel):
class AccountMoveLineUpdate(models.TransientModel):
_name = 'account.move.line.update'
_description = 'Update non-legal fields of invoice lines'
_order = "sequence, name"
sequence = fields.Integer()
parent_id = fields.Many2one(
'account.move.update', string='Wizard', ondelete='cascade')
invoice_line_id = fields.Many2one(

View File

@@ -15,25 +15,22 @@
<field name="move_type" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="partner_id" invisible="1"/>
<field string="Bill Date" attrs="{'invisible': [('move_type', 'not in', ('in_invoice', 'in_refund'))]}" name="invoice_date"/>
<field string="Supplier Bill Reference" attrs="{'invisible': [('move_type', 'not in', ('in_invoice', 'in_refund'))]}" name="ref"/>
<field string="Bill Reference" attrs="{'invisible': [('move_type', 'not in', ('in_invoice', 'in_refund'))]}" name="ref"/>
<field string="Customer Reference" attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund'))]}" name="ref"/>
<field string="Ref" attrs="{'invisible': [('move_type', '!=', 'entry')]}" name="ref"/>
<field name="invoice_origin" attrs="{'invisible': [('move_type', '=', 'entry')]}"/>
<!-- update of payment term is broken -->
<!-- <field name="invoice_payment_term_id" widget="selection"/>-->
<field name="partner_bank_id" attrs="{'invisible': [('move_type', '=', 'entry')]}"/>
<field name="user_id" options="{'no_open': True, 'no_create': True, 'no_create_edit': True}" attrs="{'invisible': [('move_type', '=', 'entry')]}"/>
<field name="invoice_origin"/>
<field name="invoice_payment_term_id" widget="selection"/>
<field name="partner_bank_id"/>
<field name="user_id" options="{'no_open': True, 'no_create': True, 'no_create_edit': True}"/>
</group>
<group name="lines">
<field name="line_ids" nolabel="1" widget="section_and_note_one2many">
<field name="line_ids" nolabel="1">
<tree editable="bottom" create="false" delete="false" edit="true">
<field name="invoice_line_id" invisible="1"/>
<field name="display_type" invisible="1"/>
<field name="currency_id" invisible="1"/>
<field name="name"/>
<field name="quantity" attrs="{'invisible': [('display_type', '!=', False)], 'column_invisible': [('parent.move_type', '=', 'entry')]}"/>
<field name="price_subtotal" attrs="{'invisible': [('display_type', '!=', False)], 'column_invisible': [('parent.move_type', '=', 'entry')]}"/>
<field name="quantity" attrs="{'invisible': [('display_type', '!=', False)]}"/>
<field name="price_subtotal" attrs="{'invisible': [('display_type', '!=', False)]}"/>
<field name="analytic_account_id" attrs="{'invisible': [('display_type', '!=', False)]}" groups="analytic.group_analytic_accounting"/>
<field name="analytic_tag_ids" attrs="{'invisible': [('display_type', '!=', False)]}" groups="analytic.group_analytic_tags" widget="many2many_tags"/>
</tree>

View File

@@ -12,6 +12,6 @@
'website': 'https://github.com/akretion/odoo-usability',
'depends': ['account_invoice_update_wizard', 'account_payment_partner'],
'data': ['wizard/account_move_update_view.xml'],
'installable': True,
'installable': False,
'auto_install': True,
}

View File

@@ -12,7 +12,7 @@
<field name="model">account.move.update</field>
<field name="inherit_id" ref="account_invoice_update_wizard.account_invoice_update_form"/>
<field name="arch" type="xml">
<field name="partner_bank_id" position="before">
<field name="invoice_payment_term_id" position="after">
<field name="payment_mode_filter_type_domain" invisible="1"/>
<field name="partner_bank_filter_type_domain" invisible="1"/>
<field name="bank_account_required" invisible="1"/>

View File

@@ -1,18 +0,0 @@
# Copyright 2022 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).
{
'name': 'Account Menu Usability',
'version': '14.0.1.0.0',
'category': 'Accounting & Finance',
'license': 'AGPL-3',
'summary': 'Small usability enhancements in account_menu module',
'author': 'Akretion',
'website': 'https://github.com/akretion/odoo-usability',
'depends': ['account_menu'],
'data': [
'views/account_menu.xml',
],
'installable': True,
}

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2022 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>
<!-- Accounting Templates are useful only when creating a new company/loading
a chart of accounts, so we put it under 'Settings > Technical' and not
under 'Invoicing > Configuration' which already has a lot of menu entries -->
<record id="account_menu.menu_account_coa_settings" model="ir.ui.menu">
<field name="name">Accounting Templates</field>
<field name="parent_id" ref="base.menu_custom"/>
</record>
</odoo>

View File

@@ -25,5 +25,5 @@ I don't recommend the use of this module.
'data': [
'views/account_move.xml',
],
'installable': True,
'installable': False,
}

View File

@@ -0,0 +1,33 @@
# Copyright 2023 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).
{
'name': 'Account Product Fiscal Classification - Sale',
'version': '16.0.1.0.0',
'category': 'Sales',
'license': 'AGPL-3',
'summary': 'Glue module between account_product_fiscal_classification and sale',
'description': """
This module adds a **Start Date** and **End Date** field on invoice
lines. For example, if you have an insurance contrat for your company
that run from April 1st 2013 to March 31st 2014, you will enter these
dates as start and end dates on the supplier invoice line. If your
fiscal year ends on December 31st 2013, 3 months of expenses are part of
the 2014 fiscal year and should not be part of the 2013 fiscal year. So,
thanks to this module, you will create a *Prepaid Expense* on December
31st 2013 and OpenERP will identify this expense with the 3 months that
are after the cut-off date and propose to generate the appropriate
cut-off journal entry.
This module has been written by Alexis de Lattre from Akretion
<alexis.delattre@akretion.com>.
""",
'author': 'Akretion',
'maintainers': ['alexis-via'],
'website': 'https://github.com/akretion/odoo-usability',
'depends': ['pos_sale', 'account_product_fiscal_classification'],
"data": ['report/sale_report_view.xml'],
'auto_install': True,
'installable': False,
}

View File

@@ -0,0 +1,35 @@
# Copyright 2023 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
class SaleReport(models.Model):
_inherit = "sale.report"
fiscal_classification_id = fields.Many2one(
"account.product.fiscal.classification",
string="Product Fiscal Classification",
readonly=True,
)
def _select_additional_fields(self):
res = super()._select_additional_fields()
res["fiscal_classification_id"] = "t.fiscal_classification_id"
return res
def _group_by_sale(self):
res = super()._group_by_sale()
res += ", t.fiscal_classification_id"
return res
def _fill_pos_fields(self, additional_fields):
res = super()._fill_pos_fields(additional_fields)
res['fiscal_classification_id'] = "t.fiscal_classification_id"
return res
def _group_by_pos(self):
res = super()._group_by_pos()
res += ", t.fiscal_classification_id"
return res

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2023 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_order_product_search" model="ir.ui.view">
<field name="model">sale.report</field>
<field name="inherit_id" ref="sale.view_order_product_search"/>
<field name="arch" type="xml">
<filter name="Category" position="after">
<filter name="fiscal_classification_groupby" string="Product Fiscal Classification" context="{'group_by': 'fiscal_classification_id'}"/>
</filter>
</field>
</record>
</odoo>

View File

@@ -1,45 +0,0 @@
# Copyright 2015-2020 Akretion (http://www.akretion.com)
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Account Usability',
'version': '14.0.1.1.0',
'category': 'Accounting & Finance',
'license': 'AGPL-3',
'summary': 'Small usability enhancements in account module',
'author': 'Akretion',
'website': 'http://www.akretion.com',
'depends': [
'account',
'base_usability', # needed only to access base_usability.group_nobody
# in v12, I may create a module only for group_nobody
],
'data': [
'views/account_account_type.xml',
'views/account_account.xml',
'views/account_group.xml',
'views/account_analytic_account.xml',
'views/account_analytic_group.xml',
'views/account_bank_statement.xml',
'views/account_invoice_report.xml',
'views/account_journal.xml',
'views/account_move.xml',
'views/account_menu.xml',
'views/account_tax.xml',
'views/product.xml',
'views/res_config_settings.xml',
'views/res_company.xml',
'views/res_partner.xml',
'views/account_report.xml',
'views/account_reconcile_model.xml',
'wizard/account_invoice_mark_sent_view.xml',
'wizard/account_group_generate_view.xml',
'wizard/account_payment_register_views.xml',
'security/ir.model.access.csv',
'report/invoice_report.xml',
],
'qweb': ['static/src/xml/account_payment.xml'],
'installable': True,
"post_init_hook": "post_init_hook",
}

View File

@@ -1,691 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_usability
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_usability
#: code:addons/account_usability/wizard/account_group_generate.py:0
#, python-format
msgid ""
"%d account groups already exists in company '%s'. This wizard is designed to"
" generate account groups from scratch."
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_account
msgid "Account"
msgstr ""
#. module: account_usability
#: code:addons/account_usability/wizard/account_group_generate.py:0
#, python-format
msgid "Account Groups"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_move_reversal
msgid "Account Move Reversal"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_journal__account_type_current_assets_id
msgid "Account Type Current Assets"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_journal__account_type_current_liabilities_id
msgid "Account Type Current Liabilities"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__account_reconcile
msgid "Allow Reconciliation"
msgstr ""
#. module: account_usability
#: model:ir.model.constraint,message:account_usability.constraint_account_analytic_account_code_company_unique
msgid ""
"An analytic account with the same code already exists in the same company!"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_analytic_account
msgid "Analytic Account"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_form
msgid "Are you sure to unreconcile all the entrie of the bank statement?"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_bank_statement_line__partner_bank_id
#: model:ir.model.fields,help:account_usability.field_account_move__partner_bank_id
msgid ""
"Bank Account Number to which the invoice will be paid. A Company bank "
"account if this is a Customer Invoice or Vendor Credit Note, otherwise a "
"Partner bank account number."
msgstr ""
#. module: account_usability
#: model:ir.ui.menu,name:account_usability.res_partner_bank_account_config_menu
msgid "Bank Accounts"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_bank_statement
msgid "Bank Statement"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr ""
#. module: account_usability
#: model:ir.ui.menu,name:account_usability.res_bank_account_config_menu
msgid "Banks"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_group_generate_form
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_mark_sent_form
msgid "Cancel"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__account_reconcile
msgid ""
"Check this box if this account allows invoices & payments matching of "
"journal items."
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_search
msgid "Code"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_res_company
msgid "Companies"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_res_partner
msgid "Contact"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__create_uid
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__create_uid
msgid "Created by"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__create_date
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__create_date
msgid "Created on"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__matched_credit_ids
msgid "Credit journal items that are matched with this journal item."
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Current Year"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__date
#: model:ir.model.fields,field_description:account_usability.field_account_move__date
#: model:ir.model.fields,field_description:account_usability.field_account_payment__date
msgid "Date"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__matched_debit_ids
msgid "Debit journal items that are matched with this journal item."
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Debit or Credit"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_account__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_analytic_account__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_incoterms__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_report__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_journal__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_move__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_move_reversal__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_partial_reconcile__display_name
#: model:ir.model.fields,field_description:account_usability.field_product_supplierinfo__display_name
#: model:ir.model.fields,field_description:account_usability.field_product_template__display_name
#: model:ir.model.fields,field_description:account_usability.field_res_company__display_name
#: model:ir.model.fields,field_description:account_usability.field_res_config_settings__display_name
#: model:ir.model.fields,field_description:account_usability.field_res_partner__display_name
msgid "Display Name"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__invoice_date_due
#: model:ir.model.fields,field_description:account_usability.field_account_move__invoice_date_due
#: model:ir.model.fields,field_description:account_usability.field_account_payment__invoice_date_due
msgid "Due Date"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__end_date
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_search
msgid "End Date"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_fiscal_position
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability.field_account_move__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability.field_account_payment__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability.field_res_partner__property_account_position_id
#: model:ir.model.fields,field_description:account_usability.field_res_users__property_account_position_id
msgid "Fiscal Position"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_fiscalyear
msgid "Fiscal Year"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_bank_statement_line__fiscal_position_id
#: model:ir.model.fields,help:account_usability.field_account_move__fiscal_position_id
#: model:ir.model.fields,help:account_usability.field_account_payment__fiscal_position_id
msgid ""
"Fiscal positions are used to adapt taxes and accounts for particular "
"customers or sales orders/invoices. The default value comes from the "
"customer."
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__full_reconcile_id
msgid "Full Reconcile"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Fully Reconciled"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_group_generate_form
msgid "Generate"
msgstr ""
#. module: account_usability
#: model:ir.actions.act_window,name:account_usability.account_group_generate_action
#: model:ir.model,name:account_usability.model_account_group_generate
#: model:ir.ui.menu,name:account_usability.account_group_generate_menu
msgid "Generate Account Groups"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_group_generate_form
msgid "Generate account groups"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_analytic_account_search
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_search
msgid "Group"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_journal_search
msgid "Group By"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__has_attachment
#: model:ir.model.fields,field_description:account_usability.field_account_move__has_attachment
#: model:ir.model.fields,field_description:account_usability.field_account_payment__has_attachment
msgid "Has Attachment"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__has_discount
#: model:ir.model.fields,field_description:account_usability.field_account_move__has_discount
#: model:ir.model.fields,field_description:account_usability.field_account_payment__has_discount
msgid "Has Discount"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__hide_bank_statement_balance
#: model:ir.model.fields,field_description:account_usability.field_account_journal__hide_bank_statement_balance
msgid "Hide Bank Statement Balance"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_account__id
#: model:ir.model.fields,field_description:account_usability.field_account_analytic_account__id
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__id
#: model:ir.model.fields,field_description:account_usability.field_account_incoterms__id
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__id
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_report__id
#: model:ir.model.fields,field_description:account_usability.field_account_journal__id
#: model:ir.model.fields,field_description:account_usability.field_account_move__id
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__id
#: model:ir.model.fields,field_description:account_usability.field_account_move_reversal__id
#: model:ir.model.fields,field_description:account_usability.field_account_partial_reconcile__id
#: model:ir.model.fields,field_description:account_usability.field_product_supplierinfo__id
#: model:ir.model.fields,field_description:account_usability.field_product_template__id
#: model:ir.model.fields,field_description:account_usability.field_res_company__id
#: model:ir.model.fields,field_description:account_usability.field_res_config_settings__id
#: model:ir.model.fields,field_description:account_usability.field_res_partner__id
msgid "ID"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_incoterms
msgid "Incoterms"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_res_config_settings__transfer_account_id
msgid "Inter-Banks Transfer Account"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_res_config_settings__transfer_account_id
msgid ""
"Intermediary account used when moving money from a liquidity account to "
"another"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__product_barcode
msgid "International Article Number used for product identification."
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_invoice
#: model:ir.model.fields,field_description:account_usability.field_res_partner__invoice_warn
#: model:ir.model.fields,field_description:account_usability.field_res_users__invoice_warn
msgid "Invoice"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_company_form
msgid "Invoice Legal Terms"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_invoice_line
msgid "Invoice Line"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_report_tree
msgid "Invoices Analysis"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_invoice_report
msgid "Invoices Statistics"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_journal
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__journal_id
#: model:ir.model.fields,field_description:account_usability.field_account_move__journal_id
#: model:ir.model.fields,field_description:account_usability.field_account_payment__journal_id
msgid "Journal"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_account____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_analytic_account____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_incoterms____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_report____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_journal____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_move____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_move_reversal____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_partial_reconcile____last_update
#: model:ir.model.fields,field_description:account_usability.field_product_supplierinfo____last_update
#: model:ir.model.fields,field_description:account_usability.field_product_template____last_update
#: model:ir.model.fields,field_description:account_usability.field_res_company____last_update
#: model:ir.model.fields,field_description:account_usability.field_res_config_settings____last_update
#: model:ir.model.fields,field_description:account_usability.field_res_partner____last_update
msgid "Last Modified on"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__write_uid
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__write_uid
msgid "Last Updated by"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__write_date
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__write_date
msgid "Last Updated on"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_company_form
msgid "Legal Terms"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_res_company__static_invoice_terms
msgid "Legal Terms on Invoice"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__level
msgid "Level"
msgstr ""
#. module: account_usability
#: model:ir.actions.act_window,name:account_usability.account_invoice_mark_sent_action
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_mark_sent_form
msgid "Mark as Sent"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_invoice_mark_sent
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_mark_sent_form
msgid "Mark invoices as sent"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_invoice_filter
msgid "Missing Attachment"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_partial_reconcile
msgid "Partial Reconcile"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__matched_credit_ids
msgid "Partial Reconcile Credit"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__matched_debit_ids
msgid "Partial Reconcile Debit"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_report__industry_id
msgid "Partner Industry"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__invoice_payment_term_id
#: model:ir.model.fields,field_description:account_usability.field_account_move__invoice_payment_term_id
#: model:ir.model.fields,field_description:account_usability.field_account_payment__invoice_payment_term_id
msgid "Payment Terms"
msgstr ""
#. module: account_usability
#: code:addons/account_usability/models/account_move.py:0
#, python-format
msgid "Please post the following entries before reconciliation :"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__name_prefix
msgid "Prefix"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_reconcile_model
msgid ""
"Preset to create journal entries during a invoices and payments matching"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Previous Year"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_move_form
msgid "Print"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__product_barcode
msgid "Product Barcode"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_product_template
msgid "Product Template"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_product_product__purchase_price_type
#: model:ir.model.fields,field_description:account_usability.field_product_supplierinfo__purchase_price_type
#: model:ir.model.fields,field_description:account_usability.field_product_template__purchase_price_type
msgid "Purchase Price Type"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__partner_bank_id
#: model:ir.model.fields,field_description:account_usability.field_account_move__partner_bank_id
msgid "Recipient Bank"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__ref
#: model:ir.model.fields,field_description:account_usability.field_account_move__ref
#: model:ir.model.fields,field_description:account_usability.field_account_payment__ref
msgid "Reference"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_reversal__date
msgid "Reversal date"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__sale_dates
#: model:ir.model.fields,field_description:account_usability.field_account_move__sale_dates
#: model:ir.model.fields,field_description:account_usability.field_account_payment__sale_dates
msgid "Sale Dates"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_product_product__sale_price_type
#: model:ir.model.fields,field_description:account_usability.field_product_template__sale_price_type
msgid "Sale Price Type"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_res_partner__invoice_warn
#: model:ir.model.fields,help:account_usability.field_res_users__invoice_warn
msgid ""
"Selecting the \"Warning\" option will notify user with the message, "
"Selecting \"Blocking Message\" will throw an exception with the message and "
"block the flow. The Message has to be written in the next field."
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_invoice_filter
msgid "Sent"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__start_date
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_search
msgid "Start Date"
msgstr ""
#. module: account_usability
#: model:ir.model,name:account_usability.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.product_supplierinfo_tree_view
msgid "Tax"
msgstr ""
#. module: account_usability
#: code:addons/account_usability/models/product.py:0
#, python-format
msgid "Tax excl."
msgstr ""
#. module: account_usability
#: code:addons/account_usability/models/product.py:0
#, python-format
msgid "Tax incl."
msgstr ""
#. module: account_usability
#: code:addons/account_usability/wizard/account_group_generate.py:0
#, python-format
msgid ""
"The code of account '%s' is %d caracters. It cannot be inferior to level "
"(%d)."
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_res_partner__property_account_position_id
#: model:ir.model.fields,help:account_usability.field_res_users__property_account_position_id
msgid ""
"The fiscal position determines the taxes/accounts used for this contact."
msgstr ""
#. module: account_usability
#: code:addons/account_usability/wizard/account_group_generate.py:0
#, python-format
msgid "The level must be >= 1."
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_bank_statement_line__sale_dates
#: model:ir.model.fields,help:account_usability.field_account_move__sale_dates
#: model:ir.model.fields,help:account_usability.field_account_payment__sale_dates
msgid ""
"This information appears on invoice qweb report (you may use it for your own"
" report)"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_group_generate_form
msgid ""
"This wizard is designed to auto-generate account groups from the chart of "
"account."
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_mark_sent_form
msgid ""
"This wizard will mark as <i>sent</i> all the selected invoices in open or "
"paid state."
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_invoice_filter
msgid "To Send"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__amount_total
#: model:ir.model.fields,field_description:account_usability.field_account_move__amount_total
#: model:ir.model.fields,field_description:account_usability.field_account_payment__amount_total
msgid "Total"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.res_config_settings_view_form
msgid ""
"Transit account when you transfer money from a bank account of your company "
"to another bank account of your company."
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_journal_search
msgid "Type"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_form
msgid "Unreconcile All"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Unreconciled or Partially Reconciled"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_form
msgid "View Journal Entry"
msgstr ""
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_move_line_tree
msgid "View Journal Entry Form"
msgstr ""
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_bank_statement__hide_bank_statement_balance
#: model:ir.model.fields,help:account_usability.field_account_journal__hide_bank_statement_balance
msgid ""
"You may want to enable this option when your bank journal is generated from "
"a bank statement file that doesn't handle start/end balance (QIF for "
"instance) and you don't want to enter the start/end balance manually: it "
"will prevent the display of wrong information in the accounting dashboard "
"and on bank statements."
msgstr ""

View File

@@ -1,744 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_usability
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-01 14:17+0000\n"
"PO-Revision-Date: 2022-09-18 18:55+0200\n"
"Last-Translator: \n"
"Language-Team: Alpis Traduction et Interprétation <info@alpis.fr>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.4\n"
#. module: account_usability
#: code:addons/account_usability/wizard/account_group_generate.py:0
#, python-format
msgid ""
"%d account groups already exists in company '%s'. This wizard is designed "
"to generate account groups from scratch."
msgstr ""
"%d des groupes de comptes existent déjà dans la société '%s'. Cet "
"assistant est conçu pour créer des groupes de comptes à partir de zéro."
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_account
msgid "Account"
msgstr "Compte"
#. module: account_usability
#: code:addons/account_usability/wizard/account_group_generate.py:0
#, python-format
msgid "Account Groups"
msgstr "Groupes de comptes"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_move_reversal
msgid "Account Move Reversal"
msgstr "Extourne d'écritures"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr "Outils de lettrage de compte"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_journal__account_type_current_assets_id
msgid "Account Type Current Assets"
msgstr "Type de compte actif circulant"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_journal__account_type_current_liabilities_id
msgid "Account Type Current Liabilities"
msgstr "Type de compte Dettes à court terme"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__account_reconcile
msgid "Allow Reconciliation"
msgstr "Autoriser le lettrage"
#. module: account_usability
#: model:ir.model.constraint,message:account_usability.constraint_account_analytic_account_code_company_unique
msgid ""
"An analytic account with the same code already exists in the same company!"
msgstr ""
"Un compte analytique avec le même code existe déjà dans la même société !"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_analytic_account
msgid "Analytic Account"
msgstr "Compte analytique"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_form
msgid "Are you sure to unreconcile all the entries of the bank statement?"
msgstr "Êtes-vous sûr de vouloir délettrer toutes les écritures du relevé ?"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__balance
#: model_terms:ir.ui.view,arch_db:account_usability.view_move_line_tree
msgid "Balance"
msgstr "Solde"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_bank_statement_line__partner_bank_id
#: model:ir.model.fields,help:account_usability.field_account_move__partner_bank_id
msgid ""
"Bank Account Number to which the invoice will be paid. A Company bank "
"account if this is a Customer Invoice or Vendor Credit Note, otherwise a "
"Partner bank account number."
msgstr ""
"Numéro du compte bancaire sur lequel la facture sera payée. Un compte "
"bancaire de la société s'il s'agit d'une facture client ou d'un avoir du "
"fournisseur, sinon un numéro de compte bancaire du tiers."
#. module: account_usability
#: model:ir.ui.menu,name:account_usability.res_partner_bank_account_config_menu
msgid "Bank Accounts"
msgstr "Comptes bancaires"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_bank_statement
msgid "Bank Statement"
msgstr "Relevé de compte"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Ligne de relevé de compte"
#. module: account_usability
#: model:ir.ui.menu,name:account_usability.res_bank_account_config_menu
msgid "Banks"
msgstr "Banques"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_group_generate_form
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_mark_sent_form
msgid "Cancel"
msgstr "Annuler"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__account_reconcile
msgid ""
"Check this box if this account allows invoices & payments matching of "
"journal items."
msgstr ""
"Cochez cette case si ce compte permet de faire du rapprochement entre "
"factures et paiements."
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_search
msgid "Code"
msgstr "Code"
#. module: account_usability
#: model:ir.model,name:account_usability.model_res_company
msgid "Companies"
msgstr "Sociétés"
#. module: account_usability
#: model:ir.model,name:account_usability.model_res_config_settings
msgid "Config Settings"
msgstr "Paramètres de configuration"
#. module: account_usability
#: model:ir.model,name:account_usability.model_res_partner
msgid "Contact"
msgstr "Contact"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__create_uid
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__create_date
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__create_date
msgid "Created on"
msgstr "Créé le"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__matched_credit_ids
msgid "Credit journal items that are matched with this journal item."
msgstr "Écritures comptables au crédit qui correspondent à cette écriture comptable."
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Current Year"
msgstr "Année en cours"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__date
#: model:ir.model.fields,field_description:account_usability.field_account_move__date
#: model:ir.model.fields,field_description:account_usability.field_account_payment__date
msgid "Date"
msgstr "Date"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__matched_debit_ids
msgid "Debit journal items that are matched with this journal item."
msgstr "Écritures comptables au débit qui correspondent avec cette écriture comptable."
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Debit or Credit"
msgstr "Débit ou crédit"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_account__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_analytic_account__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_incoterms__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_report__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_journal__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_move__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_move_reversal__display_name
#: model:ir.model.fields,field_description:account_usability.field_account_partial_reconcile__display_name
#: model:ir.model.fields,field_description:account_usability.field_product_supplierinfo__display_name
#: model:ir.model.fields,field_description:account_usability.field_product_template__display_name
#: model:ir.model.fields,field_description:account_usability.field_res_company__display_name
#: model:ir.model.fields,field_description:account_usability.field_res_config_settings__display_name
#: model:ir.model.fields,field_description:account_usability.field_res_partner__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__invoice_date_due
#: model:ir.model.fields,field_description:account_usability.field_account_move__invoice_date_due
#: model:ir.model.fields,field_description:account_usability.field_account_payment__invoice_date_due
msgid "Due Date"
msgstr "Date d'échéance"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__end_date
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_search
msgid "End Date"
msgstr "Date de Fin"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_fiscal_position
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability.field_account_move__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability.field_account_payment__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability.field_res_partner__property_account_position_id
#: model:ir.model.fields,field_description:account_usability.field_res_users__property_account_position_id
msgid "Fiscal Position"
msgstr "Position fiscale"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_fiscalyear
msgid "Fiscal Year"
msgstr "Exercice"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_bank_statement_line__fiscal_position_id
#: model:ir.model.fields,help:account_usability.field_account_move__fiscal_position_id
#: model:ir.model.fields,help:account_usability.field_account_payment__fiscal_position_id
msgid ""
"Fiscal positions are used to adapt taxes and accounts for particular "
"customers or sales orders/invoices. The default value comes from the "
"customer."
msgstr ""
"Les positions fiscales sont utilisées pour adapter les taxes et les comptes "
"à des clients particuliers ou à des bons de commande/factures. La valeur "
"par défaut provient du client."
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__full_reconcile_id
msgid "Full Reconcile"
msgstr "Marque de lettrage"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Fully Reconciled"
msgstr "Lettré totalement"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_group_generate_form
msgid "Generate"
msgstr "Générer"
#. module: account_usability
#: model:ir.actions.act_window,name:account_usability.account_group_generate_action
#: model:ir.model,name:account_usability.model_account_group_generate
#: model:ir.ui.menu,name:account_usability.account_group_generate_menu
msgid "Generate Account Groups"
msgstr "Générer les groupes de comptes"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_analytic_account_search
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_search
msgid "Group"
msgstr "Groupe"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_journal_search
msgid "Group By"
msgstr "Regrouper par"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__has_attachment
#: model:ir.model.fields,field_description:account_usability.field_account_move__has_attachment
#: model:ir.model.fields,field_description:account_usability.field_account_payment__has_attachment
msgid "Has Attachment"
msgstr "Possède une pièce jointe"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__has_discount
#: model:ir.model.fields,field_description:account_usability.field_account_move__has_discount
#: model:ir.model.fields,field_description:account_usability.field_account_payment__has_discount
msgid "Has Discount"
msgstr "A une réduction"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__hide_bank_statement_balance
#: model:ir.model.fields,field_description:account_usability.field_account_journal__hide_bank_statement_balance
msgid "Hide Bank Statement Balance"
msgstr "Masquer le solde du relevé bancaire"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_account__id
#: model:ir.model.fields,field_description:account_usability.field_account_analytic_account__id
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__id
#: model:ir.model.fields,field_description:account_usability.field_account_incoterms__id
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__id
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_report__id
#: model:ir.model.fields,field_description:account_usability.field_account_journal__id
#: model:ir.model.fields,field_description:account_usability.field_account_move__id
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__id
#: model:ir.model.fields,field_description:account_usability.field_account_move_reversal__id
#: model:ir.model.fields,field_description:account_usability.field_account_partial_reconcile__id
#: model:ir.model.fields,field_description:account_usability.field_product_supplierinfo__id
#: model:ir.model.fields,field_description:account_usability.field_product_template__id
#: model:ir.model.fields,field_description:account_usability.field_res_company__id
#: model:ir.model.fields,field_description:account_usability.field_res_config_settings__id
#: model:ir.model.fields,field_description:account_usability.field_res_partner__id
msgid "ID"
msgstr "ID"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_incoterms
msgid "Incoterms"
msgstr "Incoterms"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_res_config_settings__transfer_account_id
msgid "Inter-Banks Transfer Account"
msgstr "Compte de transfert inter-bancaire"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_res_config_settings__transfer_account_id
msgid ""
"Intermediary account used when moving money from a liquidity account to "
"another"
msgstr ""
"Compte intermédiaire utilisé pour déplacer de l'argent d'un compte de "
"trésorerie vers un autre"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__product_barcode
msgid "International Article Number used for product identification."
msgstr ""
"Numéro d'article international (IAN) utilisé pour identifier cet article."
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_invoice
#: model:ir.model.fields,field_description:account_usability.field_res_partner__invoice_warn
#: model:ir.model.fields,field_description:account_usability.field_res_users__invoice_warn
msgid "Invoice"
msgstr "Facture"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_company_form
msgid "Invoice Legal Terms"
msgstr "Mentions légales sur les factures"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_invoice_line
msgid "Invoice Line"
msgstr "Lignes de facture"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_report_tree
msgid "Invoices Analysis"
msgstr "Analyse des factures"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Statistiques des factures"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_journal
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__journal_id
#: model:ir.model.fields,field_description:account_usability.field_account_move__journal_id
#: model:ir.model.fields,field_description:account_usability.field_account_payment__journal_id
msgid "Journal"
msgstr "Journal"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_move
msgid "Journal Entry"
msgstr "Pièce comptable"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_move_line
msgid "Journal Item"
msgstr "Écriture comptable"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_account____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_analytic_account____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_incoterms____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_report____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_journal____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_move____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_move_reversal____last_update
#: model:ir.model.fields,field_description:account_usability.field_account_partial_reconcile____last_update
#: model:ir.model.fields,field_description:account_usability.field_product_supplierinfo____last_update
#: model:ir.model.fields,field_description:account_usability.field_product_template____last_update
#: model:ir.model.fields,field_description:account_usability.field_res_company____last_update
#: model:ir.model.fields,field_description:account_usability.field_res_config_settings____last_update
#: model:ir.model.fields,field_description:account_usability.field_res_partner____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__write_uid
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__write_uid
msgid "Last Updated by"
msgstr "Mis à jour par"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__write_date
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_mark_sent__write_date
msgid "Last Updated on"
msgstr "Mis à jour le"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_company_form
msgid "Legal Terms"
msgstr "Mentions légales"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_res_company__static_invoice_terms
msgid "Legal Terms on Invoice"
msgstr "Mentions légales sur les factures"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__level
msgid "Level"
msgstr "Niveau"
#. module: account_usability
#: model:ir.actions.act_window,name:account_usability.account_invoice_mark_sent_action
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_mark_sent_form
msgid "Mark as Sent"
msgstr "Marquer comme envoyé"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_invoice_mark_sent
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_mark_sent_form
msgid "Mark invoices as sent"
msgstr "Marquer les factures comme envoyées"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_invoice_filter
msgid "Missing Attachment"
msgstr "Pièce jointe manquante"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_partial_reconcile
msgid "Partial Reconcile"
msgstr "Lettrage partiel"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__matched_credit_ids
msgid "Partial Reconcile Credit"
msgstr "Crédit de lettrage partiel"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__matched_debit_ids
msgid "Partial Reconcile Debit"
msgstr "Débit de lettrage partiel"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_invoice_report__industry_id
msgid "Partner Industry"
msgstr "Secteur dactivité du partenaire"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__invoice_payment_term_id
#: model:ir.model.fields,field_description:account_usability.field_account_move__invoice_payment_term_id
#: model:ir.model.fields,field_description:account_usability.field_account_payment__invoice_payment_term_id
msgid "Payment Terms"
msgstr "Conditions de paiement"
#. module: account_usability
#: code:addons/account_usability/models/account_move.py:0
#, python-format
msgid "Please post the following entries before reconciliation :"
msgstr "Veuillez comptabiliser les pièces suivantes avant le lettrage :"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_group_generate__name_prefix
msgid "Prefix"
msgstr "Préfixe"
#. module: account_usability
#: model:ir.model,name:account_usability.model_account_reconcile_model
msgid ""
"Preset to create journal entries during a invoices and payments matching"
msgstr ""
"Préconfigurer pour créer une écriture pendant la correspondance entre des "
"factures et des paiements"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Previous Year"
msgstr "Année précédente"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_move_form
msgid "Print"
msgstr "Imprimer"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__product_barcode
msgid "Product Barcode"
msgstr "Code barre du produit"
#. module: account_usability
#: model:ir.model,name:account_usability.model_product_template
msgid "Product Template"
msgstr "Modèle de produit"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_product_product__purchase_price_type
#: model:ir.model.fields,field_description:account_usability.field_product_supplierinfo__purchase_price_type
#: model:ir.model.fields,field_description:account_usability.field_product_template__purchase_price_type
msgid "Purchase Price Type"
msgstr "Type de prix dachat"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__partner_bank_id
#: model:ir.model.fields,field_description:account_usability.field_account_move__partner_bank_id
msgid "Recipient Bank"
msgstr "Compte bancaire destinataire"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_line__reconcile_string
msgid "Reconcile"
msgstr "Lettrer"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__ref
#: model:ir.model.fields,field_description:account_usability.field_account_move__ref
#: model:ir.model.fields,field_description:account_usability.field_account_payment__ref
msgid "Reference"
msgstr "Référence"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_move_reversal__date
msgid "Reversal date"
msgstr "Date d'extourne"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__sale_dates
#: model:ir.model.fields,field_description:account_usability.field_account_move__sale_dates
#: model:ir.model.fields,field_description:account_usability.field_account_payment__sale_dates
msgid "Sale Dates"
msgstr "Dates de vente"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_product_product__sale_price_type
#: model:ir.model.fields,field_description:account_usability.field_product_template__sale_price_type
msgid "Sale Price Type"
msgstr "Type de prix de vente"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_res_partner__invoice_warn
#: model:ir.model.fields,help:account_usability.field_res_users__invoice_warn
msgid ""
"Selecting the \"Warning\" option will notify user with the message, "
"Selecting \"Blocking Message\" will throw an exception with the message and "
"block the flow. The Message has to be written in the next field."
msgstr ""
"Sélectionner l'option 'Avertissement' notifiera l'utilisateur avec le "
"Message. Sélectionner 'Message Bloquant' lancera une exception avec le "
"message et bloquera le flux. Le Message doit être encodé dans le champ "
"suivant."
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_invoice_filter
msgid "Sent"
msgstr "Envoyé"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement__start_date
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_search
msgid "Start Date"
msgstr "Date de Début"
#. module: account_usability
#: model:ir.model,name:account_usability.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Liste prix fournisseur"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.product_supplierinfo_tree_view
msgid "Tax"
msgstr "Taxe"
#. module: account_usability
#: code:addons/account_usability/models/product.py:0
#, python-format
msgid "Tax excl."
msgstr "HT"
#. module: account_usability
#: code:addons/account_usability/models/product.py:0
#, python-format
msgid "Tax incl."
msgstr "TTC"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_move_line__balance
msgid ""
"Technical field holding the debit - credit in order to open meaningful "
"graph views from reports"
msgstr ""
"Champ technique égal à 'débit - crédit', utilisé pour les vues graphes dans "
"les rapports"
#. module: account_usability
#: code:addons/account_usability/wizard/account_group_generate.py:0
#, python-format
msgid ""
"The code of account '%s' is %d caracters. It cannot be inferior to level "
"(%d)."
msgstr ""
"Le code du compte '%s' fait %d caractères. Il ne peut pas être de niveau "
"inférieur à (%d)."
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_res_partner__property_account_position_id
#: model:ir.model.fields,help:account_usability.field_res_users__property_account_position_id
msgid ""
"The fiscal position determines the taxes/accounts used for this contact."
msgstr ""
"La position fiscale détermine les taxes / comptes utilisés pour ce contact."
#. module: account_usability
#: code:addons/account_usability/wizard/account_group_generate.py:0
#, python-format
msgid "The level must be >= 1."
msgstr "Le niveau doit être >= 1."
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_bank_statement_line__sale_dates
#: model:ir.model.fields,help:account_usability.field_account_move__sale_dates
#: model:ir.model.fields,help:account_usability.field_account_payment__sale_dates
msgid ""
"This information appear on invoice qweb report (you may use it for your "
"own report)"
msgstr ""
"Cette information apparait sur le rapport qweb de la facture (vous "
"pouvez les utiliser pour votre propre rapport)"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_group_generate_form
msgid ""
"This wizard is designed to auto-generate account groups from the chart of "
"account."
msgstr ""
"Cet assistant est conçu pour générer automatiquement les groupes de comptes "
"à partir du plan comptable."
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.account_invoice_mark_sent_form
msgid ""
"This wizard will mark as <i>sent</i> all the selected posted invoices."
msgstr ""
"Cet assistant marquera comme <i>envoyées</i> toutes les factures "
"sélectionnées et comptabilisées."
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_invoice_filter
msgid "To Send"
msgstr "À envoyer"
#. module: account_usability
#: model:ir.model.fields,field_description:account_usability.field_account_bank_statement_line__amount_total
#: model:ir.model.fields,field_description:account_usability.field_account_move__amount_total
#: model:ir.model.fields,field_description:account_usability.field_account_payment__amount_total
msgid "Total"
msgstr "Total"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.res_config_settings_view_form
msgid ""
"Transit account when you transfer money from a bank account of your company "
"to another bank account of your company."
msgstr ""
"Compte de transit lorsque vous transférez de l'argent d'un compte bancaire "
"de votre entreprise vers un autre compte bancaire de votre entreprise."
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_journal_search
msgid "Type"
msgstr "Type"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_form
msgid "Unreconcile All"
msgstr "Tout délettrer"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_account_move_line_filter
msgid "Unreconciled or Partially Reconciled"
msgstr "Non lettré ou partiellement lettré"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_bank_statement_form
msgid "View Journal Entry"
msgstr "Voir la pièce comptable"
#. module: account_usability
#: model_terms:ir.ui.view,arch_db:account_usability.view_move_line_tree
msgid "View Journal Entry Form"
msgstr "Voir la pièce comptable en vue formulaire"
#. module: account_usability
#: model:ir.model.fields,help:account_usability.field_account_bank_statement__hide_bank_statement_balance
#: model:ir.model.fields,help:account_usability.field_account_journal__hide_bank_statement_balance
msgid ""
"You may want to enable this option when your bank journal is generated from "
"a bank statement file that doesn't handle start/end balance (QIF for "
"instance) and you don't want to enter the start/end balance manually: it "
"will prevent the display of wrong information in the accounting dashboard "
"and on bank statements."
msgstr ""
"Vous pouvez activer cette option lorsque votre journal bancaire est généré "
"à partir d'un fichier de relevés bancaires qui ne gère pas le solde de "
"début/fin (par exemple QIF) et que vous ne souhaitez pas saisir le solde de "
"début/fin manuellement : cela empêchera l'affichage d'informations erronées "
"dans le tableau de bord comptable et sur les relevés bancaires."

View File

@@ -1,9 +0,0 @@
# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import SUPERUSER_ID, api
def migrate(cr, version):
env = api.Environment(cr, SUPERUSER_ID, {})
env["account.move.line"].update_matching_number()

View File

@@ -1,59 +0,0 @@
# Copyright 2015-2020 Akretion (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 api, models
import logging
logger = logging.getLogger(__name__)
class AccountAccount(models.Model):
_inherit = 'account.account'
@api.depends('name', 'code')
def name_get(self):
if self._context.get('account_account_show_code_only'):
res = []
for record in self:
res.append((record.id, record.code))
return res
else:
return super().name_get()
# https://github.com/odoo/odoo/issues/23040
# TODO mig to v14 ?
def fix_bank_account_types(self):
aao = self.env['account.account']
companies = self.env['res.company'].search([])
if len(companies) > 1:
self = self.sudo()
logger.info("START the script 'fix bank and cash account types'")
bank_type = self.env.ref('account.data_account_type_liquidity')
asset_type = self.env.ref('account.data_account_type_current_assets')
journals = self.env['account.journal'].search(
[('type', 'in', ('bank', 'cash'))], order='company_id')
journal_accounts_bank_type = aao
for journal in journals:
for account in [
journal.default_credit_account_id,
journal.default_debit_account_id]:
if account:
if account.user_type_id != bank_type:
account.user_type_id = bank_type.id
logger.info(
'Company %s: Account %s updated to Bank '
'and Cash type',
account.company_id.display_name, account.code)
if account not in journal_accounts_bank_type:
journal_accounts_bank_type += account
accounts = aao.search([
('user_type_id', '=', bank_type.id)], order='company_id, code')
for account in accounts:
if account not in journal_accounts_bank_type:
account.user_type_id = asset_type.id
logger.info(
'Company %s: Account %s updated to Current Asset type',
account.company_id.display_name, account.code)
logger.info("END of the script 'fix bank and cash account types'")
return True

View File

@@ -1,91 +0,0 @@
# Copyright 2015-2020 Akretion (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 api, fields, models
from odoo.tools.misc import format_date
class AccountBankStatement(models.Model):
_inherit = 'account.bank.statement'
start_date = fields.Date(
compute='_compute_dates', string='Start Date', store=True)
end_date = fields.Date(
compute='_compute_dates', string='End Date', store=True)
line_count = fields.Integer(
compute='_compute_dates', string='# of Lines', store=True)
hide_bank_statement_balance = fields.Boolean(
related='journal_id.hide_bank_statement_balance', readonly=True)
@api.depends('line_ids.date')
def _compute_dates(self):
for st in self:
dates = [line.date for line in st.line_ids]
st.start_date = dates and min(dates) or False
st.end_date = dates and max(dates) or False
st.line_count = len(dates)
def _check_balance_end_real_same_as_computed(self):
for stmt in self:
if not stmt.hide_bank_statement_balance:
super(AccountBankStatement, stmt)._check_balance_end_real_same_as_computed()
return True
@api.depends('name', 'start_date', 'end_date')
def name_get(self):
res = []
for statement in self:
name = "%s (%s => %s)" % (
statement.name,
statement.start_date and format_date(self.env, statement.start_date) or '',
statement.end_date and format_date(self.env, statement.end_date) or '')
res.append((statement.id, name))
return res
class AccountBankStatementLine(models.Model):
_inherit = 'account.bank.statement.line'
# Native order is:
# _order = 'statement_id desc, sequence, id desc'
_order = 'statement_id desc, date desc, sequence, id desc'
# Disable guessing for reconciliation
# because my experience with several customers shows that it is a problem
# in the following scenario : move line 'x' has been "guessed" by OpenERP
# to be reconciled with a statement line 'Y' at the end of the bank
# statement, but it is a mistake because it should be reconciled with
# statement line 'B' at the beginning of the bank statement
# When the user is on statement line 'B', he tries to select
# move line 'x', but it can't find it... because it is already "reserved"
# by the guess of OpenERP for statement line 'Y' ! To solve this problem,
# the user must go to statement line 'Y' and unselect move line 'x'
# and then come back on statement line 'B' and select move line 'A'...
# but non super-expert users can't do that because it is impossible to
# figure out that the fact that the user can't find move line 'x'
# is caused by this.
# Set search_reconciliation_proposition to False by default
# TODO: re-write in v10
# def get_data_for_reconciliations(
# self, cr, uid, ids, excluded_ids=None,
# search_reconciliation_proposition=False, context=None):
# # Make variable name shorted for PEP8 !
# search_rec_prop = search_reconciliation_proposition
# return super().\
# get_data_for_reconciliations(
# cr, uid, ids, excluded_ids=excluded_ids,
# search_reconciliation_proposition=search_rec_prop,
# context=context)
def show_account_move(self):
self.ensure_one()
action = self.env["ir.actions.actions"]._for_xml_id(
'account.action_move_line_form')
# Note: this action is on account.move, not account.move.line !
action.update({
'views': False,
'view_id': False,
'view_mode': 'form,tree',
'res_id': self.move_id.id,
})
return action

View File

@@ -1,26 +0,0 @@
# Copyright 2015-2020 Akretion (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 api, models
class AccountIncoterms(models.Model):
_inherit = 'account.incoterms'
@api.depends('code', 'name')
def name_get(self):
res = []
for rec in self:
res.append((rec.id, '[%s] %s' % (rec.code, rec.name)))
return res
@api.model
def name_search(self, name='', args=None, operator='ilike', limit=100):
if args is None:
args = []
if name and operator == 'ilike':
recs = self.search([('code', '=ilike', name + '%')] + args, limit=limit)
if recs:
return recs.name_get()
return super().name_search(name=name, args=args, operator=operator, limit=limit)

View File

@@ -1,87 +0,0 @@
# Copyright 2015-2020 Akretion (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 api, fields, models
class AccountJournal(models.Model):
_inherit = 'account.journal'
hide_bank_statement_balance = fields.Boolean(
string='Hide and Disable Bank Statement Balance',
help="When this option is enabled, the start and end balance is "
"not displayed on the bank statement form view, and the check of "
"the end balance vs the real end balance is disabled. When you enable "
"this option, you process the statement lines without considering "
"the start/end balance and you regularly check the accounting balance "
"of the bank account vs the amount of your bank account "
"(the 2 processes are managed separately)."
)
# Used to set default user_type_id on account fields via context
account_type_current_assets_id = fields.Many2one(
'account.account.type',
default=lambda self: self.env.ref('account.data_account_type_current_assets').id)
# SQL constraint in the 'account' module: unique(code, name, company_id) !!!
_sql_constraints = [(
'code_unique', 'unique(code, company_id)',
'Another journal already has this code in this company!')]
@api.depends(
'name', 'currency_id', 'company_id', 'company_id.currency_id', 'code')
def name_get(self):
res = []
if self._context.get('journal_show_code_only'):
for journal in self:
res.append((journal.id, journal.code))
return res
else:
for journal in self:
name = "[%s] %s" % (journal.code, journal.name)
if (
journal.currency_id and
journal.currency_id != journal.company_id.currency_id):
name = "%s (%s)" % (name, journal.currency_id.name)
res.append((journal.id, name))
return res
def open_outstanding_payments(self):
self.ensure_one()
action = self.env["ir.actions.actions"]._for_xml_id(
"account.action_account_moves_all")
action['domain'] = [
('account_id', 'in', (self.payment_debit_account_id.id, self.payment_credit_account_id.id)),
('journal_id', '=', self.id),
('display_type', 'not in', ('line_section', 'line_note')),
('parent_state', '!=', 'cancel'),
]
action['context'] = {
'search_default_unreconciled': True,
'search_default_posted': True,
}
return action
# @api.constrains('default_credit_account_id', 'default_debit_account_id')
# def _check_account_type_on_bank_journal(self):
# bank_acc_type = self.env.ref('account.data_account_type_liquidity')
# for jrl in self:
# if jrl.type in ('bank', 'cash'):
# if (
# jrl.default_debit_account_id and
# jrl.default_debit_account_id.user_type_id !=
# bank_acc_type):
# raise ValidationError(_(
# "On journal '%s', the default debit account '%s' "
# "should be configured with Type = 'Bank and Cash'.")
# % (jrl.display_name,
# jrl.default_debit_account_id.display_name))
# if (
# jrl.default_credit_account_id and
# jrl.default_credit_account_id.user_type_id !=
# bank_acc_type):
# raise ValidationError(_(
# "On journal '%s', the default credit account '%s' "
# "should be configured with Type = 'Bank and Cash'.")
# % (jrl.display_name,
# jrl.default_credit_account_id.display_name))

View File

@@ -1,382 +0,0 @@
# Copyright 2015-2020 Akretion (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 datetime import timedelta
import logging
from odoo import api, fields, models, _
from odoo.exceptions import UserError, ValidationError
from odoo.osv import expression
from odoo.tools import float_is_zero
from odoo.tools.misc import format_date
from odoo.tools.safe_eval import safe_eval, time
from collections import defaultdict
_logger = logging.getLogger(__name__)
class AccountMove(models.Model):
_inherit = 'account.move'
# By default, we can still modify "ref" when account move is posted
# which seems a bit lazy for me...
ref = fields.Char(states={'posted': [('readonly', True)]})
date = fields.Date(tracking=True)
invoice_date_due = fields.Date(tracking=True)
invoice_payment_term_id = fields.Many2one(tracking=True)
journal_id = fields.Many2one(tracking=True)
partner_bank_id = fields.Many2one(tracking=True)
fiscal_position_id = fields.Many2one(tracking=True)
amount_total = fields.Monetary(tracking=True)
# for invoice report
has_discount = fields.Boolean(
compute='_compute_has_discount', readonly=True)
# has_attachment is useful for those who use attachment to archive
# supplier invoices. It allows them to find supplier invoices
# that don't have any attachment
has_attachment = fields.Boolean(
compute='_compute_has_attachment',
search='_search_has_attachment', readonly=True)
sale_dates = fields.Char(
compute="_compute_sales_dates", readonly=True,
help="This information appear on invoice qweb report "
"(you may use it for your own report)")
# There is a native "blocked" field (bool) on account.move.line
# We want to have that field on invoices to improve usability
# while keeping compatibility with the standard Odoo datamodel
blocked = fields.Boolean(
compute="_compute_blocked",
inverse="_inverse_blocked",
store=True,
string="Dispute",
tracking=True,
)
@api.depends("line_ids", "line_ids.blocked")
def _compute_blocked(self):
for move in self:
move.blocked = any(
[
l.blocked
for l in move.line_ids
if l.account_id.internal_type in ("payable", "receivable")
]
)
def _inverse_blocked(self):
for move in self:
for line in move.line_ids.filtered(
lambda l: l.account_id.internal_type in ("payable", "receivable")
):
line.blocked = move.blocked
def _compute_has_discount(self):
prec = self.env['decimal.precision'].precision_get('Discount')
for inv in self:
has_discount = False
for line in inv.invoice_line_ids:
if not line.display_type and not float_is_zero(line.discount, precision_digits=prec):
has_discount = True
break
inv.has_discount = has_discount
def _compute_has_attachment(self):
iao = self.env['ir.attachment']
for move in self:
if iao.search_count([
('res_model', '=', 'account.move'),
('res_id', '=', move.id),
('type', '=', 'binary'),
('company_id', '=', move.company_id.id)]):
move.has_attachment = True
else:
move.has_attachment = False
def _search_has_attachment(self, operator, value):
att_inv_ids = {}
if operator == '=':
search_res = self.env['ir.attachment'].search_read([
('res_model', '=', 'account.move'),
('type', '=', 'binary'),
('res_id', '!=', False)], ['res_id'])
for att in search_res:
att_inv_ids[att['res_id']] = True
res = [('id', value and 'in' or 'not in', list(att_inv_ids))]
return res
# when you have an invoice created from a lot of sale orders, the 'name'
# field is very large, which makes the name_get() of that invoice very big
# which screws-up the form view of that invoice because of the link at the
# top of the screen
# That's why we have to cut the name_get() when it's too long
def name_get(self):
old_res = super().name_get()
res = []
for old_re in old_res:
name = old_re[1]
if name and len(name) > 100:
# nice cut
name = '%s ...' % ', '.join(name.split(', ')[:3])
# if not enough, hard cut
if len(name) > 120:
name = '%s ...' % old_re[1][:120]
res.append((old_re[0], name))
return res
# I really hate to see a "/" in the 'name' field of the account.move.line
# generated from customer invoices linked to the partners' account because:
# 1) the label of an account move line is an important field, we can't
# write a rubbish '/' in it !
# 2) the 'name' field of the account.move.line is used in the overdue
# letter, and '/' is not meaningful for our customer !
# TODO mig to v12
# def action_move_create(self):
# res = super().action_move_create()
# for inv in self:
# self._cr.execute(
# "UPDATE account_move_line SET name= "
# "CASE WHEN name='/' THEN %s "
# "ELSE %s||' - '||name END "
# "WHERE move_id=%s", (inv.number, inv.number, inv.move_id.id))
# self.invalidate_cache()
# return res
def _reverse_moves(self, default_values_list=None, cancel=False):
reverse_moves = super()._reverse_moves(
default_values_list=default_values_list, cancel=cancel)
# In the simple scenario 1 invoice -> 1 refund, we add a message in the chatter
# of the invoice and in the chatter of the refund
if len(self) == 1 and len(reverse_moves) == 1:
self.message_post(body=_("A reverse journal entry <a href=# data-oe-model=account.move data-oe-id=%d>%s</a> has been generated.") % (reverse_moves.id, reverse_moves.display_name))
reverse_moves.message_post(body=_("This journal entry has been generated as the reverse of <a href=# data-oe-model=account.move data-oe-id=%d>%s</a>.") % (self.id, self.display_name))
return reverse_moves
def delete_lines_qty_zero(self):
lines = self.env['account.move.line'].search([
('display_type', '=', False),
('move_id', 'in', self.ids),
('quantity', '=', 0)])
lines.unlink()
return True
# for report
def py3o_lines_layout(self):
self.ensure_one()
res = []
has_sections = False
subtotal = 0.0
sign = self.move_type == 'out_refund' and -1 or 1
# Warning: the order of invoice line is forced in the view
# <tree editable="bottom" default_order="sequence, date desc, move_name desc, id"
# it's not the same as the _order in the class AccountMoveLine
lines = self.env['account.move.line'].search([('exclude_from_invoice_tab', '=', False), ('move_id', '=', self.id)], order="sequence, date desc, move_name desc, id")
for line in lines:
if line.display_type == 'line_section':
# insert line
if has_sections:
res.append({'subtotal': subtotal})
subtotal = 0.0 # reset counter
has_sections = True
else:
if not line.display_type:
subtotal += line.price_subtotal * sign
res.append({'line': line})
if has_sections: # insert last subtotal line
res.append({'subtotal': subtotal})
# res:
# [
# {'line': account_invoice_line(1) with display_type=='line_section'},
# {'line': account_invoice_line(2) without display_type},
# {'line': account_invoice_line(3) without display_type},
# {'line': account_invoice_line(4) with display_type=='line_note'},
# {'subtotal': 8932.23},
# ]
return res
def _compute_sales_dates(self):
""" French law requires to set sale order dates into invoice
returned string: "sale1 (date1), sale2 (date2) ..."
"""
for move in self:
sales = move.invoice_line_ids.mapped(
'sale_line_ids').mapped('order_id')
dates = ["%s (%s)" % (
x.name, format_date(move.env, x.date_order))
for x in sales]
move.sale_dates = ", ".join(dates)
# allow to manually create moves not only in general journals,
# but also in cash journal and check journals (= bank journals not linked to a bank account)
@api.depends('company_id', 'invoice_filter_type_domain')
def _compute_suitable_journal_ids(self):
for move in self:
if move.invoice_filter_type_domain:
super(AccountMove, move)._compute_suitable_journal_ids()
else:
company_id = move.company_id.id or self.env.company.id
domain = expression.AND([
[('company_id', '=', company_id)],
expression.OR([
[('type', 'in', ('general', 'cash'))],
[('type', '=', 'bank'), ('bank_account_id', '=', False)]
])
])
move.suitable_journal_ids = self.env['account.journal'].search(domain)
def button_draft(self):
# Get report name before reset to draft because name can be different.
report_names = self._get_invoice_attachment_name()
super().button_draft()
# Delete attached pdf invoice
if report_names:
for move in self.filtered(lambda x: x.move_type in ('out_invoice', 'out_refund')):
# The pb is that the filename is dynamic and related to move.state
# in v12, the feature was native and they used that kind of code:
# with invoice.env.do_in_draft():
# invoice.number, invoice.state = invoice.move_name, 'open'
# attachment = self.env.ref('account.account_invoices').retrieve_attachment(invoice)
# But do_in_draft() doesn't exists in v14
# If you know how we could do that, please update the code below
attachment = self.env['ir.attachment'].search([
('name', 'in', report_names[move.id]),
('res_id', '=', move.id),
('res_model', '=', self._name),
('type', '=', 'binary'),
], limit=1)
if attachment:
attachment.unlink()
def _get_invoice_attachment_name(self):
report_names = defaultdict(list)
try:
report_invoice = self.env['ir.actions.report']._get_report_from_name('account.report_invoice')
except IndexError:
report_invoice = False
if report_invoice and report_invoice.attachment:
for move in self.filtered(lambda x: x.move_type in ('out_invoice', 'out_refund')):
report_names[move.id].append(safe_eval(report_invoice.print_report_name, {'object': self, 'time': time}))
try:
report_invoice = self.env['ir.actions.report']._get_report_from_name('account.report_invoice_with_payments')
except IndexError:
report_invoice = False
if report_invoice and report_invoice.attachment:
for move in self.filtered(lambda x: x.move_type in ('out_invoice', 'out_refund')):
report_names[move.id].append(safe_eval(report_invoice.print_report_name, {'object': self, 'time': time}))
return report_names
def _get_accounting_date(self, invoice_date, has_tax):
# On vendor bills/refunds, we want date = invoice_date unless
# we have a company tax_lock_date and the invoice has taxes
# and invoice_date <= tax_lock_date
date = super()._get_accounting_date(invoice_date, has_tax)
if self.is_purchase_document(include_receipts=True):
tax_lock_date = self.company_id.tax_lock_date
if invoice_date and tax_lock_date and has_tax and invoice_date <= tax_lock_date:
invoice_date = tax_lock_date + timedelta(days=1)
date = invoice_date
return date
# I don't use account_invoice_supplier_ref_unique because it adds
# a field supplier_invoice_number on account.move instead of using the native field
# cf https://github.com/OCA/account-invoicing/issues/1484
# So I take inspiration from the code of account_invoice_supplier_ref_unique
# but I use the native "ref" field
@api.constrains("ref", "partner_id")
def _check_in_invoice_ref_unique_insensitive(self):
for move in self:
if move.ref and move.is_purchase_document(
include_receipts=True
):
in_invoice_same_ref = self.search(
[
("commercial_partner_id", "=", move.commercial_partner_id.id),
("move_type", "in", ("in_invoice", "in_refund")),
("company_id", "=", move.company_id.id),
("ref", "=ilike", move.ref),
("id", "!=", move.id),
],
limit=1,
)
if in_invoice_same_ref:
raise ValidationError(
_(
"An invoice already exists in Odoo with the same "
"bill reference '%s' for the same supplier '%s': %s."
)
% (
in_invoice_same_ref.ref,
in_invoice_same_ref.partner_id.display_name,
in_invoice_same_ref.display_name,
)
)
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
# Native order:
# _order = "date desc, move_name desc, id"
# Problem: when you manually create a journal entry, the
# order of the lines is inverted when you save ! It is quite annoying for
# the user...
_order = "date desc, id asc"
# In the 'account' module, we have related stored field for:
# name (move_name), date, ref, state (parent_state),
# journal_id, company_id, payment_id, statement_line_id,
account_reconcile = fields.Boolean(related='account_id.reconcile')
full_reconcile_id = fields.Many2one(string='Full Reconcile')
matched_debit_ids = fields.One2many(string='Partial Reconcile Debit')
matched_credit_ids = fields.One2many(string='Partial Reconcile Credit')
# for optional display in tree view
product_barcode = fields.Char(related='product_id.barcode', string="Product Barcode")
def show_account_move_form(self):
self.ensure_one()
action = self.env["ir.actions.actions"]._for_xml_id(
'account.action_move_line_form')
action.update({
'res_id': self.move_id.id,
'view_id': False,
'views': False,
'view_mode': 'form,tree',
})
return action
def update_matching_number(self):
records = self.search([("matching_number", "=", "P")])
_logger.info(f"Update partial reconcile number for {len(records)} lines")
records._compute_matching_number()
def _compute_matching_number(self):
# TODO maybe it will be better to have the same maching_number for
# all partial so it will be easier to group by
super()._compute_matching_number()
for record in self:
if record.matching_number == "P":
record.matching_number = ", ".join([
"a%d" % pr.id
for pr in record.matched_debit_ids + record.matched_credit_ids
])
def _get_computed_name(self):
# This is useful when you want to have the product code in a dedicated
# column in your customer invoice report
# The same ir.config_parameter is used in sale_usability,
# purchase_usability and account_usability
no_product_code_param = self.env['ir.config_parameter'].sudo().get_param(
'usability.line_name_no_product_code')
if no_product_code_param and no_product_code_param == 'True':
self = self.with_context(display_default_code=False)
return super()._get_computed_name()
def reconcile(self):
"""Explicit error message if unposted lines"""
unposted_ids = self.filtered(lambda l: l.move_id.state != "posted")
if unposted_ids:
m = _("Please post the following entries before reconciliation :")
sep = "\n - "
unpost = sep.join([am.display_name for am in unposted_ids.move_id])
raise UserError(m + sep + unpost)
return super().reconcile()

View File

@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2020 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_type_tree" model="ir.ui.view">
<field name="name">account_usability.account_type_tree</field>
<field name="model">account.account.type</field>
<field name="inherit_id" ref="account.view_account_type_tree" />
<field name="arch" type="xml">
<field name="type" position="after">
<field name="include_initial_balance" optional="show"/>
</field>
</field>
</record>
</odoo>

View File

@@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2021 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_analytic_account_list" model="ir.ui.view">
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_list"/>
<field name="arch" type="xml">
<field name="code" position="after">
<field name="group_id" optional="show"/>
</field>
</field>
</record>
<record id="view_account_analytic_account_search" model="ir.ui.view">
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_search"/>
<field name="arch" type="xml">
<filter name="associatedpartner" position="before">
<filter name="group_groupby" string="Group" context="{'group_by': 'group_id'}"/>
</filter>
</field>
</record>
</odoo>

View File

@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 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="account_analytic_group_tree_view" model="ir.ui.view">
<field name="model">account.analytic.group</field>
<field name="inherit_id" ref="analytic.account_analytic_group_tree_view"/>
<field name="arch" type="xml">
<field name="name" position="after">
<field name="parent_id" optional="show"/>
</field>
</field>
</record>
</odoo>

View File

@@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018-2020 Akretion (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="account_invoice_report_tree" model="ir.ui.view">
<field name="name">usability.account.invoice.report.tree</field>
<field name="model">account.invoice.report</field>
<field name="arch" type="xml">
<tree string="Invoices Analysis">
<field name="move_id"/>
<field name="journal_id" optional="hide"/>
<field name="company_id" optional="hide" groups="base.group_multi_company"/>
<field name="invoice_date"/>
<field name="invoice_date_due"/>
<field name="move_type"/>
<field name="commercial_partner_id"/>
<field name="partner_id" optional="hide"/>
<field name="country_id" optional="hide"/>
<field name="industry_id" optional="hide"/>
<field name="invoice_user_id"/>
<field name="fiscal_position_id" optional="hide"/>
<field name="product_id"/>
<field name="product_categ_id" optional="hide"/>
<field name="account_id" optional="hide"/>
<field name="analytic_account_id" optional="hide" groups="analytic.group_analytic_accounting"/>
<field name="quantity" sum="1"/>
<field name="product_uom_id" groups="uom.group_uom"/>
<field name="price_subtotal" sum="1"/>
<field name="state"/>
<field name="payment_state" optional="hide"/>
</tree>
</field>
</record>
<record id="account.action_account_invoice_report_all_supp" model="ir.actions.act_window">
<field name="context">{'search_default_current': 1, 'search_default_supplier': 1, 'group_by': ['invoice_date']}</field> <!-- Remove group_by_no_leaf, which breaks tree view -->
<field name="view_mode">pivot,graph</field>
</record>
<record id="account.action_account_invoice_report_all" model="ir.actions.act_window">
<field name="context">{'search_default_current': 1, 'search_default_customer': 1, 'group_by': ['invoice_date']}</field> <!-- Remove group_by_no_leaf, which breaks tree view -->
<field name="view_mode">pivot,graph</field>
</record>
<record id="view_account_invoice_report_pivot" model="ir.ui.view">
<field name="name">usability.account.invoice.report</field>
<field name="model">account.invoice.report</field>
<field name="inherit_id" ref="account.view_account_invoice_report_pivot"/>
<field name="arch" type="xml">
<pivot position="attributes">
<attribute name="disable_linking"></attribute>
</pivot>
</field>
</record>
</odoo>

View File

@@ -1,175 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2020 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_move_form" model="ir.ui.view">
<field name="name">account_usability.account.move.form</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<field name="fiscal_position_id" position="attributes">
<attribute name="widget">selection</attribute>
</field>
<field name="invoice_incoterm_id" position="attributes">
<attribute name="widget">selection</attribute>
</field>
<button name="action_register_payment" position="attributes">
<attribute name="class">btn-default</attribute>
</button>
<button name="action_register_payment" position="before">
<button name="%(account.account_invoices)d" type="action" string="Print" attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
</button>
<button name="preview_invoice" position="attributes">
<attribute name="attrs">{'invisible': 1}</attribute>
</button>
<!-- move sent field and make it visible -->
<field name="is_move_sent" position="replace"/>
<field name="invoice_origin" position="attributes">
<attribute name="invisible">0</attribute>
</field>
<field name="invoice_origin" position="after">
<field name="is_move_sent" attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund'))]}"/>
</field>
<xpath expr="//field[@name='line_ids']/tree/field[@name='analytic_account_id']" position="attributes">
<attribute name="optional">show</attribute>
</xpath>
<xpath expr="//field[@name='line_ids']/tree/field[@name='currency_id']" position="attributes">
<attribute name="optional">show</attribute>
</xpath>
<xpath expr="//field[@name='line_ids']/tree/field[@name='tax_tag_ids']" position="after">
<field name="matching_number" optional="show"/>
</xpath>
<xpath expr="//field[@name='invoice_line_ids']/tree/field[@name='product_id']" position="after">
<field name="product_barcode" optional="hide"/>
</xpath>
<field name="auto_post" position="before">
<field name="blocked"/>
</field>
<div role="alert" position="after">
<div id="warn_blocked" groups="account.group_account_invoice,account.group_account_readonly"
class="alert alert-warning" role="alert" style="margin-bottom:0px;"
attrs="{'invisible': ['|', ('move_type', 'not in', ('in_invoice', 'in_refund', 'out_invoice', 'out_refund')), ('blocked', '=', False)]}">
This <field name="move_type"/> is marked as <b>disputed</b>.
</div>
</div>
</field>
</record>
<record id="view_invoice_tree" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_invoice_tree"/>
<field name="arch" type="xml">
<field name="amount_residual_signed" position="attributes">
<attribute name="optional">show</attribute>
</field>
</field>
</record>
<record id="view_account_invoice_filter" model="ir.ui.view">
<field name="name">account_usability.account.move.search</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_account_invoice_filter"/>
<field name="arch" type="xml">
<filter name="due_date" position="after">
<separator/>
<filter name="to_send" string="To Send" domain="[('is_move_sent', '=', False), ('state', '=', 'posted'), ('move_type', 'in', ('out_invoice', 'out_refund'))]"/>
<filter name="sent" string="Sent" domain="[('is_move_sent', '=', True), ('move_type', 'in', ('out_invoice', 'out_refund'))]"/>
<separator/>
<filter name="no_attachment" string="Missing Attachment" domain="[('has_attachment', '=', False)]"/>
<separator/>
<filter name="dispute" string="Dispute" domain="[('blocked', '=', True)]"/>
</filter>
<filter name="salesperson" position="before">
<filter name="commercial_partner_groupby" string="Commercial Partner" context="{'group_by': 'commercial_partner_id'}"/>
</filter>
<filter name="status" position="after">
<filter name="payment_state_groupby" string="Payment Status" context="{'group_by': 'payment_state'}"/>
</filter>
</field>
</record>
<record id="view_move_line_form" model="ir.ui.view">
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form"/>
<field name="arch" type="xml">
<!-- The field 'blocked' is alone in it's block
We don't want to display an empty block, so we put the attrs on the group
The drawback of this is that, if someone added a field in that group,
he won't see the field when internal_type is not payable/receivable -->
<xpath expr="//field[@name='blocked']/.." position="attributes">
<attribute name="attrs">{'invisible': [('account_internal_type', 'not in', ('payable', 'receivable'))]}</attribute>
</xpath>
<field name="company_id" position="after">
<field name="account_internal_type" invisible="1"/>
</field>
</field>
</record>
<record id="view_move_line_tree" model="ir.ui.view">
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_tree"/>
<field name="arch" type="xml">
<field name="matching_number" position="after">
<button title="View Journal Entry Form" type="object" name="show_account_move_form" icon="fa-arrow-right"/>
</field>
<field name="credit" position="after">
<field name="balance" sum="Balance" optional="show"/>
</field>
</field>
</record>
<record id="view_account_move_line_filter" model="ir.ui.view">
<field name="name">account_usability.account_move_line_search</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_account_move_line_filter"/>
<field name="arch" type="xml">
<filter name="unposted" position="before">
<filter name="current_year" string="Current Year" domain="[('date', '&gt;=', (context_today().strftime('%Y-01-01'))), ('date', '&lt;=', (context_today().strftime('%Y-12-31')))]"/>
<filter name="previous_year" string="Previous Year" domain="[('date', '&gt;=', (context_today() + relativedelta(day=1, month=1, years=-1)).strftime('%Y-%m-%d')), ('date', '&lt;=', (context_today() + relativedelta(day=31, month=12, years=-1)).strftime('%Y-%m-%d'))]"/>
<separator/>
</filter>
<field name="partner_id" position="after">
<field name="matching_number" />
<field name="debit" filter_domain="['|', ('debit', '=', self), ('credit', '=', self)]" string="Debit or Credit"/>
</field>
<filter name="unreconciled" position="before">
<filter name="reconciled" string="Fully Reconciled" domain="[('account_id.reconcile', '=', True), ('full_reconcile_id', '!=', False)]"/>
</filter>
<filter name="unreconciled" position="attributes">
<attribute name="string">Unreconciled or Partially Reconciled</attribute>
</filter>
<field name="name" position="attributes">
<attribute name="string">Label, Reference, Account or Partner</attribute>
</field>
<field name="name" position="before">
<field name="move_id" position="move"/>
</field>
<field name="partner_id" position="attributes">
<attribute name="domain">['|', ('parent_id', '=', False), ('is_company', '=', True)]</attribute>
</field>
</field>
</record>
<record id="view_move_line_pivot" model="ir.ui.view">
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_pivot"/>
<field name="arch" type="xml">
<!-- By default, date is split by month... but if you've been using Odoo for several years,
the pivot table becomes very big by default: so we split by year -->
<field name="date" position="attributes">
<attribute name="interval">year</attribute>
</field>
</field>
</record>
<record id="account.action_move_journal_line" model="ir.actions.act_window">
<field name="context">{'default_move_type': 'entry', 'view_no_maturity': True}</field>
<!-- Remove 'search_default_misc_filter': 1 -->
</record>
</odoo>

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2022 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_reconcile_model_form" model="ir.ui.view">
<field name="model">account.reconcile.model</field>
<field name="inherit_id" ref="account.view_account_reconcile_model_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name='line_ids']/tree/field[@name='analytic_account_id']" position="attributes">
<attribute name="optional">show</attribute> <!-- native value: hide -->
</xpath>
</field>
</record>
</odoo>

View File

@@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2020 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="res_config_settings_view_form" model="ir.ui.view">
<field name="name">account_usability account config page</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@id='bank_cash']" position="inside">
<div class="col-xs-12 col-md-6 o_setting_box" id="transfer_account">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<label for="transfer_account_id"/>
<div class="text-muted">
Transit account when you transfer money from a bank account of your company to another bank account of your company.
</div>
<field name="transfer_account_id"/>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View File

@@ -1,30 +0,0 @@
# Copyright 2018-2020 Akretion France (https://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 api, models, _
from dateutil.relativedelta import relativedelta
from odoo.exceptions import UserError
class AccountMoveReversal(models.TransientModel):
_inherit = 'account.move.reversal'
# Set default reversal date to original move + 1 day
# and raise error if original move has already been reversed
# WARNING: this wizard is also used to generate refunds
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
assert self._context.get('active_model') == 'account.move'
amo = self.env['account.move']
moves = amo.browse(self._context['active_ids'])
if len(moves) == 1 and moves.move_type not in ('out_invoice', 'in_invoice'):
res['date'] = moves.date + relativedelta(days=1)
reversed_move = amo.search([('reversed_entry_id', 'in', moves.ids)], limit=1)
if reversed_move:
raise UserError(_(
"Move '%s' has already been reversed by move '%s'.") % (
reversed_move.reversed_entry_id.display_name,
reversed_move.display_name))
return res

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 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>
<!-- When you change the date, it resets the amount via the onchange
So, in the view, the date should be BEFORE the amount -->
<record id="view_account_payment_register_form" model="ir.ui.view">
<field name="model">account.payment.register</field>
<field name="inherit_id" ref="account.view_account_payment_register_form"/>
<field name="arch" type="xml">
<label for="amount" position="before">
<field name="payment_date" position="move"/>
</label>
</field>
</record>
</odoo>

View File

@@ -1,12 +0,0 @@
# Copyright 2015-2020 Akretion (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
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
transfer_account_id = fields.Many2one(
related='company_id.transfer_account_id', readonly=False)

View File

@@ -2,10 +2,13 @@
Account Usability
=================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:dbf367e7cf8330c803622d0c171cd10e128344d318466d6e37ad7b0fc812e152
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -14,10 +17,10 @@ Account Usability
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-akretion%2Fodoo--usability-lightgray.png?logo=github
:target: https://github.com/akretion/odoo-usability/tree/12.0/account_usability
:target: https://github.com/akretion/odoo-usability/tree/18.0/account_usability_akretion
:alt: akretion/odoo-usability
|badge1| |badge2| |badge3|
|badge1| |badge2| |badge3|
This modules adds the following functions:
@@ -52,7 +55,6 @@ This modules adds the following functions:
* don't attach PDF upon invoice report generation on supplier invoices/refunds
* Add filter on debit and credit amount for Move Lines
* Add supplier invoice number in invoice tree view
* Add date in outstanding payment widget on invoice form view (requires `odoo PR 84180 <https://github.com/odoo/odoo/pull/84180>`_)
Together with this module, I recommend the use of the following modules:
@@ -70,8 +72,8 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/akretion/odoo-usability/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/akretion/odoo-usability/issues/new?body=module:%20account_usability%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/akretion/odoo-usability/issues/new?body=module:%20account_usability_akretion%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
@@ -92,6 +94,6 @@ Contributors
Maintainers
~~~~~~~~~~~
This module is part of the `akretion/odoo-usability <https://github.com/akretion/odoo-usability/tree/12.0/account_usability>`_ project on GitHub.
This module is part of the `akretion/odoo-usability <https://github.com/akretion/odoo-usability/tree/18.0/account_usability_akretion>`_ project on GitHub.
You are welcome to contribute.

View File

@@ -0,0 +1,3 @@
from . import models
from . import wizards
# from .hooks import post_init_hook

View File

@@ -0,0 +1,42 @@
# Copyright 2015-2024 Akretion France (https://www.akretion.com)
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Account Usability',
'version': '18.0.1.0.0',
'category': 'Accounting & Finance',
'license': 'AGPL-3',
'summary': 'Small usability enhancements in account module',
'author': 'Akretion',
'website': 'https://github.com/akretion/odoo-usability',
'depends': [
'account',
'base_usability_akretion', # needed only to access base_usability.group_nobody
],
'data': [
'views/account_account.xml',
'views/account_group.xml',
# 'views/account_bank_statement.xml',
'views/account_invoice_report.xml',
'views/account_journal.xml',
'views/account_move.xml',
'views/account_move_line.xml',
'views/account_payment.xml',
'views/account_analytic_line.xml',
'views/account_menu.xml',
'views/account_tax.xml',
# 'views/product.xml', # TODO
'views/res_company.xml',
# 'views/account_report.xml',
'wizards/account_invoice_mark_sent_view.xml',
# 'wizards/account_group_generate_view.xml',
'wizards/account_move_reversal.xml',
'security/ir.model.access.csv',
# 'report/invoice_report.xml', # TODO
"views/res_partner.xml",
],
# 'qweb': ['static/src/xml/account_payment.xml'],
'installable': True,
# "post_init_hook": "post_init_hook",
}

View File

@@ -0,0 +1,15 @@
diff --git a/addons/account/__init__.py b/addons/account/__init__.py
index 138004b0849..07e6475f760 100644
--- a/addons/account/__init__.py
+++ b/addons/account/__init__.py
@@ -45,7 +45,9 @@ def _auto_install_l10n(env):
module_list.append('l10n_de_skr03')
module_list.append('l10n_de_skr04')
else:
- if env['ir.module.module'].search([('name', '=', 'l10n_' + country_code.lower())]):
+ if env['ir.module.module'].search([('name', '=', 'l10n_%s_oca' % country_code.lower())]):
+ module_list.append('l10n_%s_oca' % country_code.lower())
+ elif env['ir.module.module'].search([('name', '=', 'l10n_' + country_code.lower())]):
module_list.append('l10n_' + country_code.lower())
else:
module_list.append('l10n_generic_coa')

View File

@@ -2,8 +2,8 @@
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import SUPERUSER_ID, api
# from odoo import SUPERUSER_ID, api
def post_init_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
env["account.move.line"].update_matching_number()
# def post_init_hook(cr, registry):
# env = api.Environment(cr, SUPERUSER_ID, {})
# env["account.move.line"].update_matching_number()

View File

@@ -0,0 +1,610 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_usability_akretion
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-07 14:47+0000\n"
"PO-Revision-Date: 2024-07-07 14:47+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/wizard/account_group_generate.py:0
#, python-format
msgid ""
"%d account groups already exists in company '%s'. This wizard is designed to"
" generate account groups from scratch."
msgstr ""
"%d groupes de comptes existent déjà dans la société '%s'. Cet assistant "
"est conçu pour créer des groupes de comptes à partir de zéro."
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/models/account_move.py:0
#, python-format
msgid ""
"A reverse journal entry <a href=# data-oe-model=account.move data-oe-"
"id=%d>%s</a> has been generated."
msgstr ""
"Une extourne <a href=# data-oe-model=account.move data-oe-"
"id=%d>%s</a> a été générée."
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/wizard/account_move_reversal.py:0
#, python-format
msgid "%s reversed by %s"
msgstr "%s extourné par %s"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_move_reversal
msgid ""
"You are about to reverse entries that have already been reversed or partially reversed (refund). Make sure it is intented.\n"
" Already reversed entries are the following :"
msgstr "Vous êtes sur le point d'extourner une pièce comptable déjà extournée, ou partiellement extournée (avoir). Vérifiez que c'est bien ce que vous souhaitez faire.\n"
" Les pièces comptables déjà extournées sont les suivantes :"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_account
msgid "Account"
msgstr "Compte"
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/wizard/account_group_generate.py:0
#, python-format
msgid "Account Groups"
msgstr "Groupes de comptes"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_move_reversal
msgid "Account Move Reversal"
msgstr "Extourne de l'écriture comptable"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move_line__account_reconcile
msgid "Allow Reconciliation"
msgstr "Autoriser le lettrage"
#. module: account_usability_akretion
#: model:ir.model.constraint,message:account_usability_akretion.constraint_account_analytic_account_code_company_unique
msgid ""
"An analytic account with the same code already exists in the same company!"
msgstr ""
"Un compte analytique avec le même code existe déjà dans la même société !"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_analytic_account
msgid "Analytic Account"
msgstr "Compte analytique"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_move_form
msgid "Are you sure you want to cancel this invoice?"
msgstr "Êtes-vous sûr de vouloir annuler cette facture ?"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_move_form
msgid "Are you sure you want to cancel this journal entry?"
msgstr "Êtes-vous sûr de vouloir annuler cette pièce comptable ?"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_res_partner_bank
#: model:ir.ui.menu,name:account_usability_akretion.res_partner_bank_account_config_menu
msgid "Bank Accounts"
msgstr "Comptes bancaires"
#. module: account_usability_akretion
#: model:ir.ui.menu,name:account_usability_akretion.res_bank_account_config_menu
msgid "Banks"
msgstr "Banques"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.account_group_generate_form
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.account_invoice_mark_sent_form
msgid "Cancel"
msgstr "Annuler"
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_account_move_line__account_reconcile
msgid ""
"Check this box if this account allows invoices & payments matching of "
"journal items."
msgstr ""
"Cochez cette case si ce compte permet de faire du lettrage entre "
"factures et paiements."
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_search
msgid "Code"
msgstr ""
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_invoice_filter
msgid "Commercial Partner"
msgstr "Partenaire commercial"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_res_company
msgid "Companies"
msgstr "Sociétés"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__company_id
msgid "Company"
msgstr "Société"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_res_partner
msgid "Contact"
msgstr ""
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__create_uid
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_invoice_mark_sent__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__create_date
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_invoice_mark_sent__create_date
msgid "Created on"
msgstr "Créé le"
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_account_move_line__matched_credit_ids
msgid "Credit journal items that are matched with this journal item."
msgstr ""
"Écritures comptables au crédit qui sont lettrées avec cette écriture comptable."
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_account_move_line__matched_debit_ids
msgid "Debit journal items that are matched with this journal item."
msgstr ""
"Écritures comptables au débit qui sont lettrées avec cette écriture comptable."
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_move_line_filter
msgid "Debit or Credit"
msgstr "Débit ou crédit"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__display_name
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_invoice_mark_sent__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__blocked
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__blocked
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__blocked
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_invoice_filter
msgid "Dispute"
msgstr "Litige"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__invoice_date_due
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__invoice_date_due
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__invoice_date_due
msgid "Due Date"
msgstr "Date d'échéance"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__fiscal_position_id
#: model:ir.model.fields,field_description:account_usability_akretion.field_res_partner__property_account_position_id
#: model:ir.model.fields,field_description:account_usability_akretion.field_res_users__property_account_position_id
msgid "Fiscal Position"
msgstr "Position fiscale"
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_account_bank_statement_line__fiscal_position_id
#: model:ir.model.fields,help:account_usability_akretion.field_account_move__fiscal_position_id
#: model:ir.model.fields,help:account_usability_akretion.field_account_payment__fiscal_position_id
msgid ""
"Fiscal positions are used to adapt taxes and accounts for particular "
"customers or sales orders/invoices. The default value comes from the "
"customer."
msgstr ""
"Les positions fiscales sont utilisées pour adapter les taxes et les comptes "
"à des clients spécifiques ou à des bons de commande/factures. La valeur par"
" défaut provient de la fiche client."
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move_line__full_reconcile_id
msgid "Full Reconcile"
msgstr "Lettrage total"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_move_line_filter
msgid "Fully Reconciled"
msgstr "Lettré totalement"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.account_group_generate_form
msgid "Generate"
msgstr "Générer"
#. module: account_usability_akretion
#: model:ir.actions.act_window,name:account_usability_akretion.account_group_generate_action
#: model:ir.model,name:account_usability_akretion.model_account_group_generate
#: model:ir.ui.menu,name:account_usability_akretion.account_group_generate_menu
msgid "Generate Account Groups"
msgstr "Générer les groupes de comptes"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_search
msgid "Group"
msgstr "Groupe"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_journal_search
msgid "Group By"
msgstr "Regrouper par"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__has_attachment
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__has_attachment
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__has_attachment
msgid "Has Attachment"
msgstr "Possède une pièce jointe"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__has_discount
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__has_discount
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__has_discount
msgid "Has Discount"
msgstr "A une remise"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_journal__hide_bank_statement_balance
msgid "Hide and Disable Bank Statement Balance"
msgstr "Masquer et désactiver le solde du relevé de compte"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__id
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_invoice_mark_sent__id
msgid "ID"
msgstr ""
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_incoterms
msgid "Incoterms"
msgstr ""
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_account_move_line__product_barcode
msgid "International Article Number used for product identification."
msgstr ""
"Numéro d'article international utilisé pour identifier cet article."
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_res_partner__invoice_warn
#: model:ir.model.fields,field_description:account_usability_akretion.field_res_users__invoice_warn
msgid "Invoice"
msgstr "Facture"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_company_form
msgid "Invoice Legal Terms"
msgstr "Mentions légales sur les factures"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Statistiques de facturation"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_journal
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__journal_id
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__journal_id
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__journal_id
msgid "Journal"
msgstr ""
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_move
msgid "Journal Entry"
msgstr "Pièce comptable"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_move_line
msgid "Journal Item"
msgstr "Écriture comptable"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_move_line_filter
msgid "Label, Reference, Account or Partner"
msgstr "Libellé, Référence, Compte ou Partenaire"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate____last_update
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_invoice_mark_sent____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__write_uid
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_invoice_mark_sent__write_uid
msgid "Last Updated by"
msgstr "Mis à jour par"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__write_date
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_invoice_mark_sent__write_date
msgid "Last Updated on"
msgstr "Mis à jour le"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_company_form
msgid "Legal Terms"
msgstr "Mentions légales"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_res_company__static_invoice_terms
msgid "Legal Terms on Invoice"
msgstr "Mentions légales sur les factures"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__level
msgid "Level"
msgstr "Niveau"
#. module: account_usability_akretion
#: model:ir.actions.act_window,name:account_usability_akretion.account_invoice_mark_sent_action
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.account_invoice_mark_sent_form
msgid "Mark as Sent"
msgstr "Marquer comme envoyé"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_invoice_mark_sent
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.account_invoice_mark_sent_form
msgid "Mark invoices as sent"
msgstr "Marquer les factures comme envoyées"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_journal_form
msgid "Misc"
msgstr "Divers"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_invoice_filter
msgid "Missing Attachment"
msgstr "Pièce jointe manquante"
#. module: account_usability_akretion
#: model:ir.model,name:account_usability_akretion.model_account_partial_reconcile
msgid "Partial Reconcile"
msgstr "Lettrage partiel"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move_line__matched_credit_ids
msgid "Partial Reconcile Credit"
msgstr "Crédit de lettrage partiel"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move_line__matched_debit_ids
msgid "Partial Reconcile Debit"
msgstr "Débit de lettrage partiel"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_invoice_report__industry_id
msgid "Partner Industry"
msgstr "Secteur dactivité du partenaire"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_invoice_filter
msgid "Payment Status"
msgstr "État de paiement"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__invoice_payment_term_id
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__invoice_payment_term_id
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__invoice_payment_term_id
msgid "Payment Terms"
msgstr "Conditions de paiement"
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/models/account_move.py:0
#, python-format
msgid "Please post the following entries before reconciliation :"
msgstr "Veuillez comptabiliser les pièces suivantes avant le lettrage :"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_group_generate__name_prefix
msgid "Prefix"
msgstr "Préfixe"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_move_form
msgid "Print"
msgstr "Imprimer"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_invoice_report_search
msgid "Product"
msgstr "Produit"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move_line__product_barcode
msgid "Product Barcode"
msgstr "Code barre du produit"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__ref
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__ref
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__ref
msgid "Reference"
msgstr "Référence"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__sale_dates
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__sale_dates
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__sale_dates
msgid "Sale Dates"
msgstr "Dates de vente"
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_res_partner__invoice_warn
#: model:ir.model.fields,help:account_usability_akretion.field_res_users__invoice_warn
msgid ""
"Selecting the \"Warning\" option will notify user with the message, "
"Selecting \"Blocking Message\" will throw an exception with the message and "
"block the flow. The Message has to be written in the next field."
msgstr ""
"Sélectionner l'option 'Avertissement' notifiera l'utilisateur avec le "
"message. Sélectionner 'Message Bloquant' lancera une exception avec le "
"message et bloquera le flux. Le Message doit être encodé dans le champ "
"suivant."
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_invoice_filter
msgid "Sent"
msgstr "Envoyé"
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/models/product.py:0
#, python-format
msgid "Tax excl."
msgstr "HT"
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/models/product.py:0
#, python-format
msgid "Tax incl."
msgstr "TTC"
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/wizard/account_group_generate.py:0
#, python-format
msgid ""
"The code of account '%s' is %d caracters. It cannot be inferior to level "
"(%d)."
msgstr ""
"Le code du compte '%s' fait %d caractères. Il ne peut pas être "
"inférieur au niveau (%d)."
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_res_partner__property_account_position_id
#: model:ir.model.fields,help:account_usability_akretion.field_res_users__property_account_position_id
msgid ""
"The fiscal position determines the taxes/accounts used for this contact."
msgstr ""
"La position fiscale détermine les taxes / comptes utilisés pour ce contact."
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/wizard/account_group_generate.py:0
#, python-format
msgid "The level must be >= 1."
msgstr "Le niveau doit être >= 1."
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_move_form
msgid "This"
msgstr "Ce"
#. module: account_usability_akretion
#: model:ir.model.constraint,message:account_usability_akretion.constraint_account_incoterms_code_unique
msgid "This incoterm code already exists."
msgstr "Ce code incoterm existe déjà."
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_account_bank_statement_line__sale_dates
#: model:ir.model.fields,help:account_usability_akretion.field_account_move__sale_dates
#: model:ir.model.fields,help:account_usability_akretion.field_account_payment__sale_dates
msgid ""
"This information appear on invoice qweb report (you may use it for your own "
"report)"
msgstr ""
"Cette information apparait sur le rapport qweb de la facture (vous pouvez "
"les utiliser pour votre propre rapport)"
#. module: account_usability_akretion
#. odoo-python
#: code:addons/account_usability_akretion/models/account_move.py:0
#, python-format
msgid ""
"This journal entry has been generated as the reverse of <a href=# data-oe-"
"model=account.move data-oe-id=%d>%s</a>."
msgstr ""
"Cette pièce comptable a été générée comme extourne de <a href=# data-oe-"
"model=account.move data-oe-id=%d>%s</a>."
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.account_group_generate_form
msgid ""
"This wizard is designed to auto-generate account groups from the chart of "
"account."
msgstr ""
"Cet assistant est conçu pour générer automatiquement les groupes de comptes "
"à partir du plan comptable."
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.account_invoice_mark_sent_form
msgid "This wizard will mark as <i>sent</i> all the selected posted invoices."
msgstr ""
"Cet assistant marquera comme <i>envoyées</i> toutes les factures "
"sélectionnées et comptabilisées."
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_invoice_filter
msgid "To Send"
msgstr "À envoyer"
#. module: account_usability_akretion
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_bank_statement_line__amount_total
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_move__amount_total
#: model:ir.model.fields,field_description:account_usability_akretion.field_account_payment__amount_total
msgid "Total"
msgstr ""
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_journal_search
msgid "Type"
msgstr ""
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_account_move_line_filter
msgid "Unreconciled or Partially Reconciled"
msgstr "Non lettré ou partiellement lettré"
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_move_line_tree
msgid "View Journal Entry Form"
msgstr "Voir la pièce comptable en vue formulaire"
#. module: account_usability_akretion
#: model:ir.model.fields,help:account_usability_akretion.field_account_journal__hide_bank_statement_balance
msgid ""
"When this option is enabled, the start and end balance is not displayed on "
"the bank statement form view, and the check of the end balance vs the real "
"end balance is disabled. When you enable this option, you process the "
"statement lines without considering the start/end balance and you regularly "
"check the accounting balance of the bank account vs the amount of your bank "
"account."
msgstr ""
"Lorsque cette option est activée, le solde de début et de fin ne s'affiche "
"pas sur la vue du formulaire du relevé de compte, et la vérification du solde"
" final vs le solde final réel est désactivée. Lorsque vous activez cette "
"option, vous traitez les lignes de relevé de compte sans tenir compte du solde de "
"début/fin et vous vérifiez régulièrement le solde du compte "
"bancaire vs le montant sur votre compte en banque."
#. module: account_usability_akretion
#: model_terms:ir.ui.view,arch_db:account_usability_akretion.view_move_form
msgid "is marked as <b>disputed</b>."
msgstr "est marquée <b>en litige</b>."

View File

@@ -1,11 +1,10 @@
from . import account_account
from . import account_analytic_account
from . import account_bank_statement
from . import account_incoterms
from . import account_journal
from . import account_move
from . import account_move_line
from . import account_partial_reconcile
from . import res_partner
from . import res_company
from . import product
#from . import product
from . import account_invoice_report

View File

@@ -1,21 +1,20 @@
# Copyright 2015-2020 Akretion (http://www.akretion.com)
# Copyright 2015-2024 Akretion France (https://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 models
from odoo import api, models
class AccountAnalyticAccount(models.Model):
_inherit = 'account.analytic.account'
def name_get(self):
@api.depends_context('analytic_account_show_code_only')
def _compute_display_name(self):
if self._context.get('analytic_account_show_code_only'):
res = []
for record in self:
res.append((record.id, record.code or record.name))
return res
for rec in self:
rec.display_name = rec.code or rec.name
else:
return super().name_get()
return super()._compute_display_name()
_sql_constraints = [(
'code_company_unique',

View File

@@ -0,0 +1,15 @@
# Copyright 2015-2024 Akretion France (https://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 models
class AccountIncoterms(models.Model):
_inherit = 'account.incoterms'
_rec_names_search = ["name", "code"]
_sql_constraints = [(
'code_unique',
'unique(code)',
'This incoterm code already exists.')]

View File

@@ -1,8 +1,9 @@
# Copyright 2022 Akretion (http://www.akretion.com)
# Copyright 2022-2024 Akretion France (https://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 api, fields, models
from odoo.tools import SQL
class AccountInvoiceReport(models.Model):
@@ -12,6 +13,6 @@ class AccountInvoiceReport(models.Model):
@api.model
def _select(self):
res = super()._select()
res += ", COALESCE(partner.industry_id, commercial_partner.industry_id) AS industry_id"
return res
return SQL(
"%s, COALESCE(partner.industry_id, commercial_partner.industry_id) AS industry_id",
super()._select())

View File

@@ -0,0 +1,50 @@
# Copyright 2015-2024 Akretion France (https://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 api, fields, models
class AccountJournal(models.Model):
_inherit = 'account.journal'
hide_bank_statement_balance = fields.Boolean(
string='Hide and Disable Bank Statement Balance',
help="When this option is enabled, the start and end balance is "
"not displayed on the bank statement form view, and the check of "
"the end balance vs the real end balance is disabled. When you enable "
"this option, you process the statement lines without considering "
"the start/end balance and you regularly check the accounting balance "
"of the bank account vs the amount of your bank account."
)
@api.depends('name', 'currency_id', 'company_id', 'code')
@api.depends_context('journal_show_code_only')
def _compute_display_name(self):
if self._context.get('journal_show_code_only'):
for journal in self:
journal.display_name = journal.code
else:
for journal in self:
name = f"[{journal.code}] {journal.name}"
if (
journal.currency_id and
journal.currency_id != journal.company_id.currency_id):
name = f"{name} ({journal.currency_id.name})"
journal.display_name = name
# def open_outstanding_payments(self):
# self.ensure_one()
# action = self.env["ir.actions.actions"]._for_xml_id(
# "account.action_account_moves_all")
# action['domain'] = [
# ('account_id', 'in', (self.payment_debit_account_id.id, self.payment_credit_account_id.id)),
# ('journal_id', '=', self.id),
# ('display_type', 'not in', ('line_section', 'line_note')),
# ('parent_state', '!=', 'cancel'),
# ]
# action['context'] = {
# 'search_default_unreconciled': True,
# 'search_default_posted': True,
# }
# return action

View File

@@ -0,0 +1,193 @@
# Copyright 2015-2024 Akretion France (https://www.akretion.com)
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from datetime import timedelta
import logging
from odoo import api, fields, models, _
from odoo.osv import expression
from odoo.tools import float_is_zero
from odoo.tools.misc import format_date
_logger = logging.getLogger(__name__)
class AccountMove(models.Model):
_inherit = 'account.move'
invoice_date_due = fields.Date(tracking=True)
invoice_payment_term_id = fields.Many2one(tracking=True)
journal_id = fields.Many2one(tracking=True)
fiscal_position_id = fields.Many2one(tracking=True)
amount_total = fields.Monetary(tracking=True)
# for invoice report
has_discount = fields.Boolean(compute='_compute_has_discount')
# has_attachment is useful for those who use attachment to archive
# supplier invoices. It allows them to find supplier invoices
# that don't have any attachment
has_attachment = fields.Boolean(
compute='_compute_has_attachment', search='_search_has_attachment')
sale_dates = fields.Char(
compute="_compute_sales_dates",
help="This information appear on invoice qweb report "
"(you may use it for your own report)")
# The native "blocked" field (bool) on account.move.line has been removed in v18
# blocked = fields.Boolean(
# compute="_compute_blocked",
# inverse="_inverse_blocked",
# store=True,
# string="Dispute",
# tracking=True,
# )
# Field search_account_id is just for search view
search_account_id = fields.Many2one(related='line_ids.account_id')
# @api.depends("line_ids", "line_ids.blocked")
# def _compute_blocked(self):
# for move in self:
# move.blocked = any(
# [
# l.blocked
# for l in move.line_ids
# if l.account_id.account_type in ("liability_payable", "asset_receivable")
# ]
# )
# def _inverse_blocked(self):
# for move in self:
# for line in move.line_ids.filtered(
# lambda l: l.account_id.account_type in ("liability_payable", "asset_receivable")
# ):
# line.blocked = move.blocked
def _compute_has_discount(self):
prec = self.env['decimal.precision'].precision_get('Discount')
for inv in self:
has_discount = False
for line in inv.invoice_line_ids:
if line.display_type == 'product' and not float_is_zero(line.discount, precision_digits=prec):
has_discount = True
break
inv.has_discount = has_discount
def _compute_has_attachment(self):
iao = self.env['ir.attachment']
for move in self:
if iao.search_count([
('res_model', '=', 'account.move'),
('res_id', '=', move.id),
('type', '=', 'binary'),
('company_id', '=', move.company_id.id)]):
move.has_attachment = True
else:
move.has_attachment = False
def _search_has_attachment(self, operator, value):
att_inv_ids = {}
if operator == '=':
search_res = self.env['ir.attachment'].search_read([
('res_model', '=', 'account.move'),
('type', '=', 'binary'),
('res_id', '!=', False)], ['res_id'])
for att in search_res:
att_inv_ids[att['res_id']] = True
res = [('id', value and 'in' or 'not in', list(att_inv_ids))]
return res
def delete_lines_qty_zero(self):
lines = self.env['account.move.line'].search([
('display_type', '=', 'product'),
('move_id', 'in', self.ids),
('quantity', '=', 0)])
lines.unlink()
return True
# for report
def py3o_lines_layout(self):
self.ensure_one()
res = []
has_sections = False
subtotal = 0.0
sign = self.move_type == 'out_refund' and -1 or 1
# Warning: the order of invoice line is forced in the view
# <tree editable="bottom" default_order="sequence, date desc, move_name desc, id"
# it's not the same as the _order in the class AccountMoveLine
lines = self.env['account.move.line'].search([('display_type', 'in', ('product', 'line_section', 'line_note')), ('move_id', '=', self.id)], order="sequence, date desc, move_name desc, id")
for line in lines:
if line.display_type == 'line_section':
# insert line
if has_sections:
res.append({'subtotal': subtotal})
subtotal = 0.0 # reset counter
has_sections = True
else:
if line.display_type == 'product':
subtotal += line.price_subtotal * sign
res.append({'line': line})
if has_sections: # insert last subtotal line
res.append({'subtotal': subtotal})
# res:
# [
# {'line': account_invoice_line(1) with display_type=='line_section'},
# {'line': account_invoice_line(2) with display_type=='product'},
# {'line': account_invoice_line(3) with display_type=='product'},
# {'line': account_invoice_line(4) with display_type=='line_note'},
# {'subtotal': 8932.23},
# ]
return res
def _compute_sales_dates(self):
""" French law requires to set sale order dates into invoice
returned string: "sale1 (date1), sale2 (date2) ..."
"""
for move in self:
sales = move.invoice_line_ids.mapped(
'sale_line_ids').mapped('order_id')
dates = ["%s (%s)" % (
x.name, format_date(move.env, x.date_order))
for x in sales]
move.sale_dates = ", ".join(dates)
# allow to manually create moves not only in general journals,
# but also in cash journal and check journals (= bank journals not linked to a bank account)
@api.depends('company_id', 'invoice_filter_type_domain')
def _compute_suitable_journal_ids(self):
for move in self:
if move.invoice_filter_type_domain:
super(AccountMove, move)._compute_suitable_journal_ids()
else:
company_id = move.company_id.id or self.env.company.id
domain = expression.AND([
[('company_id', '=', company_id)],
expression.OR([
[('type', 'in', ('general', 'cash'))],
[('type', '=', 'bank'), ('bank_account_id', '=', False)]
])
])
move.suitable_journal_ids = self.env['account.journal'].search(domain)
# There is no more attachment by default on invoice reports...
# TODO check what's the editor strategy on this
# def button_draft(self):
# Delete attached pdf invoice
# for move in self.filtered(lambda x: x.move_type in ('out_invoice', 'out_refund')):
# for report_xmlid in ('account.account_invoices', 'account.account_invoices_without_payment'):
# report = self.env.ref(report_xmlid)
# attach = report.retrieve_attachment(move)
# if attach:
# attach.unlink()
# super().button_draft()
def _get_accounting_date(self, invoice_date, has_tax, lock_dates=None):
# On vendor bills/refunds, we want date = invoice_date unless
# we have a company tax_lock_date and the invoice has taxes
# and invoice_date <= tax_lock_date
date = super()._get_accounting_date(invoice_date, has_tax, lock_dates=lock_dates)
lock_dates = lock_dates or self._get_violated_lock_dates(invoice_date, has_tax)
if self.is_purchase_document(include_receipts=True) and invoice_date:
if lock_dates:
date = max([entry[0] for entry in lock_dates]) + timedelta(1)
else:
date = invoice_date
return date

View File

@@ -0,0 +1,70 @@
# Copyright 2015-2024 Akretion France (https://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
import logging
_logger = logging.getLogger(__name__)
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
# Native order:
# _order = "date desc, move_name desc, id"
# Problem: when you manually create a journal entry, the
# order of the lines is inverted when you save ! It is quite annoying for
# the user...
_order = "date desc, id asc"
# for optional display in list view
product_barcode = fields.Char(related='product_id.barcode', string="Product Barcode")
def show_account_move_form(self):
self.ensure_one()
action = self.env["ir.actions.actions"]._for_xml_id(
'account.action_move_line_form')
action.update({
'res_id': self.move_id.id,
'view_id': False,
'views': False,
'view_mode': 'form,list',
})
return action
# def update_matching_number(self):
# records = self.search([("matching_number", "=", "P")])
# _logger.info(f"Update partial reconcile number for {len(records)} lines")
# records._compute_matching_number()
# def _compute_matching_number(self):
# TODO maybe it will be better to have the same maching_number for
# all partial so it will be easier to group by
# super()._compute_matching_number()
# for record in self:
# if record.matching_number == "P":
# record.matching_number = ", ".join([
# "a%d" % pr.id
# for pr in record.matched_debit_ids + record.matched_credit_ids
# ])
def _compute_name(self):
# This is useful when you want to have the product code in a dedicated
# column in your customer invoice report
# The same ir.config_parameter is used in sale_usability,
# purchase_usability and account_usability
no_product_code_param = self.env['ir.config_parameter'].sudo().get_param(
'usability.line_name_no_product_code')
if no_product_code_param and no_product_code_param == 'True':
self = self.with_context(display_default_code=False)
return super()._compute_name()
# def reconcile(self):
# """Explicit error message if unposted lines"""
# unposted_ids = self.filtered(lambda l: l.move_id.state != "posted")
# if unposted_ids:
# m = _("Please post the following entries before reconciliation :")
# sep = "\n - "
# unpost = sep.join([am.display_name for am in unposted_ids.move_id])
# raise UserError(m + sep + unpost)
# return super().reconcile()

View File

@@ -1,23 +1,23 @@
# Copyright 2015-2020 Akretion (http://www.akretion.com)
# Copyright 2015-2022 Akretion (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 models
from odoo.tools.misc import formatLang
# from odoo.tools.misc import formatLang
class AccountPartialReconcile(models.Model):
_inherit = "account.partial.reconcile"
_rec_name = "id"
# _rec_name = "id"
def name_get(self):
res = []
for rec in self:
# def name_get(self):
# res = []
# for rec in self:
# There is no seq for partial rec, so I simulate one with the ID
# Prefix for full rec: 'A' (upper case)
# Prefix for partial rec: 'a' (lower case)
amount_fmt = formatLang(
self.env, rec.amount, currency_obj=rec.company_currency_id)
name = 'a%d (%s)' % (rec.id, amount_fmt)
res.append((rec.id, name))
return res
# amount_fmt = formatLang(
# self.env, rec.amount, currency_obj=rec.company_currency_id)
# name = 'a%d (%s)' % (rec.id, amount_fmt)
# res.append((rec.id, name))
# return res

View File

@@ -4,6 +4,9 @@
from odoo import api, fields, models, _
# CODE DISABLED FOR THE MOMENT. I need to decide if I want to drop it
# because native code is enough and if I want to re-enable it
class ProductTemplate(models.Model):
_inherit = 'product.template'

View File

@@ -13,7 +13,7 @@ class ResCompany(models.Model):
# But there are several problems with this native field:
# - it is copied on the 'narration' field of account.move => we don't want that
# - the text block is very small on the form view of res.config.settings
# So I decided to have our own field "fixed_invoice_terms"
# So I decided to have our own field "static_invoice_terms"
# The native field can still be used when you need to customise some
# terms and conditions on each invoice (not very common, but...)
# To underline this different with the native field, I prefix it with 'static_'

View File

@@ -1,4 +1,4 @@
# Copyright 2017-2020 Akretion France (https://akretion.com/)
# Copyright 2017-2024 Akretion France (https://akretion.com/)
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -1,3 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_group_generate_full,Full access on account.group.generate,model_account_group_generate,account.group_account_manager,1,1,1,1
access_account_invoice_mark_sent_full,Full access on account.invoice.mark.sent,model_account_invoice_mark_sent,account.group_account_invoice,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
access_account_group_generate_full Full access on account.group.generate model_account_group_generate account.group_account_manager 1 1 1 1
2 access_account_invoice_mark_sent_full Full access on account.invoice.mark.sent model_account_invoice_mark_sent account.group_account_invoice 1 1 1 1

View File

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Account Usability</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
@@ -275,7 +275,7 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
@@ -301,7 +301,7 @@ span.option {
span.pre {
white-space: pre }
span.problematic {
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
@@ -366,8 +366,10 @@ ul.auto-toc {
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:dbf367e7cf8330c803622d0c171cd10e128344d318466d6e37ad7b0fc812e152
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/akretion/odoo-usability/tree/12.0/account_usability"><img alt="akretion/odoo-usability" src="https://img.shields.io/badge/github-akretion%2Fodoo--usability-lightgray.png?logo=github" /></a></p>
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/akretion/odoo-usability/tree/18.0/account_usability_akretion"><img alt="akretion/odoo-usability" src="https://img.shields.io/badge/github-akretion%2Fodoo--usability-lightgray.png?logo=github" /></a></p>
<p>This modules adds the following functions:</p>
<ul class="simple">
<li>Add an <em>Overdue</em> filter on invoice search view (this feature was previously
@@ -411,41 +413,41 @@ located in te module <em>account_invoice_overdue_filter</em>)</li>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="id1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id4">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id5">Maintainers</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-5">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id1">Bug Tracker</a></h1>
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/akretion/odoo-usability/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/akretion/odoo-usability/issues/new?body=module:%20account_usability%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/akretion/odoo-usability/issues/new?body=module:%20account_usability_akretion%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id2">Credits</a></h1>
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id3">Authors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<ul class="simple">
<li>Akretion</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id4">Contributors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Alexis de Lattre &lt;<a class="reference external" href="mailto:alexis.delattre&#64;akretion.com">alexis.delattre&#64;akretion.com</a>&gt;</li>
<li>David Beal &lt;<a class="reference external" href="mailto:david.beal&#64;akretion.com">david.beal&#64;akretion.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id5">Maintainers</a></h2>
<p>This module is part of the <a class="reference external" href="https://github.com/akretion/odoo-usability/tree/12.0/account_usability">akretion/odoo-usability</a> project on GitHub.</p>
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
<p>This module is part of the <a class="reference external" href="https://github.com/akretion/odoo-usability/tree/18.0/account_usability_akretion">akretion/odoo-usability</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
</div>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2021 Akretion France (http://www.akretion.com/)
Copyright 2015-2024 Akretion France (https://www.akretion.com/)
@author: Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
@@ -14,26 +14,20 @@
<field name="inherit_id" ref="account.view_account_form"/>
<field name="arch" type="xml">
<field name="deprecated" position="before">
<field name="reconcile" attrs="{'invisible': ['|', ('internal_type','=','liquidity'), ('internal_group', '=', 'off_balance')]}"/>
<field name="reconcile" invisible="account_type in ('asset_cash', 'liability_credit_card', 'off_balance')" widget="boolean_toggle"/>
</field>
</field>
</record>
<record id="view_account_search" model="ir.ui.view">
<field name="name">account.account.search</field>
<field name="model">account.account</field>
<field name="inherit_id" ref="account.view_account_search"/>
<field name="arch" type="xml">
<!-- The native "name" filter uses a domain ['|', ('name','ilike',self), ('code','=like',str(self)+'%')]
This is good because it uses '=like' on 'code', but sometimes there are digits in account names,
so you get additionnal unexpected accounts in the result of the search -->
<field name="name" position="after">
<field name="code" filter_domain="[('code', '=like', str(self)+'%')]" string="Code"/>
<field name="code" filter_domain="[('code', '=like', self + '%')]" string="Code"/>
</field>
<filter name="accounttype" position="after">
<filter name="group_groupby" string="Group" context="{'group_by': 'group_id'}"/>
</filter>
</field>
</record>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2024 Akretion France (https://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_analytic_line_tree_inherit_account" model="ir.ui.view">
<field name="model">account.analytic.line</field>
<field name="inherit_id" ref="account.view_account_analytic_line_tree_inherit_account"/>
<field name="arch" type="xml">
<field name="general_account_id" position="attributes">
<attribute name="optional">show</attribute>
</field>
</field>
</record>
</odoo>

View File

@@ -13,8 +13,13 @@
<field name="model">account.bank.statement</field>
<field name="inherit_id" ref="account.view_bank_statement_form"/>
<field name="arch" type="xml">
<button name="button_reopen" position="attributes">
<attribute name="confirm">Are you sure ? Don't do 'Reset to New' if you just want to modify the bank journal entry of an existing statement line.</attribute>
<button name="button_reopen" position="after">
<button
name="button_undo_reconciliation"
type="object"
confirm="Are you sure to unreconcile all the entries of the bank statement?"
states="open"
string="Unreconcile All"/>
</button>
<xpath expr="//field[@name='line_ids']/tree/button[@name='button_undo_reconciliation']" position="after">
<field name="move_id" invisible="1"/>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Akretion France (http://www.akretion.com/)
Copyright 2021-2024 Akretion France (https://www.akretion.com/)
@author: Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018-2024 Akretion (https://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="account_invoice_report_view_tree" model="ir.ui.view">
<field name="name">usability.account.invoice.report.tree</field>
<field name="model">account.invoice.report</field>
<field name="inherit_id" ref="account.account_invoice_report_view_tree"/>
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field name="commercial_partner_id" optional="hide"/>
<field name="industry_id" optional="hide"/>
<field name="fiscal_position_id" optional="hide"/>
</field>
<field name="quantity" position="after">
<field name="product_uom_id" groups="uom.group_uom" optional="hide"/>
</field>
</field>
</record>
<record id="view_account_invoice_report_search" model="ir.ui.view">
<field name="model">account.invoice.report</field>
<field name="inherit_id" ref="account.view_account_invoice_report_search"/>
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field name="industry_id"/>
</field>
<filter name="category_product" position="after">
<filter string="Product" name="product_groupby" context="{'group_by': 'product_id', 'residual_invisible':True}"/>
</filter>
<filter name="partner_id" position="after">
<filter name="industry_groupby" string="Partner Industry" context="{'group_by': 'industry_id'}"/>
</filter>
</field>
</record>
<!-- pivot in first position instead of graph -->
<record id="account.action_account_invoice_report_all_supp" model="ir.actions.act_window">
<field name="view_mode">pivot,graph</field>
</record>
<record id="account.action_account_invoice_report_all" model="ir.actions.act_window">
<field name="view_mode">pivot,graph</field>
</record>
</odoo>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2020 Akretion France (http://www.akretion.com/)
Copyright 2015-2024 Akretion France (https://www.akretion.com/)
@author: Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
@@ -12,19 +12,11 @@
<field name="model">account.journal</field>
<field name="inherit_id" ref="account.view_account_journal_form"/>
<field name="arch" type="xml">
<field name="bank_statements_source" position="after">
<field name="hide_bank_statement_balance" groups="account.group_account_readonly"/>
<field name="account_type_current_assets_id" invisible="1"/>
</field>
<field name="suspense_account_id" position="attributes">
<attribute name="context">{'default_user_type_id': account_type_current_assets_id, 'default_reconcile': False}</attribute>
</field>
<field name="payment_debit_account_id" position="attributes">
<attribute name="context">{'default_user_type_id': account_type_current_assets_id, 'default_reconcile': True}</attribute>
</field>
<field name="payment_credit_account_id" position="attributes">
<attribute name="context">{'default_user_type_id': account_type_current_assets_id, 'default_reconcile': True}</attribute>
</field>
<xpath expr="//field[@name='account_control_ids']/.." position="after">
<group name="usability" string="Misc" invisible="type != 'bank'">
<field name="hide_bank_statement_balance" groups="account.group_account_readonly"/>
</group>
</xpath>
</field>
</record>
@@ -39,22 +31,13 @@
<xpath expr="//div[@name='latest_statement']/.." position="attributes">
<attribute name="t-if">dashboard.has_at_least_one_statement and dashboard.account_balance != dashboard.last_balance and !record.hide_bank_statement_balance.raw_value</attribute>
</xpath>
<!--
<t t-esc="dashboard.outstanding_pay_account_balance" position="replace">
<a name="open_outstanding_payments" type="object" title="Outstanding Payments/Receipts"><t t-esc="dashboard.outstanding_pay_account_balance"/></a>
</t>
</field>
</record>
<record id="view_account_journal_tree" model="ir.ui.view">
<field name="name">usability.account.journal.tree</field>
<field name="model">account.journal</field>
<field name="inherit_id" ref="account.view_account_journal_tree"/>
<field name="arch" type="xml">
<field name="name" position="after">
<field name="code" optional="show"/>
</field>
</t> -->
</field>
</record>
-->
<record id="view_account_journal_search" model="ir.ui.view">
<field name="name">usability.account.journal.search</field>

View File

@@ -1,21 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2020 Akretion France (http://www.akretion.com/)
Copyright 2015-2024 Akretion France (https://www.akretion.com/)
@author: Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<odoo>
<!-- Duplicate the menu "Sales > Configuration > Contacts > Bank Accounts"
<!-- Duplicate the menu "Bank Accounts"
under "Accounting > Configuration", because most users will try to find it there -->
<menuitem id="res_bank_account_config_menu" action="base.action_res_bank_form" parent="account.account_banks_menu" sequence="10"/>
<menuitem id="res_partner_bank_account_config_menu" action="base.action_res_partner_bank_account_form" parent="account.account_banks_menu" sequence="20"/>
<record id="account.menu_finance" model="ir.ui.menu">
<!-- Replace "Invoicing" by "Accounting" -->
<field name="name">Accounting</field>
</record>
</odoo>

View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2024 Akretion France (https://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_move_form" model="ir.ui.view">
<field name="name">account_usability.account.move.form</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<button id="account_invoice_payment_btn" position="attributes">
<attribute name="class">btn-default</attribute>
</button>
<button name="action_register_payment" position="before">
<button name="%(account.account_invoices)d" type="action" string="Print" invisible="move_type not in ('out_invoice', 'out_refund')"/>
</button>
<button name="preview_invoice" position="attributes">
<attribute name="invisible">1</attribute>
</button>
<!-- move field is_move_sent and make it visible -->
<field name="is_move_sent" position="replace"/>
<field name="invoice_origin" position="attributes">
<attribute name="invisible">0</attribute>
</field>
<field name="invoice_origin" position="after">
<field name="is_move_sent" invisible="move_type not in ('out_invoice', 'out_refund')"/>
</field>
<xpath expr="//field[@name='line_ids']/list/field[@name='tax_tag_ids']" position="after">
<field name="matching_number" optional="show"/>
</xpath>
<xpath expr="//field[@name='invoice_line_ids']/list/field[@name='product_id']" position="after">
<field name="product_barcode" optional="hide"/>
</xpath>
<!--
<field name="invoice_source_email" position="after">
<field name="blocked"/>
</field>
<div role="alert" position="after">
<div id="warn_blocked" groups="account.group_account_invoice,account.group_account_readonly"
class="alert alert-warning" role="alert" style="margin-bottom:0px;"
attrs="{'invisible': ['|', ('move_type', 'not in', ('in_invoice', 'in_refund', 'out_invoice', 'out_refund')), ('blocked', '=', False)]}">
This <field name="move_type"/> is marked as <b>disputed</b>.
</div>
</div> -->
<xpath expr="//field[@name='duplicated_ref_ids']/.." position="attributes">
<!-- show duplicate warning not only in draft state, but also in posted state -->
<attribute name="invisible">not duplicated_ref_ids</attribute>
</xpath>
<button name="button_cancel" invisible="not id or state != 'draft' or move_type != 'entry'" position="attributes">
<attribute name="confirm">Are you sure you want to cancel this journal entry?</attribute>
</button>
<button name="button_cancel" invisible="not id or state != 'draft' or move_type == 'entry'" position="attributes">
<attribute name="confirm">Are you sure you want to cancel this invoice?</attribute>
</button>
</field>
</record>
<record id="view_invoice_tree" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_invoice_tree"/>
<field name="arch" type="xml">
<field name="amount_residual_signed" position="attributes">
<!-- switch from hide to show -->
<attribute name="optional">show</attribute>
</field>
</field>
</record>
<record id="view_account_invoice_filter" model="ir.ui.view">
<field name="name">account_usability.account.move.search</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_account_invoice_filter"/>
<field name="arch" type="xml">
<filter name="due_date" position="after">
<separator/>
<filter name="no_attachment" string="Missing Attachment" domain="[('has_attachment', '=', False)]"/>
<!-- <filter name="dispute" string="Dispute" domain="[('blocked', '=', True)]"/> -->
</filter>
<filter name="partner" position="before">
<filter name="commercial_partner_groupby" string="Commercial Partner" context="{'group_by': 'commercial_partner_id'}"/>
</filter>
<filter name="status" position="after">
<filter name="payment_state_groupby" string="Payment Status" context="{'group_by': 'payment_state'}"/>
</filter>
</field>
</record>
<record id="view_account_move_filter" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_account_move_filter"/>
<field name="arch" type="xml">
<field name="journal_id" position="after">
<field name="search_account_id"/>
</field>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2024 Akretion France (https://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_move_line_tree" model="ir.ui.view">
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_tree"/>
<field name="arch" type="xml">
<list position="inside">
<button title="View Journal Entry Form" type="object" name="show_account_move_form" icon="fa-arrow-right"/>
</list>
</field>
</record>
<record id="view_account_move_line_filter" model="ir.ui.view">
<field name="name">account_usability.account_move_line_search</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_account_move_line_filter"/>
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field name="matching_number" />
<field name="debit" filter_domain="['|', ('debit', '=', self), ('credit', '=', self)]" string="Debit or Credit"/>
</field>
<filter name="reconcilable_account" position="before">
<filter name="reconciled" string="Fully Reconciled" domain="[('account_id.reconcile', '=', True), ('full_reconcile_id', '!=', False)]"/>
</filter>
<filter name="reconcilable_account" position="attributes">
<attribute name="string">Unreconciled or Partially Reconciled</attribute>
</filter>
<field name="name" position="attributes">
<attribute name="string">Label, Reference, Account or Partner</attribute>
</field>
<field name="partner_id" position="attributes">
<attribute name="domain">['|', ('parent_id', '=', False), ('is_company', '=', True)]</attribute>
</field>
</field>
</record>
<!-- Inherit action called from button of account.account form view
Make it similar to standard "Journal Items" menu account.action_account_moves_all_a -->
<record id="account.action_move_line_select" model="ir.actions.act_window">
<field name="domain">[('display_type', 'not in', ('line_section', 'line_note'))]</field>
<field name="view_id" ref="account.view_move_line_tree"/>
<field name="view_mode">list,pivot,graph,kanban</field>
</record>
</odoo>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2025 Akretion France (https://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_form" model="ir.ui.view">
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_payment_form"/>
<field name="arch" type="xml">
<group name="group2" position="inside">
<field name="move_id" readonly="1"/>
</group>
</field>
</record>
</odoo>

View File

@@ -1,12 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018-2020 Akretion (http://www.akretion.com/)
Copyright 2018-2022 Akretion (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>
<!-- in v18, attachments are disabled by default
TODO see what's the editor idea about it
in the meantime, this field is disabled in manifest -->
<record id="account.account_invoices" model="ir.actions.report">
<!-- Attach only on customer invoices/refunds -->
<field name="attachment">(object.move_type in ('out_invoice', 'out_refund')) and (object.state == 'posted') and ((object.name or 'INV').replace('/','_')+'.pdf')</field>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2020 Akretion France (http://www.akretion.com/)
Copyright 2015-2024 Akretion France (https://www.akretion.com/)
@author: Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
@@ -11,7 +11,7 @@
<field name="model">account.tax</field>
<field name="inherit_id" ref="account.view_tax_tree"/>
<field name="arch" type="xml">
<field name="description" position="after">
<field name="type_tax_use" position="after">
<field name="price_include" optional="show"/>
</field>
</field>

Some files were not shown because too many files have changed in this diff Show More