Initial commit: OCA Financial packages (186 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:04 +02:00
commit 3e0e8473fb
8757 changed files with 947473 additions and 0 deletions

232
README.md Normal file
View file

@ -0,0 +1,232 @@
# OCA Financial
This repository contains **186** OCA packages for financial.
## Packages Included (186 packages)
- **odoo-bringout-oca-account-analytic-account_analytic_account_tag** - From account: analytic_account_analytic_account_tag
- **odoo-bringout-oca-account-analytic-account_analytic_distribution_manual** - From account: analytic_account_analytic_distribution_manual
- **odoo-bringout-oca-account-analytic-account_analytic_document_date** - From account: analytic_account_analytic_document_date
- **odoo-bringout-oca-account-analytic-account_analytic_organization** - From account: analytic_account_analytic_organization
- **odoo-bringout-oca-account-analytic-account_analytic_parent** - From account: analytic_account_analytic_parent
- **odoo-bringout-oca-account-analytic-account_analytic_required** - From account: analytic_account_analytic_required
- **odoo-bringout-oca-account-analytic-account_analytic_root** - From account: analytic_account_analytic_root
- **odoo-bringout-oca-account-analytic-account_analytic_sequence** - From account: analytic_account_analytic_sequence
- **odoo-bringout-oca-account-analytic-account_analytic_tag** - From account: analytic_account_analytic_tag
- **odoo-bringout-oca-account-analytic-account_analytic_tag_distribution** - From account: analytic_account_analytic_tag_distribution
- **odoo-bringout-oca-account-analytic-account_move_update_analytic** - From account: analytic_account_move_update_analytic
- **odoo-bringout-oca-account-analytic-analytic_base_department** - From account: analytic_analytic_base_department
- **odoo-bringout-oca-account-analytic-analytic_distribution_widget_remove_save** - From account: analytic_analytic_distribution_widget_remove_save
- **odoo-bringout-oca-account-analytic-analytic_hr_department_restriction** - From account: analytic_analytic_hr_department_restriction
- **odoo-bringout-oca-account-analytic-analytic_mixin_analytic_account** - From account: analytic_analytic_mixin_analytic_account
- **odoo-bringout-oca-account-analytic-analytic_partner** - From account: analytic_analytic_partner
- **odoo-bringout-oca-account-analytic-crm_claim_analytic** - From account: analytic_crm_claim_analytic
- **odoo-bringout-oca-account-analytic-hr_department_analytic** - From account: analytic_hr_department_analytic
- **odoo-bringout-oca-account-analytic-hr_expense_analytic_tag** - From account: analytic_hr_expense_analytic_tag
- **odoo-bringout-oca-account-analytic-hr_timesheet_analytic_tag** - From account: analytic_hr_timesheet_analytic_tag
- **odoo-bringout-oca-account-analytic-mrp_stock_analytic** - From account: analytic_mrp_stock_analytic
- **odoo-bringout-oca-account-analytic-pos_analytic_by_config** - From account: analytic_pos_analytic_by_config
- **odoo-bringout-oca-account-analytic-product_analytic** - From account: analytic_product_analytic
- **odoo-bringout-oca-account-analytic-product_analytic_purchase** - From account: analytic_product_analytic_purchase
- **odoo-bringout-oca-account-analytic-product_analytic_sale** - From account: analytic_product_analytic_sale
- **odoo-bringout-oca-account-analytic-purchase_analytic** - From account: analytic_purchase_analytic
- **odoo-bringout-oca-account-analytic-purchase_analytic_tag** - From account: analytic_purchase_analytic_tag
- **odoo-bringout-oca-account-analytic-purchase_stock_analytic** - From account: analytic_purchase_stock_analytic
- **odoo-bringout-oca-account-analytic-sale_analytic_tag** - From account: analytic_sale_analytic_tag
- **odoo-bringout-oca-account-analytic-stock_analytic** - From account: analytic_stock_analytic
- **odoo-bringout-oca-account-analytic-stock_landed_costs_analytic** - From account: analytic_stock_landed_costs_analytic
- **odoo-bringout-oca-account-analytic-stock_picking_analytic** - From account: analytic_stock_picking_analytic
- **odoo-bringout-oca-account-financial-reporting-account_financial_report** - From account: financial_reporting_account_financial_report
- **odoo-bringout-oca-account-financial-reporting-account_financial_report_sale** - From account: financial_reporting_account_financial_report_sale
- **odoo-bringout-oca-account-financial-reporting-account_liquidity_forecast** - From account: financial_reporting_account_liquidity_forecast
- **odoo-bringout-oca-account-financial-reporting-account_purchase_stock_report_non_billed** - From account: financial_reporting_account_purchase_stock_report_non_billed
- **odoo-bringout-oca-account-financial-reporting-account_sale_stock_report_non_billed** - From account: financial_reporting_account_sale_stock_report_non_billed
- **odoo-bringout-oca-account-financial-reporting-account_tax_balance** - From account: financial_reporting_account_tax_balance
- **odoo-bringout-oca-account-financial-reporting-mis_builder_cash_flow** - From account: financial_reporting_mis_builder_cash_flow
- **odoo-bringout-oca-account-financial-reporting-mis_template_financial_report** - From account: financial_reporting_mis_template_financial_report
- **odoo-bringout-oca-account-financial-reporting-partner_statement** - From account: financial_reporting_partner_statement
- **odoo-bringout-oca-account-financial-tools-account_account_tag_code** - From account: financial_tools_account_account_tag_code
- **odoo-bringout-oca-account-financial-tools-account_asset_batch_compute** - From account: financial_tools_account_asset_batch_compute
- **odoo-bringout-oca-account-financial-tools-account_asset_low_value** - From account: financial_tools_account_asset_low_value
- **odoo-bringout-oca-account-financial-tools-account_asset_management** - From account: financial_tools_account_asset_management
- **odoo-bringout-oca-account-financial-tools-account_asset_management_stock_lot** - From account: financial_tools_account_asset_management_stock_lot
- **odoo-bringout-oca-account-financial-tools-account_asset_number** - From account: financial_tools_account_asset_number
- **odoo-bringout-oca-account-financial-tools-account_asset_transfer** - From account: financial_tools_account_asset_transfer
- **odoo-bringout-oca-account-financial-tools-account_bank_statement_chatter** - From account: financial_tools_account_bank_statement_chatter
- **odoo-bringout-oca-account-financial-tools-account_cash_deposit** - From account: financial_tools_account_cash_deposit
- **odoo-bringout-oca-account-financial-tools-account_chart_update** - From account: financial_tools_account_chart_update
- **odoo-bringout-oca-account-financial-tools-account_chart_update_l10n_eu_oss_oca** - From account: financial_tools_account_chart_update_l10n_eu_oss_oca
- **odoo-bringout-oca-account-financial-tools-account_chart_update_multilang** - From account: financial_tools_account_chart_update_multilang
- **odoo-bringout-oca-account-financial-tools-account_dashboard_banner** - From account: financial_tools_account_dashboard_banner
- **odoo-bringout-oca-account-financial-tools-account_fiscal_month** - From account: financial_tools_account_fiscal_month
- **odoo-bringout-oca-account-financial-tools-account_fiscal_position_vat_check** - From account: financial_tools_account_fiscal_position_vat_check
- **odoo-bringout-oca-account-financial-tools-account_fiscal_year** - From account: financial_tools_account_fiscal_year
- **odoo-bringout-oca-account-financial-tools-account_fiscal_year_auto_create** - From account: financial_tools_account_fiscal_year_auto_create
- **odoo-bringout-oca-account-financial-tools-account_invoice_constraint_chronology** - From account: financial_tools_account_invoice_constraint_chronology
- **odoo-bringout-oca-account-financial-tools-account_journal_general_sequence** - From account: financial_tools_account_journal_general_sequence
- **odoo-bringout-oca-account-financial-tools-account_journal_lock_date** - From account: financial_tools_account_journal_lock_date
- **odoo-bringout-oca-account-financial-tools-account_journal_restrict_mode** - From account: financial_tools_account_journal_restrict_mode
- **odoo-bringout-oca-account-financial-tools-account_loan** - From account: financial_tools_account_loan
- **odoo-bringout-oca-account-financial-tools-account_lock_date_update** - From account: financial_tools_account_lock_date_update
- **odoo-bringout-oca-account-financial-tools-account_lock_to_date** - From account: financial_tools_account_lock_to_date
- **odoo-bringout-oca-account-financial-tools-account_move_budget** - From account: financial_tools_account_move_budget
- **odoo-bringout-oca-account-financial-tools-account_move_fiscal_month** - From account: financial_tools_account_move_fiscal_month
- **odoo-bringout-oca-account-financial-tools-account_move_fiscal_year** - From account: financial_tools_account_move_fiscal_year
- **odoo-bringout-oca-account-financial-tools-account_move_line_check_number** - From account: financial_tools_account_move_line_check_number
- **odoo-bringout-oca-account-financial-tools-account_move_line_landed_cost_info** - From account: financial_tools_account_move_line_landed_cost_info
- **odoo-bringout-oca-account-financial-tools-account_move_line_purchase_info** - From account: financial_tools_account_move_line_purchase_info
- **odoo-bringout-oca-account-financial-tools-account_move_line_repair_info** - From account: financial_tools_account_move_line_repair_info
- **odoo-bringout-oca-account-financial-tools-account_move_line_sale_info** - From account: financial_tools_account_move_line_sale_info
- **odoo-bringout-oca-account-financial-tools-account_move_line_tax_editable** - From account: financial_tools_account_move_line_tax_editable
- **odoo-bringout-oca-account-financial-tools-account_move_name_sequence** - From account: financial_tools_account_move_name_sequence
- **odoo-bringout-oca-account-financial-tools-account_move_post_date_user** - From account: financial_tools_account_move_post_date_user
- **odoo-bringout-oca-account-financial-tools-account_move_print** - From account: financial_tools_account_move_print
- **odoo-bringout-oca-account-financial-tools-account_move_template** - From account: financial_tools_account_move_template
- **odoo-bringout-oca-account-financial-tools-account_move_transfer_partner** - From account: financial_tools_account_move_transfer_partner
- **odoo-bringout-oca-account-financial-tools-account_netting** - From account: financial_tools_account_netting
- **odoo-bringout-oca-account-financial-tools-account_partner_required** - From account: financial_tools_account_partner_required
- **odoo-bringout-oca-account-financial-tools-account_sequence_option** - From account: financial_tools_account_sequence_option
- **odoo-bringout-oca-account-financial-tools-account_spread_cost_revenue** - From account: financial_tools_account_spread_cost_revenue
- **odoo-bringout-oca-account-financial-tools-account_template_active** - From account: financial_tools_account_template_active
- **odoo-bringout-oca-account-financial-tools-account_usability** - From account: financial_tools_account_usability
- **odoo-bringout-oca-account-financial-tools-base_vat_optional_vies** - From account: financial_tools_base_vat_optional_vies
- **odoo-bringout-oca-account-financial-tools-stock_account_anglo_saxon_cogs_kit** - From account: financial_tools_stock_account_anglo_saxon_cogs_kit
- **odoo-bringout-oca-account-fiscal-rule-account_avatax_exemption** - From account: fiscal_rule_account_avatax_exemption
- **odoo-bringout-oca-account-fiscal-rule-account_avatax_exemption_base** - From account: fiscal_rule_account_avatax_exemption_base
- **odoo-bringout-oca-account-fiscal-rule-account_avatax_oca** - From account: fiscal_rule_account_avatax_oca
- **odoo-bringout-oca-account-fiscal-rule-account_avatax_oca_log** - From account: fiscal_rule_account_avatax_oca_log
- **odoo-bringout-oca-account-fiscal-rule-account_avatax_repair_oca** - From account: fiscal_rule_account_avatax_repair_oca
- **odoo-bringout-oca-account-fiscal-rule-account_avatax_sale_oca** - From account: fiscal_rule_account_avatax_sale_oca
- **odoo-bringout-oca-account-fiscal-rule-account_avatax_website_sale** - From account: fiscal_rule_account_avatax_website_sale
- **odoo-bringout-oca-account-fiscal-rule-account_ecotax** - From account: fiscal_rule_account_ecotax
- **odoo-bringout-oca-account-fiscal-rule-account_ecotax_sale** - From account: fiscal_rule_account_ecotax_sale
- **odoo-bringout-oca-account-fiscal-rule-account_ecotax_sale_tax** - From account: fiscal_rule_account_ecotax_sale_tax
- **odoo-bringout-oca-account-fiscal-rule-account_ecotax_tax** - From account: fiscal_rule_account_ecotax_tax
- **odoo-bringout-oca-account-fiscal-rule-account_fiscal_position_autodetect_optional_vies** - From account: fiscal_rule_account_fiscal_position_autodetect_optional_vies
- **odoo-bringout-oca-account-fiscal-rule-account_fiscal_position_partner_type** - From account: fiscal_rule_account_fiscal_position_partner_type
- **odoo-bringout-oca-account-fiscal-rule-account_fiscal_position_type** - From account: fiscal_rule_account_fiscal_position_type
- **odoo-bringout-oca-account-fiscal-rule-account_product_fiscal_classification** - From account: fiscal_rule_account_product_fiscal_classification
- **odoo-bringout-oca-account-fiscal-rule-l10n_eu_oss_oca** - From account: fiscal_rule_l10n_eu_oss_oca
- **odoo-bringout-oca-account-invoicing-account_billing** - From account: invoicing_account_billing
- **odoo-bringout-oca-account-invoicing-account_global_discount** - From account: invoicing_account_global_discount
- **odoo-bringout-oca-account-invoicing-account_invoice_alternate_payer** - From account: invoicing_account_invoice_alternate_payer
- **odoo-bringout-oca-account-invoicing-account_invoice_block_payment** - From account: invoicing_account_invoice_block_payment
- **odoo-bringout-oca-account-invoicing-account_invoice_blocking** - From account: invoicing_account_invoice_blocking
- **odoo-bringout-oca-account-invoicing-account_invoice_change_currency** - From account: invoicing_account_invoice_change_currency
- **odoo-bringout-oca-account-invoicing-account_invoice_check_picking_date** - From account: invoicing_account_invoice_check_picking_date
- **odoo-bringout-oca-account-invoicing-account_invoice_check_total** - From account: invoicing_account_invoice_check_total
- **odoo-bringout-oca-account-invoicing-account_invoice_clearing** - From account: invoicing_account_invoice_clearing
- **odoo-bringout-oca-account-invoicing-account_invoice_crm_tag** - From account: invoicing_account_invoice_crm_tag
- **odoo-bringout-oca-account-invoicing-account_invoice_currency_taxes** - From account: invoicing_account_invoice_currency_taxes
- **odoo-bringout-oca-account-invoicing-account_invoice_customer_no_autofollow** - From account: invoicing_account_invoice_customer_no_autofollow
- **odoo-bringout-oca-account-invoicing-account_invoice_date_due** - From account: invoicing_account_invoice_date_due
- **odoo-bringout-oca-account-invoicing-account_invoice_default_code_column** - From account: invoicing_account_invoice_default_code_column
- **odoo-bringout-oca-account-invoicing-account_invoice_discount_date** - From account: invoicing_account_invoice_discount_date
- **odoo-bringout-oca-account-invoicing-account_invoice_discount_display_amount** - From account: invoicing_account_invoice_discount_display_amount
- **odoo-bringout-oca-account-invoicing-account_invoice_fiscal_position_update** - From account: invoicing_account_invoice_fiscal_position_update
- **odoo-bringout-oca-account-invoicing-account_invoice_fixed_discount** - From account: invoicing_account_invoice_fixed_discount
- **odoo-bringout-oca-account-invoicing-account_invoice_force_number** - From account: invoicing_account_invoice_force_number
- **odoo-bringout-oca-account-invoicing-account_invoice_google_document_ai** - From account: invoicing_account_invoice_google_document_ai
- **odoo-bringout-oca-account-invoicing-account_invoice_line_default_account** - From account: invoicing_account_invoice_line_default_account
- **odoo-bringout-oca-account-invoicing-account_invoice_mass_sending** - From account: invoicing_account_invoice_mass_sending
- **odoo-bringout-oca-account-invoicing-account_invoice_merge** - From account: invoicing_account_invoice_merge
- **odoo-bringout-oca-account-invoicing-account_invoice_partner_reference** - From account: invoicing_account_invoice_partner_reference
- **odoo-bringout-oca-account-invoicing-account_invoice_payment_retention** - From account: invoicing_account_invoice_payment_retention
- **odoo-bringout-oca-account-invoicing-account_invoice_payment_term_date_due** - From account: invoicing_account_invoice_payment_term_date_due
- **odoo-bringout-oca-account-invoicing-account_invoice_pricelist** - From account: invoicing_account_invoice_pricelist
- **odoo-bringout-oca-account-invoicing-account_invoice_pricelist_sale** - From account: invoicing_account_invoice_pricelist_sale
- **odoo-bringout-oca-account-invoicing-account_invoice_recipient_bank_currency** - From account: invoicing_account_invoice_recipient_bank_currency
- **odoo-bringout-oca-account-invoicing-account_invoice_refund_code** - From account: invoicing_account_invoice_refund_code
- **odoo-bringout-oca-account-invoicing-account_invoice_refund_line_selection** - From account: invoicing_account_invoice_refund_line_selection
- **odoo-bringout-oca-account-invoicing-account_invoice_refund_link** - From account: invoicing_account_invoice_refund_link
- **odoo-bringout-oca-account-invoicing-account_invoice_refund_reason** - From account: invoicing_account_invoice_refund_reason
- **odoo-bringout-oca-account-invoicing-account_invoice_refund_reason_skip_anglo_saxon** - From account: invoicing_account_invoice_refund_reason_skip_anglo_saxon
- **odoo-bringout-oca-account-invoicing-account_invoice_refund_reinvoice** - From account: invoicing_account_invoice_refund_reinvoice
- **odoo-bringout-oca-account-invoicing-account_invoice_section_sale_order** - From account: invoicing_account_invoice_section_sale_order
- **odoo-bringout-oca-account-invoicing-account_invoice_show_currency_rate** - From account: invoicing_account_invoice_show_currency_rate
- **odoo-bringout-oca-account-invoicing-account_invoice_supplier_ref_unique** - From account: invoicing_account_invoice_supplier_ref_unique
- **odoo-bringout-oca-account-invoicing-account_invoice_supplier_self_invoice** - From account: invoicing_account_invoice_supplier_self_invoice
- **odoo-bringout-oca-account-invoicing-account_invoice_supplierinfo_update** - From account: invoicing_account_invoice_supplierinfo_update
- **odoo-bringout-oca-account-invoicing-account_invoice_supplierinfo_update_discount** - From account: invoicing_account_invoice_supplierinfo_update_discount
- **odoo-bringout-oca-account-invoicing-account_invoice_supplierinfo_update_triple_discount** - From account: invoicing_account_invoice_supplierinfo_update_triple_discount
- **odoo-bringout-oca-account-invoicing-account_invoice_tax_note** - From account: invoicing_account_invoice_tax_note
- **odoo-bringout-oca-account-invoicing-account_invoice_tax_required** - From account: invoicing_account_invoice_tax_required
- **odoo-bringout-oca-account-invoicing-account_invoice_transmit_method** - From account: invoicing_account_invoice_transmit_method
- **odoo-bringout-oca-account-invoicing-account_invoice_tree_currency** - From account: invoicing_account_invoice_tree_currency
- **odoo-bringout-oca-account-invoicing-account_invoice_triple_discount** - From account: invoicing_account_invoice_triple_discount
- **odoo-bringout-oca-account-invoicing-account_invoice_validation_queued** - From account: invoicing_account_invoice_validation_queued
- **odoo-bringout-oca-account-invoicing-account_invoice_warn_message** - From account: invoicing_account_invoice_warn_message
- **odoo-bringout-oca-account-invoicing-account_mail_autosubscribe** - From account: invoicing_account_mail_autosubscribe
- **odoo-bringout-oca-account-invoicing-account_menu_invoice_refund** - From account: invoicing_account_menu_invoice_refund
- **odoo-bringout-oca-account-invoicing-account_move_auto_post_ref** - From account: invoicing_account_move_auto_post_ref
- **odoo-bringout-oca-account-invoicing-account_move_cancel_confirm** - From account: invoicing_account_move_cancel_confirm
- **odoo-bringout-oca-account-invoicing-account_move_sent_usability** - From account: invoicing_account_move_sent_usability
- **odoo-bringout-oca-account-invoicing-account_move_substate** - From account: invoicing_account_move_substate
- **odoo-bringout-oca-account-invoicing-account_move_tier_validation** - From account: invoicing_account_move_tier_validation
- **odoo-bringout-oca-account-invoicing-account_receipt_journal** - From account: invoicing_account_receipt_journal
- **odoo-bringout-oca-account-invoicing-account_receipt_send** - From account: invoicing_account_receipt_send
- **odoo-bringout-oca-account-invoicing-account_tax_change** - From account: invoicing_account_tax_change
- **odoo-bringout-oca-account-invoicing-account_tax_group_widget_base_amount** - From account: invoicing_account_tax_group_widget_base_amount
- **odoo-bringout-oca-account-invoicing-account_tax_one_vat** - From account: invoicing_account_tax_one_vat
- **odoo-bringout-oca-account-invoicing-account_tax_one_vat_purchase** - From account: invoicing_account_tax_one_vat_purchase
- **odoo-bringout-oca-account-invoicing-account_tax_one_vat_sale** - From account: invoicing_account_tax_one_vat_sale
- **odoo-bringout-oca-account-invoicing-partner_invoicing_mode** - From account: invoicing_partner_invoicing_mode
- **odoo-bringout-oca-account-invoicing-partner_invoicing_mode_at_shipping** - From account: invoicing_partner_invoicing_mode_at_shipping
- **odoo-bringout-oca-account-invoicing-partner_invoicing_mode_monthly** - From account: invoicing_partner_invoicing_mode_monthly
- **odoo-bringout-oca-account-invoicing-partner_last_invoice_date** - From account: invoicing_partner_last_invoice_date
- **odoo-bringout-oca-account-invoicing-portal_account_personal_data_only** - From account: invoicing_portal_account_personal_data_only
- **odoo-bringout-oca-account-invoicing-product_form_account_move_line_link** - From account: invoicing_product_form_account_move_line_link
- **odoo-bringout-oca-account-invoicing-purchase_invoicing_no_zero_line** - From account: invoicing_purchase_invoicing_no_zero_line
- **odoo-bringout-oca-account-invoicing-purchase_stock_picking_return_invoicing** - From account: invoicing_purchase_stock_picking_return_invoicing
- **odoo-bringout-oca-account-invoicing-sale_credit_note_reversal** - From account: invoicing_sale_credit_note_reversal
- **odoo-bringout-oca-account-invoicing-sale_invoicing_date_selection** - From account: invoicing_sale_invoicing_date_selection
- **odoo-bringout-oca-account-invoicing-sale_line_refund_to_invoice_qty** - From account: invoicing_sale_line_refund_to_invoice_qty
- **odoo-bringout-oca-account-invoicing-sale_line_refund_to_invoice_qty_skip_anglo_saxon** - From account: invoicing_sale_line_refund_to_invoice_qty_skip_anglo_saxon
- **odoo-bringout-oca-account-invoicing-sale_order_invoicing_grouping_criteria** - From account: invoicing_sale_order_invoicing_grouping_criteria
- **odoo-bringout-oca-account-invoicing-sale_order_invoicing_qty_percentage** - From account: invoicing_sale_order_invoicing_qty_percentage
- **odoo-bringout-oca-account-invoicing-sale_order_invoicing_queued** - From account: invoicing_sale_order_invoicing_queued
- **odoo-bringout-oca-account-invoicing-sale_stock_picking_invoicing** - From account: invoicing_sale_stock_picking_invoicing
- **odoo-bringout-oca-account-invoicing-sale_timesheet_invoice_description** - From account: invoicing_sale_timesheet_invoice_description
- **odoo-bringout-oca-account-invoicing-stock_account_move_reset_to_draft** - From account: invoicing_stock_account_move_reset_to_draft
- **odoo-bringout-oca-account-invoicing-stock_picking_invoicing** - From account: invoicing_stock_picking_invoicing
- **odoo-bringout-oca-account-invoicing-stock_picking_return_refund_option** - From account: invoicing_stock_picking_return_refund_option
## Installation
Install any package from this category:
```bash
# Install from local directory
pip install packages/oca-financial/PACKAGE_NAME/
# Install in development mode
pip install -e packages/oca-financial/PACKAGE_NAME/
# Using uv (recommended for speed)
uv add packages/oca-financial/PACKAGE_NAME/
```
## Repository Structure
Each package in this repository follows the standard Odoo addon structure:
```
oca-financial/
├── odoo-bringout-oca-PROJECT-ADDON/
│ ├── ADDON_NAME/ # Complete addon code
│ │ ├── __init__.py
│ │ ├── __manifest__.py
│ │ └── ... (models, views, etc.)
│ ├── pyproject.toml # Python package configuration
│ └── README.md # Package documentation
└── ...
```
## Contributing
These packages are maintained as part of the [OCA (Odoo Community Association)](https://github.com/OCA) ecosystem.
## License
Each package maintains its original license as specified in the OCA repositories.

View file

@ -0,0 +1,44 @@
# Account Analytic Account Tag
Odoo addon: account_analytic_account_tag
## Installation
```bash
pip install odoo-bringout-oca-account-analytic-account_analytic_account_tag
```
## Dependencies
This addon depends on:
- account_analytic_tag
## Manifest Information
- **Name**: Account Analytic Account Tag
- **Version**: 16.0.1.0.0
- **Category**: N/A
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/account-analytic](https://github.com/OCA/account-analytic) branch 16.0, addon `account_analytic_account_tag`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,79 @@
============================
Account Analytic Account Tag
============================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:a387007a3590635b12f916c01e59807fea8245a93bce16f7f5536414315aab98
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--analytic-lightgray.png?logo=github
:target: https://github.com/OCA/account-analytic/tree/16.0/account_analytic_account_tag
:alt: OCA/account-analytic
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-analytic-16-0/account-analytic-16-0-account_analytic_account_tag
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/account-analytic&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
The goal of this module is to restore the Analytic Tags fields (`tag_ids`) on the
Analytic Account (`account.analytic.account`) model that was present until Odoo 11.
It allows to classify analytic accounts according to different categories.
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-analytic/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/account-analytic/issues/new?body=module:%20account_analytic_account_tag%0Aversion:%2016.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.
Credits
=======
Authors
~~~~~~~
* ACSONE SA/NV
Contributors
~~~~~~~~~~~~
* Hughes Damry <hughes.damry@acsone.eu>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/account-analytic <https://github.com/OCA/account-analytic/tree/16.0/account_analytic_account_tag>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,15 @@
# Copyright 2023 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Account Analytic Account Tag",
"summary": """Restore the tag_ids in account.analytic.account""",
"version": "16.0.1.0.0",
"license": "AGPL-3",
"author": "ACSONE SA/NV, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/account-analytic",
"depends": ["account_analytic_tag"],
"data": ["views/account_analytic_account_views.xml"],
"demo": [],
"installable": True,
}

View file

@ -0,0 +1,24 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_account_tag
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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_analytic_account_tag
#: model:ir.model,name:account_analytic_account_tag.model_account_analytic_account
msgid "Analytic Account"
msgstr ""
#. module: account_analytic_account_tag
#: model:ir.model.fields,field_description:account_analytic_account_tag.field_account_analytic_account__tag_ids
msgid "Tags"
msgstr ""

View file

@ -0,0 +1,24 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_account_tag
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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_analytic_account_tag
#: model:ir.model,name:account_analytic_account_tag.model_account_analytic_account
msgid "Analytic Account"
msgstr "Analitički konto"
#. module: account_analytic_account_tag
#: model:ir.model.fields,field_description:account_analytic_account_tag.field_account_analytic_account__tag_ids
msgid "Tags"
msgstr "Oznake"

View file

@ -0,0 +1,26 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_account_tag
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-17 08:02+0000\n"
"PO-Revision-Date: 2023-08-17 08:02+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_analytic_account_tag
#: model:ir.model,name:account_analytic_account_tag.model_account_analytic_account
msgid "Analytic Account"
msgstr "Compte analytique"
#. module: account_analytic_account_tag
#: model:ir.model.fields,field_description:account_analytic_account_tag.field_account_analytic_account__tag_ids
msgid "Tags"
msgstr "Éiquettes"

View file

@ -0,0 +1,27 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_account_tag
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-22 13:34+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: account_analytic_account_tag
#: model:ir.model,name:account_analytic_account_tag.model_account_analytic_account
msgid "Analytic Account"
msgstr "Conto analitico"
#. module: account_analytic_account_tag
#: model:ir.model.fields,field_description:account_analytic_account_tag.field_account_analytic_account__tag_ids
msgid "Tags"
msgstr "Etichette"

View file

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

View file

@ -0,0 +1,17 @@
# Copyright 2023 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AccountAnalyticAccount(models.Model):
_inherit = ["account.analytic.account"]
tag_ids = fields.Many2many(
"account.analytic.tag",
"account_analytic_account_tag_rel",
"account_id",
"tag_id",
string="Tags",
copy=True,
)

View file

@ -0,0 +1 @@
* Hughes Damry <hughes.damry@acsone.eu>

View file

@ -0,0 +1,4 @@
The goal of this module is to restore the Analytic Tags fields (`tag_ids`) on the
Analytic Account (`account.analytic.account`) model that was present until Odoo 11.
It allows to classify analytic accounts according to different categories.

View file

@ -0,0 +1,423 @@
<?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: https://docutils.sourceforge.io/" />
<title>Account Analytic Account Tag</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
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, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="account-analytic-account-tag">
<h1 class="title">Account Analytic Account Tag</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:a387007a3590635b12f916c01e59807fea8245a93bce16f7f5536414315aab98
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/OCA/account-analytic/tree/16.0/account_analytic_account_tag"><img alt="OCA/account-analytic" src="https://img.shields.io/badge/github-OCA%2Faccount--analytic-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-analytic-16-0/account-analytic-16-0-account_analytic_account_tag"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-analytic&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>The goal of this module is to restore the Analytic Tags fields (<cite>tag_ids</cite>) on the
Analytic Account (<cite>account.analytic.account</cite>) model that was present until Odoo 11.</p>
<p>It allows to classify analytic accounts according to different categories.</p>
<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="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="#toc-entry-1">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-analytic/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 to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/account-analytic/issues/new?body=module:%20account_analytic_account_tag%0Aversion:%2016.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="#toc-entry-2">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Hughes Damry &lt;<a class="reference external" href="mailto:hughes.damry&#64;acsone.eu">hughes.damry&#64;acsone.eu</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-analytic/tree/16.0/account_analytic_account_tag">OCA/account-analytic</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2023 Acsone SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="view_account_analytic_account_form">
<field
name="name"
>account.analytic.account.form (in account_analytic_account_tag)</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_form" />
<field name="arch" type="xml">
<field name="plan_id" position="after">
<field name="id" invisible="1" />
<field
name="tag_ids"
widget="many2many_tags"
options="{'color_field': 'color'}"
domain="['|', ('account_analytic_id', '=', False),('account_analytic_id', '=', id)]"
/>
</field>
</field>
</record>
<record model="ir.ui.view" id="account_analytic_account_tree_inherit_tag">
<field
name="name"
>account.analytic.account.tree (in account_analytic_account_tag)</field>
<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="plan_id" position="after">
<field
name="tag_ids"
widget="many2many_tags"
options="{'color_field': 'color'}"
/>
</field>
</field>
</record>
<record id="view_account_analytic_account_search" model="ir.ui.view">
<field
name="name"
>account.analytic.account.search (in account_analytic_account_tag)</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_search" />
<field name="arch" type="xml">
<field name="partner_id" position="before">
<field name="tag_ids" />
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Account_analytic_account_tag Module - account_analytic_account_tag
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for account_analytic_account_tag. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [account_analytic_tag](../../odoo-bringout-oca-account-analytic-account_analytic_tag)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon account_analytic_account_tag or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-account-analytic-account_analytic_account_tag"
# or
uv pip install odoo-bringout-oca-account-analytic-account_analytic_account_tag"
```

View file

@ -0,0 +1,11 @@
# Models
Detected core models and extensions in account_analytic_account_tag.
```mermaid
classDiagram
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: account_analytic_account_tag. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon account_analytic_account_tag
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,8 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_analytic_account_tag
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-account-analytic-account_analytic_account_tag"
version = "16.0.0"
description = "Account Analytic Account Tag - Restore the tag_ids in account.analytic.account"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-account-analytic-account_analytic_tag>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["account_analytic_account_tag"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,44 @@
# Account analytic distribution manual
Odoo addon: account_analytic_distribution_manual
## Installation
```bash
pip install odoo-bringout-oca-account-analytic-account_analytic_distribution_manual
```
## Dependencies
This addon depends on:
- account
## Manifest Information
- **Name**: Account analytic distribution manual
- **Version**: 16.0.2.4.2
- **Category**: N/A
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/account-analytic](https://github.com/OCA/account-analytic) branch 16.0, addon `account_analytic_distribution_manual`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,98 @@
====================================
Account analytic distribution manual
====================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:035507f0c4c09d8c7596c84710ffd03222bf8cb98b278245b67f1c6c88069ee9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--analytic-lightgray.png?logo=github
:target: https://github.com/OCA/account-analytic/tree/16.0/account_analytic_distribution_manual
:alt: OCA/account-analytic
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-analytic-16-0/account-analytic-16-0-account_analytic_distribution_manual
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/account-analytic&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module provides an easy way to quickly autocomplete analytic accounts on any model that has a field for analytic accounts.
**Table of contents**
.. contents::
:local:
Configuration
=============
#. Go to Invoicing > Configuration > Analytic Accounting > Manual Analytic Distributions
#. Create or edit the necessary records.
Usage
=====
#. Go to Invoicing > Customer > Invoices
#. Open or create a invoice
#. On the invoice line, select the analytic account. A new field labeled "Manual Distribution" should appear at the top.
#. Select a record from the list, and it will be added to the distribution and the invoice lines.
Known issues / Roadmap
======================
Compatibility with `Analytic Distribution Models` to use Manual Distribution as Default values
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-analytic/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/account-analytic/issues/new?body=module:%20account_analytic_distribution_manual%0Aversion:%2016.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.
Credits
=======
Authors
~~~~~~~
* Tecnativa
Contributors
~~~~~~~~~~~~
* Tecnativa (https://www.tecnativa.com):
* Carlos Lopez
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/account-analytic <https://github.com/OCA/account-analytic/tree/16.0/account_analytic_distribution_manual>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,5 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models
from . import reports
from .hooks import post_init_hook

View file

@ -0,0 +1,28 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Account analytic distribution manual",
"summary": "Account analytic distribution manual",
"version": "16.0.2.4.2",
"license": "AGPL-3",
"website": "https://github.com/OCA/account-analytic",
"author": "Tecnativa, Odoo Community Association (OCA)",
"depends": ["account"],
"data": [
"security/analytic_security.xml",
"security/ir.model.access.csv",
"views/account_analytic_distribution_manual_views.xml",
"views/account_analytic_line_views.xml",
],
"assets": {
"web.assets_backend": [
"account_analytic_distribution_manual/static/src/components/**/*",
],
"web.assets_tests": [
"account_analytic_distribution_manual/static/src/tests/tours/**/*",
],
},
"installable": True,
"post_init_hook": "post_init_hook",
}

View file

@ -0,0 +1,196 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import SUPERUSER_ID, api, tools
# metadata for all models related to account_analytic_tag(m2m)
# add more models if needed
RELATION_M2M_INFO = {
"account_analytic_tag_account_asset_profile_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "account_asset_profile",
"column2": "account_asset_profile_id",
},
"account_analytic_tag_hr_expense_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "hr_expense",
"column2": "hr_expense_id",
},
"account_reconcile_model_second_analytic_tag_rel": {
"table2": "account_reconcile_model",
"column2": "account_reconcile_model_id",
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
},
"hr_timesheet_switch_line_tag_rel": {
"table2": "hr_timesheet_switch",
"column2": "line_id",
"table1": "account_analytic_tag",
"column1": "tag_id",
},
"account_analytic_tag_sale_order_line_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "sale_order_line",
"column2": "sale_order_line_id",
},
"account_reconcile_model_analytic_tag_rel": {
"table2": "account_reconcile_model_line",
"column2": "account_reconcile_model_line_id",
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
},
"account_analytic_tag_mis_report_instance_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "mis_report_instance",
"column2": "mis_report_instance_id",
},
"account_analytic_tag_account_move_line_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "account_move_line",
"column2": "account_move_line_id",
},
"account_analytic_tag_mis_report_instance_period_rel": {
"table2": "mis_report_instance_period",
"column2": "mis_report_instance_period_id",
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
},
"account_analytic_tag_general_ledger_report_wizard_rel": {
"table2": "general_ledger_report_wizard",
"column2": "general_ledger_report_wizard_id",
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
},
"account_analytic_default_account_analytic_tag_rel": {
"table2": "account_analytic_default",
"column2": "account_analytic_default_id",
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
},
"account_analytic_tag_purchase_order_line_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "purchase_order_line",
"column2": "purchase_order_line_id",
},
"account_analytic_tag_account_asset_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "account_asset",
"column2": "account_asset_id",
},
"account_analytic_tag_project_task_stock_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "project_task",
"column2": "project_task_id",
},
"account_analytic_tag_project_task_rel": {
"table1": "account_analytic_tag",
"column1": "account_analytic_tag_id",
"table2": "project_task",
"column2": "project_task_id",
},
"account_analytic_line_tag_rel": {
"table2": "account_analytic_line",
"column2": "line_id",
"table1": "account_analytic_tag",
"column1": "tag_id",
},
}
def post_init_hook(cr, registry):
if tools.table_exists(cr, "account_analytic_tag"):
env = api.Environment(cr, SUPERUSER_ID, {})
DistributionManual = env["account.analytic.distribution.manual"]
sql = """
WITH counted_tags AS (
SELECT
tag.id,
tag.name,
tag.active,
tag.company_id,
ROW_NUMBER() OVER (PARTITION BY tag.name ORDER BY tag.id) AS row_count
FROM account_analytic_tag tag
WHERE tag.active_analytic_distribution = true
)
SELECT
CASE
WHEN row_count = 1 THEN tag.name
ELSE CONCAT(tag.name, ' (', tag.id, ')')
END AS name,
tag.id,
tag.active,
tag.company_id,
distribution.account_id,
distribution.percentage
FROM
counted_tags tag
INNER JOIN
account_analytic_distribution distribution ON tag.id = distribution.tag_id;
"""
env.cr.execute(sql)
distribution_by_tag = {}
for data in env.cr.dictfetchall():
tag_key = (data["id"], data["name"], data["active"], data["company_id"])
distribution_by_tag.setdefault(tag_key, []).append(data)
distribution_map = {}
all_tag_ids = []
for tag_key, distributions in distribution_by_tag.items():
tag_id, tag_name, tag_active, company_id = tag_key
distribution_manual_val = {
"name": tag_name,
"active": tag_active,
"company_id": company_id or env.company.id,
"analytic_distribution": {
distribution["account_id"]: distribution["percentage"]
for distribution in distributions
},
}
new_distribution = DistributionManual.create(distribution_manual_val)
distribution_map[tag_id] = new_distribution
all_tag_ids.append(tag_id)
# Update references in all models related to account_analytic_tag(m2m)
for table_m2m, info in RELATION_M2M_INFO.items():
column1 = info["column1"]
table2 = info["table2"]
column2 = info["column2"]
res_model_name = table2.replace("_", ".")
if (
res_model_name in env
and "manual_distribution_id" in env[res_model_name]._fields
and all_tag_ids
):
sql = f"""
SELECT {column1}, {column2}
FROM {table_m2m}
WHERE {column1} IN %s
"""
env.cr.execute(sql, (tuple(all_tag_ids),))
for tag_id, res_id in env.cr.fetchall():
env.cr.execute(
f"""
UPDATE {table2}
SET manual_distribution_id = %s
WHERE id = %s
""",
(distribution_map[tag_id].id, res_id),
)
# Define the value of manual_distribution_id in the line items
env.cr.execute(
"""
UPDATE account_analytic_line AS aal
SET manual_distribution_id = aml.manual_distribution_id
FROM account_move_line AS aml
WHERE aal.move_line_id = aml.id
AND aml.manual_distribution_id IS NOT NULL
AND aal.manual_distribution_id IS NULL
""",
)

View file

@ -0,0 +1,243 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_distribution_manual
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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_analytic_distribution_manual
#. odoo-python
#: code:addons/account_analytic_distribution_manual/models/account_analytic_distribution_manual.py:0
#, python-format
msgid "%s (Copy)"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_distribution_manual
msgid "Account analytic distribution manual"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__active
msgid "Active"
msgstr ""
#. module: account_analytic_distribution_manual
#: model_terms:ir.actions.act_window,help:account_analytic_distribution_manual.action_account_analytic_distribution_manual
msgid "Add a new Manual Analytic Distributions"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution
msgid "Analytic"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid "Analytic Account Names"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic Accounts"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_search
msgid "Analytic Distribution Search"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_line
msgid "Analytic Line"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_analytic_mixin
msgid "Analytic Mixin"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_precision
msgid "Analytic Precision"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic accounts computed from analytic distribution."
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid "Analytic distribution (importable)"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_line__manual_distribution_id
msgid "Analytic distribution manual"
msgstr ""
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_search
msgid "Archived"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_base
msgid "Base"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid ""
"Comma-separated analytic account names, in case it is useful to be included "
"in the exported data."
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__company_id
msgid "Company"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_uid
msgid "Created by"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_date
msgid "Created on"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid ""
"Defining this field, it will set the analytical distribution in JSON format,"
" but using the analytic accounts names as keys of the dictionary, so it "
"eases the human input."
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__display_name
msgid "Display Name"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__id
msgid "ID"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_invoice_report
msgid "Invoices Statistics"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual____last_update
msgid "Last Modified on"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_uid
msgid "Last Updated by"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_date
msgid "Last Updated on"
msgstr ""
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "Loading..."
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.actions.act_window,name:account_analytic_distribution_manual.action_account_analytic_distribution_manual
#: model:ir.ui.menu,name:account_analytic_distribution_manual.account_analytic_distribution_manual_menu
msgid "Manual Analytic Distributions"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_invoice_report__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__manual_distribution_id
msgid "Manual Distribution"
msgstr ""
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.xml:0
#, python-format
msgid "Manual distribution"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__name
msgid "Name"
msgstr ""
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
msgid "Name..."
msgstr ""
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "No Analytic Distribution Manual found"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.constraint,message:account_analytic_distribution_manual.constraint_account_analytic_distribution_manual_unique_name_by_company
msgid "The name must be unique per Company!"
msgstr ""

View file

@ -0,0 +1,243 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_distribution_manual
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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_analytic_distribution_manual
#. odoo-python
#: code:addons/account_analytic_distribution_manual/models/account_analytic_distribution_manual.py:0
#, python-format
msgid "%s (Copy)"
msgstr "%s (Kopija)"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_distribution_manual
msgid "Account analytic distribution manual"
msgstr "Ručna analitička distribucija računa"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__active
msgid "Active"
msgstr "Aktivan"
#. module: account_analytic_distribution_manual
#: model_terms:ir.actions.act_window,help:account_analytic_distribution_manual.action_account_analytic_distribution_manual
msgid "Add a new Manual Analytic Distributions"
msgstr "Dodaj novu ručnu analitičku distribuciju"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution
msgid "Analytic"
msgstr "Analitika"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid "Analytic Account Names"
msgstr "Nazivi analitičkih računa"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic Accounts"
msgstr "Analitički računi"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_search
msgid "Analytic Distribution Search"
msgstr "Pretraga analitičkih distribucija"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_line
msgid "Analytic Line"
msgstr "Analitička stavka"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_analytic_mixin
msgid "Analytic Mixin"
msgstr "Mixin Analitike"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_precision
msgid "Analytic Precision"
msgstr "Preciznost analitike"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic accounts computed from analytic distribution."
msgstr "Analitički računi računati iz analitičke distribucije."
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid "Analytic distribution (importable)"
msgstr "Analitička distribucija (uvozljiva)"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_line__manual_distribution_id
msgid "Analytic distribution manual"
msgstr "Ručna analitička distribucija"
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_search
msgid "Archived"
msgstr "Arhivirano"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_base
msgid "Base"
msgstr "Osnova"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid ""
"Comma-separated analytic account names, in case it is useful to be included "
"in the exported data."
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__company_id
msgid "Company"
msgstr "Preduzeće"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid ""
"Defining this field, it will set the analytical distribution in JSON format,"
" but using the analytic accounts names as keys of the dictionary, so it "
"eases the human input."
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__id
msgid "ID"
msgstr "ID"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Statistika faktura"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_move_line
msgid "Journal Item"
msgstr "Stavka žurnala"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "Loading..."
msgstr "Učitavanje..."
#. module: account_analytic_distribution_manual
#: model:ir.actions.act_window,name:account_analytic_distribution_manual.action_account_analytic_distribution_manual
#: model:ir.ui.menu,name:account_analytic_distribution_manual.account_analytic_distribution_manual_menu
msgid "Manual Analytic Distributions"
msgstr "Ručne analitičke distribucije"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_invoice_report__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__manual_distribution_id
msgid "Manual Distribution"
msgstr "Ručna distribucija"
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.xml:0
#, python-format
msgid "Manual distribution"
msgstr "Ručna distribucija"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__name
msgid "Name"
msgstr "Naziv:"
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
msgid "Name..."
msgstr "Naziv..."
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "No Analytic Distribution Manual found"
msgstr "Nije pronađena ručna analitička distribucija"
#. module: account_analytic_distribution_manual
#: model:ir.model.constraint,message:account_analytic_distribution_manual.constraint_account_analytic_distribution_manual_unique_name_by_company
msgid "The name must be unique per Company!"
msgstr "Naziv mora biti jedinstven po kompaniji!"

View file

@ -0,0 +1,258 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_distribution_manual
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-29 06:51-0500\n"
"PO-Revision-Date: 2025-06-06 14:25+0000\n"
"Last-Translator: Francisco Javier Galera Martínez <javier.galera@sygel.es>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.4\n"
#. module: account_analytic_distribution_manual
#. odoo-python
#: code:addons/account_analytic_distribution_manual/models/account_analytic_distribution_manual.py:0
#, python-format
msgid "%s (Copy)"
msgstr "%s (Copia)"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_distribution_manual
msgid "Account analytic distribution manual"
msgstr "Distribución Analítica Manual"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__active
msgid "Active"
msgstr "Activo"
#. module: account_analytic_distribution_manual
#: model_terms:ir.actions.act_window,help:account_analytic_distribution_manual.action_account_analytic_distribution_manual
msgid "Add a new Manual Analytic Distributions"
msgstr "Agregar nueva Distribución Analítica Manual"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution
msgid "Analytic"
msgstr "Analítico"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid "Analytic Account Names"
msgstr "Nombres de cuentas analíticas"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic Accounts"
msgstr "Cuentas Analíticas"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_search
msgid "Analytic Distribution Search"
msgstr "Buscar Distribución Analítica"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_line
msgid "Analytic Line"
msgstr "Línea Analítica"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_analytic_mixin
msgid "Analytic Mixin"
msgstr "Mezcla analítica"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_precision
msgid "Analytic Precision"
msgstr "Precisión Analítica"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic accounts computed from analytic distribution."
msgstr "Cuentas analíticas calculadas a partir de la distribución analítica."
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid "Analytic distribution (importable)"
msgstr "Distribución analítica (importable)"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_line__manual_distribution_id
msgid "Analytic distribution manual"
msgstr "Distribución Analítica Manual"
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_search
msgid "Archived"
msgstr "Archivado"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_base
msgid "Base"
msgstr "Base"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid ""
"Comma-separated analytic account names, in case it is useful to be included "
"in the exported data."
msgstr ""
"Nombres de cuentas analíticas separados por comas, en caso de que sea útil "
"incluirlos en los datos exportados."
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__company_id
msgid "Company"
msgstr "Compañia"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_date
msgid "Created on"
msgstr "Creado el"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid ""
"Defining this field, it will set the analytical distribution in JSON format, "
"but using the analytic accounts names as keys of the dictionary, so it eases "
"the human input."
msgstr ""
"Al definir este campo, se establecerá la distribución analítica en formato "
"JSON, pero utilizando los nombres de las cuentas analíticas como claves del "
"diccionario, por lo que facilita la entrada humana."
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__display_name
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__id
msgid "ID"
msgstr "ID"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Estadísticas de facturas"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_move_line
msgid "Journal Item"
msgstr "Artículo de diario"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual____last_update
msgid "Last Modified on"
msgstr "Última modificación el"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "Loading..."
msgstr "Cargando..."
#. module: account_analytic_distribution_manual
#: model:ir.actions.act_window,name:account_analytic_distribution_manual.action_account_analytic_distribution_manual
#: model:ir.ui.menu,name:account_analytic_distribution_manual.account_analytic_distribution_manual_menu
msgid "Manual Analytic Distributions"
msgstr "Distribuciones analíticas manuales"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_invoice_report__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__manual_distribution_id
msgid "Manual Distribution"
msgstr "Distribución manual"
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.xml:0
#, python-format
msgid "Manual distribution"
msgstr "Distribución Manual"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__name
msgid "Name"
msgstr "Nombre"
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
msgid "Name..."
msgstr "Nombre..."
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "No Analytic Distribution Manual found"
msgstr "Distribuciones Manuales no encontradas"
#. module: account_analytic_distribution_manual
#: model:ir.model.constraint,message:account_analytic_distribution_manual.constraint_account_analytic_distribution_manual_unique_name_by_company
msgid "The name must be unique per Company!"
msgstr "El nombre debe ser único por compañía!"
#~ msgid "Add a new Manual analytic distributions"
#~ msgstr "Agregar nueva Distribución Analítica Manual"
#~ msgid "Manual analytic distributions"
#~ msgstr "Distribuciones analíticas manuales"

View file

@ -0,0 +1,249 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_distribution_manual
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-02-12 21:06+0000\n"
"Last-Translator: Alexis de Lattre <alexis@via.ecp.fr>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: account_analytic_distribution_manual
#. odoo-python
#: code:addons/account_analytic_distribution_manual/models/account_analytic_distribution_manual.py:0
#, python-format
msgid "%s (Copy)"
msgstr "%s (Copie)"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_distribution_manual
msgid "Account analytic distribution manual"
msgstr "Distribution analytique manuelle"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__active
msgid "Active"
msgstr "Actif"
#. module: account_analytic_distribution_manual
#: model_terms:ir.actions.act_window,help:account_analytic_distribution_manual.action_account_analytic_distribution_manual
msgid "Add a new Manual Analytic Distributions"
msgstr "Ajouter une nouvelle distribution analytique manuelle"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution
msgid "Analytic"
msgstr "Analytique"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid "Analytic Account Names"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic Accounts"
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_search
msgid "Analytic Distribution Search"
msgstr "Recherche de distribution analytique"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_line
msgid "Analytic Line"
msgstr "Ligne analytique"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_analytic_mixin
msgid "Analytic Mixin"
msgstr "Mixin analytique"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_precision
msgid "Analytic Precision"
msgstr "Précision analytique"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic accounts computed from analytic distribution."
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid "Analytic distribution (importable)"
msgstr "Distribution analytique (importable)"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_line__manual_distribution_id
msgid "Analytic distribution manual"
msgstr "Distribution analytique manuelle"
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_search
msgid "Archived"
msgstr "Archivé"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_base
msgid "Base"
msgstr "Base"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid ""
"Comma-separated analytic account names, in case it is useful to be included "
"in the exported data."
msgstr ""
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__company_id
msgid "Company"
msgstr "Société"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_date
msgid "Created on"
msgstr "Créé le"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid ""
"Defining this field, it will set the analytical distribution in JSON format, "
"but using the analytic accounts names as keys of the dictionary, so it eases "
"the human input."
msgstr ""
"Le fait de définir ce champ va enregistrer la distribution analytique au "
"format JSON en utilisant les noms des comptes analytiques comme clés du "
"dictionnaire, ce qui facilite la saisie."
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__id
msgid "ID"
msgstr "ID"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Statistiques de facturation"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_move_line
msgid "Journal Item"
msgstr "Écriture comptable"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "Loading..."
msgstr "Chargement..."
#. module: account_analytic_distribution_manual
#: model:ir.actions.act_window,name:account_analytic_distribution_manual.action_account_analytic_distribution_manual
#: model:ir.ui.menu,name:account_analytic_distribution_manual.account_analytic_distribution_manual_menu
msgid "Manual Analytic Distributions"
msgstr "Distributions analytiques manuelles"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_invoice_report__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__manual_distribution_id
msgid "Manual Distribution"
msgstr "Distribution manuelle"
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.xml:0
#, python-format
msgid "Manual distribution"
msgstr "Distribution manuelle"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__name
msgid "Name"
msgstr "Nom"
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
msgid "Name..."
msgstr "Nom..."
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "No Analytic Distribution Manual found"
msgstr "Aucune distribution analytique manuelle trouvée"
#. module: account_analytic_distribution_manual
#: model:ir.model.constraint,message:account_analytic_distribution_manual.constraint_account_analytic_distribution_manual_unique_name_by_company
msgid "The name must be unique per Company!"
msgstr "Le nom doit être unique au sein de chaque société !"

View file

@ -0,0 +1,254 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_distribution_manual
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-03-06 11:53+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.2\n"
#. module: account_analytic_distribution_manual
#. odoo-python
#: code:addons/account_analytic_distribution_manual/models/account_analytic_distribution_manual.py:0
#, python-format
msgid "%s (Copy)"
msgstr "%s (copia)"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_distribution_manual
msgid "Account analytic distribution manual"
msgstr "Distribuzione analitica conto manuale"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__active
msgid "Active"
msgstr "Attiva"
#. module: account_analytic_distribution_manual
#: model_terms:ir.actions.act_window,help:account_analytic_distribution_manual.action_account_analytic_distribution_manual
msgid "Add a new Manual Analytic Distributions"
msgstr "Aggiungere una nuova distribuzione analitica manuale"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution
msgid "Analytic"
msgstr "Analitico"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid "Analytic Account Names"
msgstr "Nomi conto analitico"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic Accounts"
msgstr "Conti analitici"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_search
msgid "Analytic Distribution Search"
msgstr "Ricerca distribuzione analitica"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_analytic_line
msgid "Analytic Line"
msgstr "Riga analitica"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_analytic_mixin
msgid "Analytic Mixin"
msgstr "Mixin analitica"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_precision
msgid "Analytic Precision"
msgstr "Precisione analitica"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_ids
msgid "Analytic accounts computed from analytic distribution."
msgstr "Conti analitici calcolati da distribuzione analitica."
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid "Analytic distribution (importable)"
msgstr "Distribuzione analitica (importabile)"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_line__manual_distribution_id
msgid "Analytic distribution manual"
msgstr "Distribuzione analitica manuale"
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_search
msgid "Archived"
msgstr "In archivio"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_base
msgid "Base"
msgstr "Imponibile"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_account_names
msgid ""
"Comma-separated analytic account names, in case it is useful to be included "
"in the exported data."
msgstr ""
"Nomi conti analitici separati da virgola, nel caso sia utile includerli nei "
"dati esportati."
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__company_id
msgid "Company"
msgstr "Azienda"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__create_date
msgid "Created on"
msgstr "Creato il"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_manual__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_analytic_distribution_model__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_account_reconcile_model_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_analytic_mixin__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_hr_expense_split__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_purchase_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_sale_order_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_move_line__analytic_distribution_import
#: model:ir.model.fields,help:account_analytic_distribution_manual.field_stock_scrap__analytic_distribution_import
msgid ""
"Defining this field, it will set the analytical distribution in JSON format, "
"but using the analytic accounts names as keys of the dictionary, so it eases "
"the human input."
msgstr ""
"Definendo questo campo, verrà impostata la distribuzione analitica in "
"formato JSON, ma utilizzando i nomi degli account analitici come chiavi del "
"dizionario, in modo da semplificare l'inserimento umano."
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__id
msgid "ID"
msgstr "ID"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Statistiche fatture"
#. module: account_analytic_distribution_manual
#: model:ir.model,name:account_analytic_distribution_manual.model_account_move_line
msgid "Journal Item"
msgstr "Movimento contabile"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "Loading..."
msgstr "Caricamento ..."
#. module: account_analytic_distribution_manual
#: model:ir.actions.act_window,name:account_analytic_distribution_manual.action_account_analytic_distribution_manual
#: model:ir.ui.menu,name:account_analytic_distribution_manual.account_analytic_distribution_manual_menu
msgid "Manual Analytic Distributions"
msgstr "Distribuzione analitica manuale"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_model__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_invoice_report__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_reconcile_model_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_analytic_mixin__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_hr_expense_split__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_purchase_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_sale_order_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_move_line__manual_distribution_id
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_stock_scrap__manual_distribution_id
msgid "Manual Distribution"
msgstr "Distribuzione manuale"
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.xml:0
#, python-format
msgid "Manual distribution"
msgstr "Distribuzione manuale"
#. module: account_analytic_distribution_manual
#: model:ir.model.fields,field_description:account_analytic_distribution_manual.field_account_analytic_distribution_manual__name
msgid "Name"
msgstr "Nome"
#. module: account_analytic_distribution_manual
#: model_terms:ir.ui.view,arch_db:account_analytic_distribution_manual.view_account_analytic_distribution_manual_form
msgid "Name..."
msgstr "Nome..."
#. module: account_analytic_distribution_manual
#. odoo-javascript
#: code:addons/account_analytic_distribution_manual/static/src/components/analytic_distribution/analytic_distribution.esm.js:0
#, python-format
msgid "No Analytic Distribution Manual found"
msgstr "Nessuna distribuzione analitica manuale trovata"
#. module: account_analytic_distribution_manual
#: model:ir.model.constraint,message:account_analytic_distribution_manual.constraint_account_analytic_distribution_manual_unique_name_by_company
msgid "The name must be unique per Company!"
msgstr "Il nome deve essere univoco per azienda!"
#~ msgid "Manual Distribution ID"
#~ msgstr "ID distribuzione manuale"

View file

@ -0,0 +1,19 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openupgradelib import openupgrade
@openupgrade.migrate()
def migrate(env, version):
openupgrade.logged_query(
env.cr,
"""
UPDATE account_analytic_line AS aal
SET manual_distribution_id = aml.manual_distribution_id
FROM account_move_line AS aml
WHERE aal.move_line_id = aml.id
AND aml.manual_distribution_id IS NOT NULL
AND aal.manual_distribution_id IS NULL
""",
)

View file

@ -0,0 +1,5 @@
from . import account_analytic_distribution_manual
from . import account_analytic_line
from . import account_move_line
from . import analytic_mixin
from . import base

View file

@ -0,0 +1,31 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
class AccountAnalyticDistributionManual(models.Model):
_name = "account.analytic.distribution.manual"
_inherit = "analytic.mixin"
_description = "Account analytic distribution manual"
name = fields.Char(required=True)
active = fields.Boolean(default=True)
company_id = fields.Many2one(
"res.company", required=True, default=lambda self: self.env.company
)
_sql_constraints = [
(
"unique_name_by_company",
"unique(name, company_id)",
"The name must be unique per Company!",
),
]
@api.returns("self", lambda value: value.id)
def copy(self, default=None):
default = dict(default or {})
if "name" not in default:
default["name"] = _("%s (Copy)") % self.name
return super().copy(default=default)

View file

@ -0,0 +1,12 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AccountAnalyticLine(models.Model):
_inherit = "account.analytic.line"
manual_distribution_id = fields.Many2one(
comodel_name="account.analytic.distribution.manual",
string="Analytic distribution manual",
)

View file

@ -0,0 +1,14 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
def _prepare_analytic_lines(self):
vals = super()._prepare_analytic_lines()
if self.manual_distribution_id:
for val in vals:
val.update({"manual_distribution_id": self.manual_distribution_id.id})
return vals

View file

@ -0,0 +1,50 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class AnalyticMixin(models.AbstractModel):
_inherit = "analytic.mixin"
manual_distribution_id = fields.Many2one("account.analytic.distribution.manual")
analytic_distribution_import = fields.Json(
compute="_compute_analytic_distribution_import",
inverse="_inverse_analytic_distribution_import",
readonly=False,
string="Analytic distribution (importable)",
help="Defining this field, it will set the analytical distribution in JSON "
"format, but using the analytic accounts names as keys of the dictionary, so it "
"eases the human input.",
)
@api.depends("analytic_distribution")
def _compute_analytic_distribution_import(self):
aa_model = self.env["account.analytic.account"]
for item in self:
data = {}
distribution = item.analytic_distribution or {}
for key in list(distribution.keys()):
aa_record = aa_model.browse(int(key))
data[aa_record.name] = distribution[key]
item.analytic_distribution_import = data
def _inverse_analytic_distribution_import(self):
"""Convert the json to the appropriate value of analytic_distribution."""
aa_model = self.env["account.analytic.account"]
for item in self:
company = (
item.company_id if "company_id" in item._fields else self.env.company
)
base_domain = [("company_id", "in", company.ids + [False])]
data = {}
new_distribution = item.analytic_distribution_import or {}
for key in list(new_distribution.keys()):
domain = base_domain + [("name", "=", key)]
aa_record = aa_model.search(
domain,
limit=1,
)
if aa_record:
data[aa_record.id] = new_distribution[key]
item.analytic_distribution = data

View file

@ -0,0 +1,86 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import json
from lxml import etree
from odoo import api, models
from odoo.tools.misc import frozendict
class AnalyticMixin(models.AbstractModel):
_inherit = "base"
@api.model
def get_view(self, view_id=None, view_type="form", **options):
"""
The purpose of inheriting this method is to
add a specific field, 'manual_distribution_id',
to the tree/form views if the model has this field defined.
Additionally, if a one2many field exists
and the related model has the 'manual_distribution_id' field,
the method will add the 'manual_distribution_id' field to the sub-view.
Finally, the method returns the modified view.
Note: This method should be inherited in the base model,
not in the analytic.mixin model,
to ensure it executes correctly for models
that do not inherit from the mixin but have one2many fields.
For example, when rendering account.move,
it does not inherit from analytic.mixin,
but it has one2many fields that inherit from analytic.mixin.
"""
def add_field(node, view_type, res_model):
attribute = "column_invisible" if view_type == "tree" else "invisible"
modifiers = json.dumps({attribute: True})
field_options = {
"name": manual_distribution_field_name,
"modifiers": modifiers,
}
field_element = etree.SubElement(node, "field", field_options)
new_arch, new_models = View.postprocess_and_fields(field_element, res_model)
_merge_view_fields(all_models, new_models)
return field_element
def model_has_field(model):
return manual_distribution_field_name in self.env[model]._fields
def _merge_view_fields(all_models, new_models):
"""Merge new_models into all_models. Both are {modelname(str) ➔ fields(tuple)}."""
for model, view_fields in new_models.items():
if model in all_models:
all_models[model] = tuple(set(all_models[model]) | set(view_fields))
else:
all_models[model] = tuple(view_fields)
result = super().get_view(view_id=view_id, view_type=view_type, **options)
if view_type in ["tree", "form"]:
View = self.env["ir.ui.view"]
manual_distribution_field_name = "manual_distribution_id"
all_models = result["models"].copy() # {modelname(str) ➔ fields(tuple)}
arch = etree.fromstring(result["arch"])
if model_has_field(result.get("model")):
root_node = arch.xpath(f"/{view_type}")
for node in root_node:
add_field(node, view_type, result.get("model"))
# check fields one2many
for (res_model, field_list) in result["models"].items():
for field_name in field_list:
if field_name not in self.env[res_model]._fields:
continue
field_def = self.env[res_model]._fields[field_name]
if field_def.type != "one2many":
continue
if not model_has_field(field_def.comodel_name):
continue
for sub_view_type in ["tree", "form"]:
xpath_expr = f"//field[@name='{field_name}']/{sub_view_type}"
sub_node = arch.xpath(xpath_expr)
for child_node in sub_node:
add_field(child_node, sub_view_type, field_def.comodel_name)
result["arch"] = etree.tostring(arch, encoding="unicode")
result["models"] = frozendict(all_models)
return result

View file

@ -0,0 +1,3 @@
#. Go to Invoicing > Configuration > Analytic Accounting > Manual Analytic Distributions
#. Create or edit the necessary records.

View file

@ -0,0 +1,3 @@
* Tecnativa (https://www.tecnativa.com):
* Carlos Lopez

View file

@ -0,0 +1 @@
This module provides an easy way to quickly autocomplete analytic accounts on any model that has a field for analytic accounts.

View file

@ -0,0 +1 @@
Compatibility with `Analytic Distribution Models` to use Manual Distribution as Default values

View file

@ -0,0 +1,4 @@
#. Go to Invoicing > Customer > Invoices
#. Open or create a invoice
#. On the invoice line, select the analytic account. A new field labeled "Manual Distribution" should appear at the top.
#. Select a record from the list, and it will be added to the distribution and the invoice lines.

View file

@ -0,0 +1,14 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AccountInvoiceReport(models.Model):
_inherit = "account.invoice.report"
manual_distribution_id = fields.Many2one(
"account.analytic.distribution.manual", readonly=True
)
def _select(self):
return super()._select() + ", line.manual_distribution_id"

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="analytic_distribution_manual_comp_rule" model="ir.rule">
<field name="name">Analytic Manual Distribution multi company rule</field>
<field name="model_id" ref="model_account_analytic_distribution_manual" />
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
</odoo>

View file

@ -0,0 +1,3 @@
"id","name","model_id/id","group_id/id","perm_read","perm_write","perm_create","perm_unlink"
"access_account_analytic_distribution_manual_group_user","account_analytic_distribution_manual_group_user","model_account_analytic_distribution_manual","base.group_user",1,0,0,0
"access_account_analytic_distribution_manual_group_analytic_accounting","access_account_analytic_distribution_manual_group_analytic_accounting","model_account_analytic_distribution_manual","analytic.group_analytic_accounting",1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 access_account_analytic_distribution_manual_group_user account_analytic_distribution_manual_group_user model_account_analytic_distribution_manual base.group_user 1 0 0 0
3 access_account_analytic_distribution_manual_group_analytic_accounting access_account_analytic_distribution_manual_group_analytic_accounting model_account_analytic_distribution_manual analytic.group_analytic_accounting 1 1 1 1

View file

@ -0,0 +1,449 @@
<!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: https://docutils.sourceforge.io/" />
<title>Account analytic distribution manual</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
: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 https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
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 }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="account-analytic-distribution-manual">
<h1 class="title">Account analytic distribution manual</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:035507f0c4c09d8c7596c84710ffd03222bf8cb98b278245b67f1c6c88069ee9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/OCA/account-analytic/tree/16.0/account_analytic_distribution_manual"><img alt="OCA/account-analytic" src="https://img.shields.io/badge/github-OCA%2Faccount--analytic-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-analytic-16-0/account-analytic-16-0-account_analytic_distribution_manual"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-analytic&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module provides an easy way to quickly autocomplete analytic accounts on any model that has a field for analytic accounts.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-3">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-6">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-7">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-8">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<ol class="arabic simple">
<li>Go to Invoicing &gt; Configuration &gt; Analytic Accounting &gt; Manual Analytic Distributions</li>
<li>Create or edit the necessary records.</li>
</ol>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<ol class="arabic simple">
<li>Go to Invoicing &gt; Customer &gt; Invoices</li>
<li>Open or create a invoice</li>
<li>On the invoice line, select the analytic account. A new field labeled “Manual Distribution” should appear at the top.</li>
<li>Select a record from the list, and it will be added to the distribution and the invoice lines.</li>
</ol>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#toc-entry-3">Known issues / Roadmap</a></h1>
<p>Compatibility with <cite>Analytic Distribution Models</cite> to use Manual Distribution as Default values</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-analytic/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 to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/account-analytic/issues/new?body=module:%20account_analytic_distribution_manual%0Aversion:%2016.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="#toc-entry-5">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-6">Authors</a></h2>
<ul class="simple">
<li>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
<ul class="simple">
<li>Tecnativa (<a class="reference external" href="https://www.tecnativa.com">https://www.tecnativa.com</a>):<ul>
<li>Carlos Lopez</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-analytic/tree/16.0/account_analytic_distribution_manual">OCA/account-analytic</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,197 @@
/** @odoo-module **/
import {AnalyticDistribution} from "@analytic/components/analytic_distribution/analytic_distribution";
import {patch} from "@web/core/utils/patch";
const {useState} = owl;
patch(AnalyticDistribution.prototype, "account_analytic_distribution_manual", {
setup() {
this._super();
this.manual_distribution_by_id = {};
this.state_manual_distribution = useState({
id: this.props.record.data.manual_distribution_id
? this.props.record.data.manual_distribution_id[0]
: 0,
label: "",
analytic_distribution: [],
});
},
async willStart() {
await this._super();
if (this.state_manual_distribution.id) {
this.refreshManualDistribution(this.state_manual_distribution.id);
}
},
async willUpdate(nextProps) {
await this._super(nextProps);
const record_id = this.props.record.data.id || 0;
const current_manual_distribution_id = this.state_manual_distribution.id;
const new_manual_distribution_id = nextProps.record.data.manual_distribution_id
? this.props.record.data.manual_distribution_id[0]
: 0;
const manual_distribution_Changed =
current_manual_distribution_id !== new_manual_distribution_id;
// When record is created, and manual_distribution_id is cleared
// but user discard changes, we need to refresh the manual distribution
const force_refresh_discart = new_manual_distribution_id === 0 && record_id > 0;
if (
manual_distribution_Changed &&
(new_manual_distribution_id > 0 || force_refresh_discart)
) {
await this.refreshManualDistribution(new_manual_distribution_id);
}
},
async save() {
await this._super();
await this.props.record.update({
manual_distribution_id: [
this.state_manual_distribution.id,
this.state_manual_distribution.label,
],
});
},
async refreshManualDistribution(manual_distribution_id) {
if (manual_distribution_id === 0) {
this.deleteManualTag();
return;
}
const current_record = this.manual_distribution_by_id[manual_distribution_id];
if (current_record) {
this.state_manual_distribution.id = current_record.id;
this.state_manual_distribution.label = current_record.display_name;
this.state_manual_distribution.analytic_distribution =
current_record.analytic_distribution;
return;
}
const records = await this.fetchAnalyticDistributionManual([
["id", "=", manual_distribution_id],
]);
if (records.length) {
const record = records[0];
this.state_manual_distribution.id = record.id;
this.state_manual_distribution.label = record.display_name;
this.state_manual_distribution.analytic_distribution =
record.analytic_distribution;
} else {
this.deleteManualTag();
}
},
get tags() {
let res = this._super();
if (this.state_manual_distribution.id) {
// Remove the delete button from tags
// it will be added only to the manual distribution tag
/* eslint-disable-next-line no-unused-vars */
res = res.map(({onDelete, ...rest}) => rest);
res.unshift({
id: this.nextId++,
text: this.state_manual_distribution.label,
onDelete: this.editingRecord ? () => this.deleteManualTag() : undefined,
});
}
return res;
},
deleteManualTag() {
this.state_manual_distribution = {
id: 0,
label: "",
analytic_distribution: [],
};
// Clear all distribution
for (const group_id in this.list) {
this.list[group_id].distribution = [];
}
this.autoFill();
},
// Autocomplete
sourcesAnalyticDistributionManual() {
return [
{
placeholder: this.env._t("Loading..."),
options: (searchTerm) =>
this.loadOptionsSourceDistributionManual(searchTerm),
},
];
},
async loadOptionsSourceDistributionManual(searchTerm) {
const searchLimit = 6;
const records = await this.fetchAnalyticDistributionManual(
[...this.searchAnalyticDistributionManualDomain(searchTerm)],
searchLimit + 1
);
const options = [];
for (const record of records) {
options.push({
value: record.id,
label: record.display_name,
analytic_distribution: record.analytic_distribution,
});
this.manual_distribution_by_id[record.id] = record;
}
if (!options.length) {
options.push({
label: this.env._t("No Analytic Distribution Manual found"),
classList: "o_m2o_no_result",
unselectable: true,
});
}
return options;
},
async fetchAnalyticDistributionManual(domain, limit = null) {
const args = {
domain: domain,
fields: ["id", "display_name", "analytic_distribution"],
context: [],
};
if (limit) {
args.limit = limit;
}
return await this.orm.call(
"account.analytic.distribution.manual",
"search_read",
[],
args
);
},
searchAnalyticDistributionManualDomain(searchTerm) {
const domain = [["name", "ilike", searchTerm]];
if (this.props.record.data.company_id) {
domain.push(["company_id", "=", this.props.record.data.company_id[0]]);
}
return domain;
},
onChangeAutoCompleteDistributionManual(inputValue) {
if (inputValue === "") {
this.deleteManualTag();
}
},
async onSelectDistributionManual(option) {
const selected_option = Object.getPrototypeOf(option);
this.state_manual_distribution = {
id: selected_option.value,
label: selected_option.label,
analytic_distribution: selected_option.analytic_distribution,
};
const account_ids = Object.keys(selected_option.analytic_distribution).map(
(id) => parseInt(id, 10)
);
const analytic_accounts = await this.fetchAnalyticAccounts([
["id", "in", account_ids],
]);
// Clear all distribution
for (const group_id in this.list) {
this.list[group_id].distribution = [];
}
for (const account of analytic_accounts) {
// Add new tags
const planId = account.root_plan_id[0];
const tag = this.newTag(planId);
tag.analytic_account_id = account.id;
tag.analytic_account_name = account.display_name;
tag.percentage = selected_option.analytic_distribution[account.id];
this.list[planId].distribution.push(tag);
}
this.autoFill();
},
});

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates xml:space="preserve">
<t
id="analytic_distribution_inherit"
t-inherit="analytic.AnalyticDistributionPopup"
t-inherit-mode="extension"
owl="1"
>
<xpath expr="//span[@t-if='!sortedList.length']" position="before">
<div class="pb-4 border-bottom">
<strong>Manual distribution</strong>
<AutoComplete
id="'analytic_manual_distribution'"
placeholder="'Search a Manual distribution...'"
value="state_manual_distribution.label || ''"
sources="sourcesAnalyticDistributionManual()"
autoSelect="true"
onSelect.alike="(option) => this.onSelectDistributionManual(option)"
onChange.alike="({inputValue}) => this.onChangeAutoCompleteDistributionManual(inputValue)"
/>
</div>
</xpath>
</t>
</templates>

View file

@ -0,0 +1,104 @@
/** @odoo-module */
import tour from "web_tour.tour";
tour.register(
"account_analytic_distribution_manual",
{
test: true,
url: "/web",
},
[
tour.stepUtils.showAppsMenuItem(),
{
id: "account_menu_click",
content: "Go to Invoicing",
trigger: '.o_app[data-menu-xmlid="account.menu_finance"]',
},
{
content: "Go to Customers",
trigger: 'span:contains("Customers")',
},
{
content: "Go to Invoices",
trigger: 'a:contains("Invoices")',
},
{
extra_trigger: '.breadcrumb:contains("Invoices")',
content: "Create new invoice",
trigger: ".o_list_button_add",
},
{
content: "Add Customer",
trigger:
'div.o_field_widget.o_field_res_partner_many2one[name="partner_id"] div input',
run: "text partner_a",
},
{
content: "Valid Customer",
trigger: '.ui-menu-item a:contains("partner_a")',
},
{
content: "Add items",
trigger:
'div[name="invoice_line_ids"] .o_field_x2many_list_row_add a:contains("Add a line")',
},
{
content: "Select product_a",
trigger:
'div[name="invoice_line_ids"] .o_selected_row .o_list_many2one[name="product_id"] input',
},
{
content: "Type product_a",
trigger:
'div[name="invoice_line_ids"] .o_selected_row .o_list_many2one[name="product_id"] input',
run: "text product_a",
},
{
content: "Valid product_a",
trigger: '.ui-menu-item-wrapper:contains("product_a")',
},
{
content: "Select analytic_distribution",
trigger:
'div[name="invoice_line_ids"] .o_selected_row div.o_field_analytic_distribution[name="analytic_distribution"]',
},
{
content: "Type Manual Distribution 1",
trigger:
'div[name="invoice_line_ids"] .o_selected_row .analytic_distribution_popup input[id="analytic_manual_distribution"]',
run: "text Manual Distribution 1",
},
{
content: "Valid Manual Distribution 1",
trigger:
'div[name="invoice_line_ids"] .o_selected_row .analytic_distribution_popup li a:contains("Manual Distribution 1")',
},
{
content: "Apply selected Option",
trigger:
'div[name="invoice_line_ids"] .o_selected_row .analytic_distribution_popup input[id="analytic_manual_distribution"]',
run: "click",
},
// Compatibility with analytic_distribution_widget_remove_save
// this module remove buttons
// so to close popup click on any form area
{
content: "Close Popup",
trigger: "div.o_form_sheet_bg",
run: "click",
},
{
content: "Check Tag Manual is on the top",
trigger:
'div[name="invoice_line_ids"] .o_selected_row div.o_field_analytic_distribution[name="analytic_distribution"] div.o_field_tags div.o_tag_badge_text:contains("Manual Distribution 1")',
},
{
content: "Confirm Invoice",
trigger: 'button[name="action_post"]',
run: "click",
},
// Save account.move
...tour.stepUtils.saveForm(),
]
);

View file

@ -0,0 +1,2 @@
from . import test_analytic_distribution_manual
from . import test_analytic_distribution_manual_tour

View file

@ -0,0 +1,44 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from odoo.addons.base.tests.common import BaseCommon
class DistributionManualCommon(BaseCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
AnalyticAccount = cls.env["account.analytic.account"]
AnalyticPlan = cls.env["account.analytic.plan"]
cls.ManualDistribution = cls.env["account.analytic.distribution.manual"]
cls.plan_a = AnalyticPlan.create({"name": "Plan A"})
cls.analytic_account_a1 = AnalyticAccount.create(
{
"name": "analytic_account_a1",
"plan_id": cls.plan_a.id,
}
)
cls.analytic_account_a2 = AnalyticAccount.create(
{
"name": "analytic_account_a2",
"plan_id": cls.plan_a.id,
}
)
cls.distribution_1 = cls.ManualDistribution.create(
{
"name": "Manual Distribution 1",
"analytic_distribution": {
cls.analytic_account_a1.id: 40,
cls.analytic_account_a2.id: 60,
},
}
)
cls.product_a = cls.env["product.product"].create(
{
"name": "product_a",
"lst_price": 100.0,
"standard_price": 80.0,
"taxes_id": False,
}
)
cls.partner_a = cls.env["res.partner"].create({"name": "partner_a"})

View file

@ -0,0 +1,118 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from psycopg2.errors import UniqueViolation
from odoo.tests import Form, tagged
from odoo.tools import mute_logger
from odoo.addons.account_analytic_distribution_manual.tests.common import (
DistributionManualCommon,
)
@tagged("post_install", "-at_install")
class TestAnalyticDistributionManual(DistributionManualCommon):
@mute_logger("odoo.sql_db")
def test_copy_manual_distribution(self):
distribution = self.distribution_1.copy()
self.assertEqual(distribution.name, "Manual Distribution 1 (Copy)")
distribution2 = self.distribution_1.copy({"name": "New name"})
self.assertEqual(distribution2.name, "New name")
with self.assertRaises(UniqueViolation):
self.ManualDistribution.create(
{
"name": "Manual Distribution 1",
}
)
def test_manual_distribution_analytic_distribution_process_01(self):
invoice_form = Form(
self.env["account.move"].with_context(default_move_type="out_invoice")
)
invoice_form.partner_id = self.partner_a
with invoice_form.invoice_line_ids.new() as line_form:
line_form.product_id = self.product_a
line_form.manual_distribution_id = self.distribution_1
invoice = invoice_form.save()
invoice_line = invoice.invoice_line_ids
invoice_line.analytic_distribution = self.distribution_1.analytic_distribution
invoice.action_post()
self.assertTrue(len(invoice_line.analytic_line_ids), 2)
self.assertEqual(
invoice_line.analytic_line_ids.mapped("manual_distribution_id"),
self.distribution_1,
)
def test_manual_distribution_analytic_distribution_process_02(self):
invoice_form = Form(
self.env["account.move"].with_context(default_move_type="out_invoice")
)
invoice_form.partner_id = self.partner_a
with invoice_form.invoice_line_ids.new() as line_form:
line_form.product_id = self.product_a
invoice = invoice_form.save()
invoice_line = invoice.invoice_line_ids
invoice_line.manual_distribution_id = self.distribution_1
self.analytic_account_a1.name = "test-1"
aa_1 = self.analytic_account_a1
self.analytic_account_a2.name = "test-2"
aa_2 = self.analytic_account_a2
invoice_line.analytic_distribution_import = {
"test-1": 20.0,
"test-2": 80.0,
}
self.assertEqual(
invoice_line.analytic_distribution,
{str(aa_1.id): 20.0, str(aa_2.id): 80.0},
)
invoice.action_post()
self.assertTrue(len(invoice_line.analytic_line_ids), 2)
self.assertEqual(
invoice_line.analytic_line_ids.mapped("manual_distribution_id"),
self.distribution_1,
)
accounts = invoice_line.analytic_line_ids.mapped("account_id")
self.assertIn(aa_1, accounts)
self.assertIn(aa_2, accounts)
def test_manual_distribution_analytic_distribution_text(self):
self.analytic_account_a1.name = "test-1"
aa_1 = self.analytic_account_a1
self.analytic_account_a2.name = "test-2"
aa_2 = self.analytic_account_a2
self.assertEqual(
self.distribution_1.analytic_distribution_import,
{"test-1": 40.0, "test-2": 60.0},
)
# Set analytic_distribution_import field
self.distribution_1.analytic_distribution_import = {
"test-1": 20.0,
"test-2": 80.0,
}
self.assertEqual(
self.distribution_1.analytic_distribution,
{str(aa_1.id): 20.0, str(aa_2.id): 80.0},
)
# Remove aa_2
self.distribution_1.analytic_distribution_import = {"test-1": 40.0}
self.assertEqual(
self.distribution_1.analytic_distribution, {str(aa_1.id): 40.0}
)
# Create aa_2 again
self.distribution_1.analytic_distribution_import = {
"test-1": 40.0,
"test-2": 60.0,
}
self.assertEqual(
self.distribution_1.analytic_distribution,
{str(aa_1.id): 40.0, str(aa_2.id): 60.0},
)
# Update with an "incorrect name"
self.distribution_1.analytic_distribution_import = {
"test-1": 40.0,
"test-3": 60.0,
}
self.assertEqual(
self.distribution_1.analytic_distribution, {str(aa_1.id): 40.0}
)

View file

@ -0,0 +1,44 @@
# Copyright 2024 Tecnativa - Carlos Lopez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from odoo.tests import RecordCapturer, new_test_user, tagged
from odoo.tests.common import HttpCase, users
from odoo.addons.account_analytic_distribution_manual.tests.common import (
DistributionManualCommon,
)
@tagged("post_install", "-at_install")
class TestAnalyticDistributionManual(DistributionManualCommon, HttpCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
new_test_user(
cls.env,
login="analytic-manual-distribution-user",
groups="analytic.group_analytic_accounting,account.group_account_invoice",
)
@users("analytic-manual-distribution-user")
def test_manual_distribution_tour(self):
with RecordCapturer(
self.env["account.move"], [("move_type", "=", "out_invoice")]
) as capt:
self.start_tour(
"/web",
"account_analytic_distribution_manual",
login="analytic-manual-distribution-user",
)
invoice = capt.records
self.assertEqual(invoice.partner_id, self.partner_a)
self.assertEqual(invoice.state, "posted")
# self.assertEqual(len(invoice.invoice_line_ids.analytic_line_ids), 2)
# analytic_line1 = invoice.invoice_line_ids.analytic_line_ids.filtered(
# lambda x: x.account_id == self.analytic_account_a1
# )
# self.assertEqual(analytic_line1.amount, 40)
# analytic_line2 = invoice.invoice_line_ids.analytic_line_ids.filtered(
# lambda x: x.account_id == self.analytic_account_a2
# )
# self.assertEqual(analytic_line2.amount, 60)

View file

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_account_analytic_distribution_manual_tree" model="ir.ui.view">
<field name="name">view.account.analytic.distribution.manual.tree</field>
<field name="model">account.analytic.distribution.manual</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field
name="analytic_distribution"
widget="analytic_distribution"
optional="show"
/>
<field name="company_id" groups="base.group_multi_company" />
</tree>
</field>
</record>
<record id="view_account_analytic_distribution_manual_form" model="ir.ui.view">
<field name="name">view.account.analytic.distribution.manual.form</field>
<field name="model">account.analytic.distribution.manual</field>
<field name="arch" type="xml">
<form>
<sheet>
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<div class="oe_title">
<label for="name" />
<h1>
<field name="name" placeholder="Name..." />
</h1>
</div>
<group colspan="2">
<field name="active" invisible="1" />
<field name="company_id" groups="base.group_multi_company" />
<field
name="analytic_distribution"
widget="analytic_distribution"
required="1"
/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_account_analytic_distribution_manual_search" model="ir.ui.view">
<field name="name">view.account.analytic.distribution.manual.search</field>
<field name="model">account.analytic.distribution.manual</field>
<field name="arch" type="xml">
<search>
<field name="name" />
<filter
name="archived"
string="Archived"
domain="[('active', '=', False)]"
/>
</search>
</field>
</record>
<record
id="action_account_analytic_distribution_manual"
model="ir.actions.act_window"
>
<field name="name">Manual Analytic Distributions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.analytic.distribution.manual</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new Manual Analytic Distributions
</p>
</field>
</record>
<menuitem
id="account_analytic_distribution_manual_menu"
name="Manual Analytic Distributions"
action="action_account_analytic_distribution_manual"
groups="analytic.group_analytic_accounting"
parent="account.menu_analytic_accounting"
sequence="10"
/>
</odoo>

View file

@ -0,0 +1,22 @@
<odoo>
<record id="view_account_analytic_line_tree" model="ir.ui.view">
<field name="name">account.analytic.line.tree</field>
<field name="model">account.analytic.line</field>
<field name="inherit_id" ref="analytic.view_account_analytic_line_tree" />
<field name="arch" type="xml">
<field name="amount" position="after">
<field name="manual_distribution_id" optional="hide" />
</field>
</field>
</record>
<record id="view_account_analytic_line_form" model="ir.ui.view">
<field name="name">account.analytic.line.form</field>
<field name="model">account.analytic.line</field>
<field name="inherit_id" ref="analytic.view_account_analytic_line_form" />
<field name="arch" type="xml">
<field name="account_id" position="after">
<field name="manual_distribution_id" />
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Account_analytic_distribution_manual Module - account_analytic_distribution_manual
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for account_analytic_distribution_manual. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [account](../../odoo-bringout-oca-ocb-account)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon account_analytic_distribution_manual or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-account-analytic-account_analytic_distribution_manual"
# or
uv pip install odoo-bringout-oca-account-analytic-account_analytic_distribution_manual"
```

View file

@ -0,0 +1,16 @@
# Models
Detected core models and extensions in account_analytic_distribution_manual.
```mermaid
classDiagram
class account_analytic_distribution_manual
class account_analytic_line
class account_move_line
class analytic_mixin
class base
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: account_analytic_distribution_manual. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon account_analytic_distribution_manual
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,41 @@
# Security
Access control and security definitions in account_analytic_distribution_manual.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../account_analytic_distribution_manual/security/ir.model.access.csv)**
- 2 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[analytic_security.xml](../account_analytic_distribution_manual/security/analytic_security.xml)**
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[analytic_security.xml](../account_analytic_distribution_manual/security/analytic_security.xml)**
- Security groups, categories, and XML-based rules
- **[ir.model.access.csv](../account_analytic_distribution_manual/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_analytic_distribution_manual
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-account-analytic-account_analytic_distribution_manual"
version = "16.0.0"
description = "Account analytic distribution manual - Account analytic distribution manual"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-account>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["account_analytic_distribution_manual"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,45 @@
# Account Analytic Document Date
Odoo addon: account_analytic_document_date
## Installation
```bash
pip install odoo-bringout-oca-account-analytic-account_analytic_document_date
```
## Dependencies
This addon depends on:
- account
- account_reconcile_oca
## Manifest Information
- **Name**: Account Analytic Document Date
- **Version**: 16.0.1.0.1
- **Category**: N/A
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/account-analytic](https://github.com/OCA/account-analytic) branch 16.0, addon `account_analytic_document_date`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,123 @@
==============================
Account Analytic Document Date
==============================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f7d3ed41fa11fc02c75df2609b7382f50a569a28d3fa6bfb484c8af25dbfe829
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--analytic-lightgray.png?logo=github
:target: https://github.com/OCA/account-analytic/tree/16.0/account_analytic_document_date
:alt: OCA/account-analytic
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-analytic-16-0/account-analytic-16-0-account_analytic_document_date
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/account-analytic&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
The module introduces a new field in the accounting records to specify
the "Accrual Date" for income and expenses. This field is crucial for
accurately tracking when the revenue or expense is earned or incurred,
regardless of the invoice creation date.
For instance, if an invoice is created in December but refers to sales
made in November, the Accrual Date allows us to reflect this correctly
in our accounting records. This ensures compliance with accrual-based
accounting principles and provides better insights into the financial
period to which transactions belong.
This feature is particularly valuable for businesses that need to
differentiate between the accounting period of transaction occurrence
and the timing of document issuance.
**Table of contents**
.. contents::
:local:
Usage
=====
1. **Set Document Date on Invoice:**
- Navigate to the invoice and set the analytic document date.
- If the analytic document date is not set, it will automatically be
assigned the invoice date upon confirmation.
2. **Analytic Line Generation:**
- If any line has analytic information, the generated analytic entry
will inherit the analytic document date.
3. **Setting Document Date in Reconcile View:**
- You can also set the analytic document date from the reconciliation
view, but this option is available only during manual
reconciliation.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-analytic/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/account-analytic/issues/new?body=module:%20account_analytic_document_date%0Aversion:%2016.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.
Credits
=======
Authors
-------
* APSL-Nagarro
Contributors
------------
- ``APSL - Nagarro <https://apsl.tech>``\ \_\_:
- Miquel Pascual
- Bernat Obrador
Maintainers
-----------
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-mpascuall| image:: https://github.com/mpascuall.png?size=40px
:target: https://github.com/mpascuall
:alt: mpascuall
.. |maintainer-BernatObrador| image:: https://github.com/BernatObrador.png?size=40px
:target: https://github.com/BernatObrador
:alt: BernatObrador
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-mpascuall| |maintainer-BernatObrador|
This module is part of the `OCA/account-analytic <https://github.com/OCA/account-analytic/tree/16.0/account_analytic_document_date>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,2 @@
from . import models
from .hooks import post_init_hook

View file

@ -0,0 +1,20 @@
# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Account Analytic Document Date",
"summary": "Account Analytic Document Date",
"version": "16.0.1.0.1",
"website": "https://github.com/OCA/account-analytic",
"author": "APSL-Nagarro, Odoo Community Association (OCA)",
"maintainers": ["mpascuall", "BernatObrador"],
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": ["account", "account_reconcile_oca"],
"data": [
"views/account_analytic_line_views.xml",
"views/account_bank_statement_line_views.xml",
"views/account_move.xml",
],
"post_init_hook": "post_init_hook",
}

View file

@ -0,0 +1,12 @@
# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
def post_init_hook(cr, registry):
cr.execute(
"""
UPDATE account_move
SET analytic_document_date = invoice_date
WHERE analytic_document_date IS NULL
"""
)

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_document_date
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_bank_statement_line__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_move__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_payment__analytic_document_date
msgid "Analytic Document Date"
msgstr ""
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_analytic_line
msgid "Analytic Line"
msgstr ""
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr ""
#. module: account_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_analytic_line__document_date
msgid "Document Date"
msgstr ""
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move_line
msgid "Journal Item"
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_document_date
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_bank_statement_line__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_move__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_payment__analytic_document_date
msgid "Analytic Document Date"
msgstr "Analitički datum dokumenta"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_analytic_line
msgid "Analytic Line"
msgstr "Analitička stavka"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Stavka izvoda banke"
#. module: account_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_analytic_line__document_date
msgid "Document Date"
msgstr "Datum dokumenta"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move
msgid "Journal Entry"
msgstr "Žurnal"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move_line
msgid "Journal Item"
msgstr "Stavka žurnala"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_document_date
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-27 08:52+0000\n"
"PO-Revision-Date: 2024-12-27 08:52+0000\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_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_bank_statement_line__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_move__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_payment__analytic_document_date
msgid "Analytic Document Date"
msgstr "Data del Document Analític"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_analytic_line
msgid "Analytic Line"
msgstr "Línia analítica"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Línea d'extracte bancari"
#. module: account_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_analytic_line__document_date
msgid "Document Date"
msgstr "Data del Document"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move
msgid "Journal Entry"
msgstr "Assentament comptable"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move_line
msgid "Journal Item"
msgstr "Element del diari"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_document_date
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-27 08:53+0000\n"
"PO-Revision-Date: 2024-12-27 08:53+0000\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_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_bank_statement_line__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_move__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_payment__analytic_document_date
msgid "Analytic Document Date"
msgstr "Fecha del Documento Analítico"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_analytic_line
msgid "Analytic Line"
msgstr "Línea analítica"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Línea de extracto bancario"
#. module: account_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_analytic_line__document_date
msgid "Document Date"
msgstr "Fecha del Documento"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move
msgid "Journal Entry"
msgstr "Asiento contable"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move_line
msgid "Journal Item"
msgstr "Apunte contable"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_document_date
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-31 16:06+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: account_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_bank_statement_line__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_move__analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_payment__analytic_document_date
msgid "Analytic Document Date"
msgstr "Data documento analitico"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_analytic_line
msgid "Analytic Line"
msgstr "Riga analitica"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Riga estratto conto"
#. module: account_analytic_document_date
#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_analytic_line__document_date
msgid "Document Date"
msgstr "Data documento"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move
msgid "Journal Entry"
msgstr "Registrazione contabile"
#. module: account_analytic_document_date
#: model:ir.model,name:account_analytic_document_date.model_account_move_line
msgid "Journal Item"
msgstr "Movimento contabile"

View file

@ -0,0 +1,4 @@
from . import account_move_line
from . import account_analytic_line
from . import account_move
from . import account_bank_statement_line

View file

@ -0,0 +1,9 @@
# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AccountAnalyticLine(models.Model):
_inherit = "account.analytic.line"
document_date = fields.Date()

View file

@ -0,0 +1,19 @@
# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AccountBankStatementLine(models.Model):
_inherit = "account.bank.statement.line"
analytic_document_date = fields.Date(
"Analytic Document Date",
related="move_id.analytic_document_date",
readonly=False,
)
def reconcile_bank_line(self):
self.ensure_one()
res = super().reconcile_bank_line()
self.move_id.analytic_document_date = self.analytic_document_date
return res

View file

@ -0,0 +1,35 @@
# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class AccountMove(models.Model):
_inherit = "account.move"
analytic_document_date = fields.Date()
@api.onchange("invoice_date", "date")
def _onchange_invoice_date(self):
for record in self:
if not record.analytic_document_date:
record.analytic_document_date = record.invoice_date or record.date
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
analytic_document_date = (
vals.get("analytic_document_date")
or vals.get("invoice_date")
or vals.get("date")
)
vals["analytic_document_date"] = analytic_document_date
return super().create(vals_list)
def action_post(self):
res = super().action_post()
for record in self:
if not record.analytic_document_date:
record.analytic_document_date = record.invoice_date
return res

View file

@ -0,0 +1,18 @@
# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
def _prepare_analytic_lines(self):
vals = super()._prepare_analytic_lines()
for val in vals:
if self.move_id.analytic_document_date:
val.update({"document_date": self.move_id.analytic_document_date})
elif self.move_id.invoice_date:
val.update({"document_date": self.move_id.invoice_date})
else:
val.update({"document_date": self.move_id.date})
return vals

View file

@ -0,0 +1,4 @@
- `APSL - Nagarro <https://apsl.tech>`__:
- Miquel Pascual
- Bernat Obrador

View file

@ -0,0 +1,5 @@
The module introduces a new field in the accounting records to specify the "Accrual Date" for income and expenses. This field is crucial for accurately tracking when the revenue or expense is earned or incurred, regardless of the invoice creation date.
For instance, if an invoice is created in December but refers to sales made in November, the Accrual Date allows us to reflect this correctly in our accounting records. This ensures compliance with accrual-based accounting principles and provides better insights into the financial period to which transactions belong.
This feature is particularly valuable for businesses that need to differentiate between the accounting period of transaction occurrence and the timing of document issuance.

View file

@ -0,0 +1,9 @@
1. **Set Document Date on Invoice:**
- Navigate to the invoice and set the analytic document date.
- If the analytic document date is not set, it will automatically be assigned the invoice date upon confirmation.
2. **Analytic Line Generation:**
- If any line has analytic information, the generated analytic entry will inherit the analytic document date.
3. **Setting Document Date in Reconcile View:**
- You can also set the analytic document date from the reconciliation view, but this option is available only during manual reconciliation.

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