From 05154a4ef2e0238ec06d5a5ada80800ec97d1897 Mon Sep 17 00:00:00 2001 From: rpinset <12782314+rpinset@users.noreply.github.com> Date: Wed, 21 Feb 2024 22:01:20 +0100 Subject: [PATCH] =?UTF-8?q?update=20from=20sources=20:=20mer.=2021=20f?= =?UTF-8?q?=C3=A9vr.=202024=2022:01:17=20CET?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-merged.md | 8529 +++++++++++++++++ README-merged.tmp | 163 + README.md | 345 +- .../i18n/it.po | 340 + account_due_list_aging_comment/i18n/it.po | 12 +- .../README.rst | 107 + .../__init__.py | 1 + .../__manifest__.py | 16 + ...scal_position_autodetect_optional_vies.pot | 29 + .../models/__init__.py | 1 + .../models/account_fiscal_position.py | 45 + .../readme/CONFIGURE.rst | 7 + .../readme/CONTRIBUTORS.rst | 8 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 449 + .../tests/__init__.py | 3 + .../test_account_fiscal_position_vies.py | 63 + .../views/account_fiscal_position_view.xml | 16 + account_invoice_check_total/i18n/it.po | 4 +- .../i18n/it.po | 23 +- account_invoice_force_number/i18n/it.po | 16 +- account_invoice_merge/i18n/it.po | 12 +- account_invoice_payment_retention/i18n/it.po | 274 + .../i18n/it.po | 28 + account_invoice_pricelist/i18n/it.po | 19 +- account_invoice_pricelist_sale/i18n/it.po | 10 +- account_invoice_refund_link/i18n/it.po | 31 +- .../i18n/it.po | 24 +- .../i18n/it.po | 19 +- account_invoice_tax_required/i18n/it.po | 19 +- account_invoice_triple_discount/i18n/it.po | 14 +- account_mail_autosubscribe/i18n/it.po | 14 + account_move_line_reconcile_manual/i18n/it.po | 368 + .../i18n/it.po | 36 + account_payment_multi_deduction/i18n/it.po | 177 + account_payment_notification/i18n/it.po | 229 + account_payment_order/README.rst | 2 +- account_payment_order/__manifest__.py | 2 +- .../i18n/account_payment_order.pot | 9 - account_payment_order/i18n/am.po | 9 - account_payment_order/i18n/ar.po | 9 - account_payment_order/i18n/ca.po | 19 +- account_payment_order/i18n/ca_ES.po | 9 - account_payment_order/i18n/cs.po | 9 - account_payment_order/i18n/da_DK.po | 9 - account_payment_order/i18n/de.po | 9 - account_payment_order/i18n/el_GR.po | 9 - account_payment_order/i18n/es.po | 19 +- account_payment_order/i18n/es_AR.po | 19 +- account_payment_order/i18n/es_CL.po | 19 +- account_payment_order/i18n/es_CR.po | 9 - account_payment_order/i18n/es_EC.po | 9 - account_payment_order/i18n/es_ES.po | 9 - account_payment_order/i18n/es_MX.po | 9 - account_payment_order/i18n/es_VE.po | 9 - account_payment_order/i18n/et.po | 9 - account_payment_order/i18n/fi.po | 9 - account_payment_order/i18n/fr.po | 19 +- account_payment_order/i18n/fr_FR.po | 19 +- account_payment_order/i18n/gl.po | 9 - account_payment_order/i18n/hr.po | 9 - account_payment_order/i18n/it.po | 9 - account_payment_order/i18n/lt.po | 9 - account_payment_order/i18n/nb_NO.po | 9 - account_payment_order/i18n/nl.po | 9 - account_payment_order/i18n/nl_BE.po | 9 - account_payment_order/i18n/nl_NL.po | 9 - account_payment_order/i18n/pl.po | 9 - account_payment_order/i18n/pt.po | 9 - account_payment_order/i18n/pt_BR.po | 9 - account_payment_order/i18n/pt_PT.po | 9 - account_payment_order/i18n/ro.po | 9 - account_payment_order/i18n/ru.po | 9 - account_payment_order/i18n/sl.po | 9 - account_payment_order/i18n/sv.po | 9 - account_payment_order/i18n/th.po | 9 - account_payment_order/i18n/tr.po | 9 - account_payment_order/i18n/vi.po | 9 - .../models/account_payment_order.py | 16 +- .../static/description/index.html | 2 +- account_payment_promissory_note/README.rst | 2 +- .../__manifest__.py | 2 +- account_payment_promissory_note/i18n/it.po | 61 + .../static/description/index.html | 3 +- .../test_account_payment_promissory_note.py | 17 +- .../i18n/it.po | 1257 +++ account_payment_term_extension/i18n/it.po | 12 +- account_payment_term_extension/i18n/sv.po | 61 +- account_reconcile_oca/i18n/it.po | 589 ++ account_statement_base/i18n/it.po | 78 + .../i18n/it.po | 24 + auditlog/README.rst | 2 +- auditlog/__manifest__.py | 2 +- auditlog/models/rule.py | 3 + auditlog/static/description/index.html | 2 +- auditlog/tests/test_auditlog.py | 79 + base_transaction_id/i18n/it.po | 17 +- bi_sql_editor/i18n/it.po | 8 +- contract/i18n/it.po | 4 +- crm_phonecall/i18n/it.po | 4 +- database_cleanup/README.rst | 3 +- database_cleanup/__manifest__.py | 2 +- database_cleanup/models/purge_columns.py | 3 +- database_cleanup/readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 3 +- dms/README.rst | 2 +- dms/__manifest__.py | 2 +- dms/static/description/index.html | 2 +- .../src/js/views/dms_file_upload.esm.js | 14 +- document_url/README.rst | 2 +- document_url/__manifest__.py | 2 +- document_url/static/description/index.html | 3 +- document_url/static/src/js/url.esm.js | 12 + document_url/static/src/xml/url.xml | 12 - fastapi/README.rst | 15 +- fastapi/__manifest__.py | 2 +- fastapi/fastapi_dispatcher.py | 15 +- fastapi/readme/HISTORY.rst | 13 + fastapi/static/description/index.html | 63 +- fieldservice/i18n/it.po | 32 +- fs_attachment/README.rst | 2 +- fs_attachment/__manifest__.py | 2 +- fs_attachment/hooks.py | 4 + fs_attachment/static/description/index.html | 2 +- fs_base_multi_image/i18n/fr.po | 10 +- fs_image_thumbnail/README.rst | 2 +- fs_image_thumbnail/__manifest__.py | 2 +- .../models/fs_image_thumbnail_mixin.py | 1 + .../static/description/index.html | 3 +- fs_product_multi_image/README.rst | 2 +- fs_product_multi_image/__manifest__.py | 2 +- fs_product_multi_image/i18n/fr.po | 220 + .../static/description/index.html | 2 +- .../views/fs_product_image.xml | 1 + fs_storage/README.rst | 2 +- fs_storage/__manifest__.py | 2 +- fs_storage/models/fs_storage.py | 12 +- fs_storage/static/description/index.html | 2 +- hr_leave_type_code/i18n/it.po | 11 +- l10n_es_sigaus_account/README.rst | 161 + l10n_es_sigaus_account/__init__.py | 6 + l10n_es_sigaus_account/__manifest__.py | 27 + l10n_es_sigaus_account/data/data.xml | 30 + .../data/exception_templates.xml | 24 + l10n_es_sigaus_account/hooks.py | 14 + l10n_es_sigaus_account/i18n/es.po | 337 + .../i18n/l10n_es_sigaus_account.pot | 322 + l10n_es_sigaus_account/models/__init__.py | 13 + .../models/account_fiscal_position.py | 10 + l10n_es_sigaus_account/models/account_move.py | 129 + .../models/account_move_line.py | 26 + .../models/l10n_es_sigaus_amount.py | 73 + .../models/product_category.py | 10 + .../models/product_product.py | 17 + .../models/product_template.py | 15 + l10n_es_sigaus_account/models/res_company.py | 23 + .../models/sigaus_line_mixin.py | 35 + l10n_es_sigaus_account/models/sigaus_mixin.py | 187 + l10n_es_sigaus_account/readme/CONFIGURE.rst | 45 + .../readme/CONTRIBUTORS.rst | 5 + l10n_es_sigaus_account/readme/DESCRIPTION.rst | 9 + l10n_es_sigaus_account/readme/ROADMAP.rst | 2 + l10n_es_sigaus_account/readme/USAGE.rst | 14 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 16375 bytes .../static/description/icon.svg | 350 + .../static/description/index.html | 506 + l10n_es_sigaus_account/tests/__init__.py | 5 + l10n_es_sigaus_account/tests/common.py | 60 + .../tests/test_l10n_es_sigaus_account.py | 335 + .../test_l10n_es_sigaus_general_values.py | 42 + .../views/account_fiscal_position_views.xml | 24 + .../views/account_move_views.xml | 30 + .../views/l10n_es_sigaus_amount_views.xml | 68 + .../views/product_category_views.xml | 14 + .../views/product_views.xml | 14 + .../views/report_invoice.xml | 18 + .../views/res_company_views.xml | 26 + l10n_es_sigaus_account/wizard/__init__.py | 4 + .../wizard/account_move_reversal.py | 13 + l10n_mx_res_partner_csf/README.rst | 2 +- l10n_mx_res_partner_csf/__manifest__.py | 2 +- .../i18n/l10n_mx_res_partner_csf.pot | 10 +- .../static/description/index.html | 3 +- l10n_mx_res_partner_csf/wizard/import_csf.py | 1 + l10n_ro_account_edi_ubl/README.rst | 2 +- l10n_ro_account_edi_ubl/__manifest__.py | 2 +- .../i18n/l10n_ro_account_edi_ubl.pot | 11 + l10n_ro_account_edi_ubl/i18n/ro.po | 11 + .../models/account_edi_format.py | 4 +- l10n_ro_account_edi_ubl/models/res_company.py | 3 + .../models/res_config_settings.py | 5 + .../static/description/index.html | 2 +- .../views/res_config_settings_views.xml | 19 + mis_builder/i18n/it.po | 85 +- mis_builder_demo/i18n/it.po | 52 +- mrp_bom_structure_xlsx/README.rst | 6 +- mrp_bom_structure_xlsx/__manifest__.py | 2 +- .../readme/CONTRIBUTORS.rst | 4 + .../static/description/index.html | 7 +- mrp_bom_structure_xlsx/tests/__init__.py | 2 + mrp_bom_structure_xlsx/tests/common.py | 50 + .../tests/test_mrp_bom_structure_xlsx.py | 23 + mrp_bom_structure_xlsx_level_1/README.rst | 91 + mrp_bom_structure_xlsx_level_1/__init__.py | 2 + .../__manifest__.py | 15 + mrp_bom_structure_xlsx_level_1/i18n/de.po | 46 + mrp_bom_structure_xlsx_level_1/i18n/it.po | 42 + .../i18n/mrp_bom_structure_xlsx_level_1.pot | 24 + .../readme/CONTRIBUTORS.rst | 6 + .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 5 + .../report/__init__.py | 2 + .../report/bom_structure_xlsx.py | 31 + .../report/bom_structure_xlsx.xml | 18 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 82 + .../tests/__init__.py | 2 + .../test_mrp_bom_structure_xlsx_level_1.py | 21 + mrp_multi_level/README.rst | 2 +- mrp_multi_level/__manifest__.py | 2 +- mrp_multi_level/i18n/mrp_multi_level.pot | 1 - mrp_multi_level/static/description/index.html | 2 +- mrp_multi_level/tests/test_mrp_multi_level.py | 85 + mrp_multi_level/wizards/mrp_multi_level.py | 46 +- partner_risk_insurance/README.rst | 20 +- partner_risk_insurance/__init__.py | 1 + partner_risk_insurance/__manifest__.py | 8 +- partner_risk_insurance/hooks.py | 14 + partner_risk_insurance/i18n/ca.po | 230 + partner_risk_insurance/i18n/es.po | 141 +- partner_risk_insurance/i18n/es_ES.po | 230 + partner_risk_insurance/i18n/it.po | 236 +- .../i18n/partner_risk_insurance.pot | 111 + partner_risk_insurance/i18n/pt.po | 230 + partner_risk_insurance/i18n/pt_BR.po | 230 + partner_risk_insurance/i18n/sl.po | 230 + .../migrations/16.0.3.0.1/pre-migration.py | 10 + partner_risk_insurance/models/__init__.py | 4 +- partner_risk_insurance/models/account_move.py | 89 + .../models/credit_policy_company.py | 17 + ...redit_policy.py => credit_policy_state.py} | 6 + partner_risk_insurance/models/res_partner.py | 16 +- .../readme/CONTRIBUTORS.rst | 2 + partner_risk_insurance/readme/USAGE.rst | 10 +- .../security/ir.model.access.csv | 5 +- .../static/description/index.html | 20 +- partner_risk_insurance/tests/__init__.py | 1 + .../tests/test_invoice_credit_policy.py | 81 + .../views/account_move_view.xml | 53 + .../views/credit_policy_company_view.xml | 21 + .../views/res_partner_view.xml | 11 +- .../wizard/invoice_risk_insurance_wizard.xml | 2 + portal_account_personal_data_only/i18n/it.po | 14 + product_category_company/README.rst | 5 +- product_category_company/__manifest__.py | 2 +- .../readme/DESCRIPTION.rst | 3 + .../static/description/index.html | 5 +- product_category_company_favorite/README.rst | 146 + product_category_company_favorite/__init__.py | 2 + .../__manifest__.py | 20 + .../demo/res_company.xml | 14 + product_category_company_favorite/i18n/fr.po | 47 + .../product_category_company_favorite.pot | 41 + .../models/__init__.py | 2 + .../models/product_category.py | 63 + .../models/res_company.py | 25 + .../post_init_hook.py | 16 + .../readme/CONFIGURE.rst | 7 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 30 + .../readme/ROADMAP.rst | 6 + .../readme/USAGE.rst | 8 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 493 + .../description/product_category_tree.png | Bin 0 -> 32890 bytes .../static/description/product_form_view.png | Bin 0 -> 23491 bytes .../tests/__init__.py | 1 + .../tests/test_module.py | 118 + .../views/view_product_category.xml | 46 + product_sold_by_delivery_week/README.rst | 8 +- product_sold_by_delivery_week/__manifest__.py | 2 +- .../models/product_product.py | 6 +- .../models/stock_move.py | 4 +- .../readme/CONTRIBUTORS.rst | 2 + .../readme/ROADMAP.rst | 2 +- .../readme/USAGE.rst | 2 +- .../static/description/index.html | 8 +- .../test_product_sold_by_delivery_week.py | 43 +- project_task_note/i18n/it.po | 27 + .../i18n/it.po | 24 +- queue_job/i18n/it.po | 8 +- requirements.txt | 1 + sale_automatic_workflow/i18n/nl_NL.po | 13 +- sale_commission_product_criteria/README.rst | 116 + sale_commission_product_criteria/__init__.py | 1 + .../__manifest__.py | 22 + .../demo/sale_agent_demo.xml | 69 + sale_commission_product_criteria/i18n/it.po | 427 + .../i18n/sale_commission_product_criteria.pot | 396 + .../models/__init__.py | 5 + .../models/account_move.py | 30 + .../models/commission.py | 266 + .../models/sale.py | 55 + .../models/sale_commission_line_mixin.py | 78 + .../models/settlement.py | 7 + .../readme/CONTRIBUTORS.rst | 6 + .../readme/DESCRIPTION.rst | 16 + .../readme/USAGE.rst | 7 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 451 + .../tests/__init__.py | 1 + .../test_sale_commission_product_criteria.py | 204 + .../views/views.xml | 239 + sale_packaging_default/README.rst | 2 +- sale_packaging_default/__manifest__.py | 2 +- .../models/sale_order_line.py | 14 +- .../static/description/index.html | 2 +- sale_timesheet_invoice_description/i18n/it.po | 10 +- stock_picking_batch_print_invoices/README.rst | 2 +- .../__manifest__.py | 2 +- .../static/description/index.html | 2 +- .../report_picking_batch_print_invoices.xml | 2 +- stock_picking_invoicing/i18n/it.po | 293 + subscription_oca/README.rst | 105 + subscription_oca/__init__.py | 2 + subscription_oca/__manifest__.py | 28 + subscription_oca/data/ir_cron.xml | 15 + .../data/sale_subscription_data.xml | 76 + subscription_oca/i18n/es.po | 1018 ++ subscription_oca/i18n/subscription_oca.pot | 961 ++ subscription_oca/models/__init__.py | 11 + subscription_oca/models/account_move.py | 12 + subscription_oca/models/product_template.py | 12 + subscription_oca/models/res_partner.py | 33 + subscription_oca/models/sale_order.py | 83 + subscription_oca/models/sale_order_line.py | 17 + subscription_oca/models/sale_subscription.py | 470 + .../models/sale_subscription_close_reason.py | 10 + .../models/sale_subscription_line.py | 319 + .../models/sale_subscription_stage.py | 34 + .../models/sale_subscription_tag.py | 10 + .../models/sale_subscription_template.py | 102 + subscription_oca/readme/CONTRIBUTORS.rst | 7 + subscription_oca/readme/DESCRIPTION.rst | 1 + subscription_oca/readme/ROADMAP.rst | 2 + subscription_oca/readme/USAGE.rst | 13 + subscription_oca/security/ir.model.access.csv | 8 + subscription_oca/static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 451 + subscription_oca/static/img/icon.png | Bin 0 -> 16096 bytes subscription_oca/tests/__init__.py | 3 + .../tests/test_subscription_oca.py | 657 ++ .../views/product_template_views.xml | 20 + subscription_oca/views/res_partner_views.xml | 28 + subscription_oca/views/sale_order_views.xml | 29 + .../views/sale_subscription_stage_views.xml | 71 + .../views/sale_subscription_tag_views.xml | 27 + .../sale_subscription_template_views.xml | 131 + .../views/sale_subscription_views.xml | 473 + subscription_oca/wizard/__init__.py | 1 + .../wizard/close_subscription_wizard.py | 25 + .../wizard/close_subscription_wizard.xml | 30 + web_widget_datepicker_fulloptions/README.rst | 85 + web_widget_datepicker_fulloptions/__init__.py | 1 + .../__manifest__.py | 20 + web_widget_datepicker_fulloptions/i18n/it.po | 14 + .../i18n/pt_BR.po | 0 .../web_widget_datepicker_fulloptions.pot | 13 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 8 + .../static/description/change.png | Bin 0 -> 31877 bytes .../static/description/icon.png | Bin 0 -> 16484 bytes .../static/description/index.html | 431 + .../web_widget_datepicker_fulloptions.esm.js | 11 + website_require_login/i18n/de.po | 88 + 379 files changed, 29472 insertions(+), 1011 deletions(-) create mode 100644 account_cutoff_accrual_subscription/i18n/it.po create mode 100644 account_fiscal_position_autodetect_optional_vies/README.rst create mode 100644 account_fiscal_position_autodetect_optional_vies/__init__.py create mode 100644 account_fiscal_position_autodetect_optional_vies/__manifest__.py create mode 100644 account_fiscal_position_autodetect_optional_vies/i18n/account_fiscal_position_autodetect_optional_vies.pot create mode 100644 account_fiscal_position_autodetect_optional_vies/models/__init__.py create mode 100644 account_fiscal_position_autodetect_optional_vies/models/account_fiscal_position.py create mode 100644 account_fiscal_position_autodetect_optional_vies/readme/CONFIGURE.rst create mode 100644 account_fiscal_position_autodetect_optional_vies/readme/CONTRIBUTORS.rst create mode 100644 account_fiscal_position_autodetect_optional_vies/readme/DESCRIPTION.rst create mode 100644 account_fiscal_position_autodetect_optional_vies/readme/USAGE.rst create mode 100644 account_fiscal_position_autodetect_optional_vies/static/description/icon.png create mode 100644 account_fiscal_position_autodetect_optional_vies/static/description/index.html create mode 100644 account_fiscal_position_autodetect_optional_vies/tests/__init__.py create mode 100644 account_fiscal_position_autodetect_optional_vies/tests/test_account_fiscal_position_vies.py create mode 100644 account_fiscal_position_autodetect_optional_vies/views/account_fiscal_position_view.xml create mode 100644 account_invoice_payment_retention/i18n/it.po create mode 100644 account_invoice_payment_term_date_due/i18n/it.po create mode 100644 account_mail_autosubscribe/i18n/it.po create mode 100644 account_move_line_reconcile_manual/i18n/it.po create mode 100644 account_move_reconcile_forbid_cancel/i18n/it.po create mode 100644 account_payment_multi_deduction/i18n/it.po create mode 100644 account_payment_notification/i18n/it.po create mode 100644 account_payment_promissory_note/i18n/it.po create mode 100644 account_payment_return_import_iso20022/i18n/it.po create mode 100644 account_reconcile_oca/i18n/it.po create mode 100644 account_statement_base/i18n/it.po create mode 100644 account_tax_group_widget_base_amount/i18n/it.po create mode 100644 fs_product_multi_image/i18n/fr.po create mode 100644 l10n_es_sigaus_account/README.rst create mode 100644 l10n_es_sigaus_account/__init__.py create mode 100644 l10n_es_sigaus_account/__manifest__.py create mode 100644 l10n_es_sigaus_account/data/data.xml create mode 100644 l10n_es_sigaus_account/data/exception_templates.xml create mode 100644 l10n_es_sigaus_account/hooks.py create mode 100644 l10n_es_sigaus_account/i18n/es.po create mode 100644 l10n_es_sigaus_account/i18n/l10n_es_sigaus_account.pot create mode 100644 l10n_es_sigaus_account/models/__init__.py create mode 100644 l10n_es_sigaus_account/models/account_fiscal_position.py create mode 100644 l10n_es_sigaus_account/models/account_move.py create mode 100644 l10n_es_sigaus_account/models/account_move_line.py create mode 100644 l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py create mode 100644 l10n_es_sigaus_account/models/product_category.py create mode 100644 l10n_es_sigaus_account/models/product_product.py create mode 100644 l10n_es_sigaus_account/models/product_template.py create mode 100644 l10n_es_sigaus_account/models/res_company.py create mode 100644 l10n_es_sigaus_account/models/sigaus_line_mixin.py create mode 100644 l10n_es_sigaus_account/models/sigaus_mixin.py create mode 100644 l10n_es_sigaus_account/readme/CONFIGURE.rst create mode 100644 l10n_es_sigaus_account/readme/CONTRIBUTORS.rst create mode 100644 l10n_es_sigaus_account/readme/DESCRIPTION.rst create mode 100644 l10n_es_sigaus_account/readme/ROADMAP.rst create mode 100644 l10n_es_sigaus_account/readme/USAGE.rst create mode 100644 l10n_es_sigaus_account/security/ir.model.access.csv create mode 100644 l10n_es_sigaus_account/static/description/icon.png create mode 100644 l10n_es_sigaus_account/static/description/icon.svg create mode 100644 l10n_es_sigaus_account/static/description/index.html create mode 100644 l10n_es_sigaus_account/tests/__init__.py create mode 100644 l10n_es_sigaus_account/tests/common.py create mode 100644 l10n_es_sigaus_account/tests/test_l10n_es_sigaus_account.py create mode 100644 l10n_es_sigaus_account/tests/test_l10n_es_sigaus_general_values.py create mode 100644 l10n_es_sigaus_account/views/account_fiscal_position_views.xml create mode 100644 l10n_es_sigaus_account/views/account_move_views.xml create mode 100644 l10n_es_sigaus_account/views/l10n_es_sigaus_amount_views.xml create mode 100644 l10n_es_sigaus_account/views/product_category_views.xml create mode 100644 l10n_es_sigaus_account/views/product_views.xml create mode 100644 l10n_es_sigaus_account/views/report_invoice.xml create mode 100644 l10n_es_sigaus_account/views/res_company_views.xml create mode 100644 l10n_es_sigaus_account/wizard/__init__.py create mode 100644 l10n_es_sigaus_account/wizard/account_move_reversal.py create mode 100644 mrp_bom_structure_xlsx/tests/__init__.py create mode 100644 mrp_bom_structure_xlsx/tests/common.py create mode 100644 mrp_bom_structure_xlsx/tests/test_mrp_bom_structure_xlsx.py create mode 100644 mrp_bom_structure_xlsx_level_1/README.rst create mode 100644 mrp_bom_structure_xlsx_level_1/__init__.py create mode 100644 mrp_bom_structure_xlsx_level_1/__manifest__.py create mode 100644 mrp_bom_structure_xlsx_level_1/i18n/de.po create mode 100644 mrp_bom_structure_xlsx_level_1/i18n/it.po create mode 100644 mrp_bom_structure_xlsx_level_1/i18n/mrp_bom_structure_xlsx_level_1.pot create mode 100644 mrp_bom_structure_xlsx_level_1/readme/CONTRIBUTORS.rst create mode 100644 mrp_bom_structure_xlsx_level_1/readme/DESCRIPTION.rst create mode 100644 mrp_bom_structure_xlsx_level_1/readme/USAGE.rst create mode 100644 mrp_bom_structure_xlsx_level_1/report/__init__.py create mode 100644 mrp_bom_structure_xlsx_level_1/report/bom_structure_xlsx.py create mode 100644 mrp_bom_structure_xlsx_level_1/report/bom_structure_xlsx.xml create mode 100644 mrp_bom_structure_xlsx_level_1/static/description/icon.png create mode 100644 mrp_bom_structure_xlsx_level_1/static/description/index.html create mode 100644 mrp_bom_structure_xlsx_level_1/tests/__init__.py create mode 100644 mrp_bom_structure_xlsx_level_1/tests/test_mrp_bom_structure_xlsx_level_1.py create mode 100644 partner_risk_insurance/hooks.py create mode 100644 partner_risk_insurance/migrations/16.0.3.0.1/pre-migration.py create mode 100644 partner_risk_insurance/models/account_move.py create mode 100644 partner_risk_insurance/models/credit_policy_company.py rename partner_risk_insurance/models/{credit_policy.py => credit_policy_state.py} (54%) create mode 100644 partner_risk_insurance/tests/test_invoice_credit_policy.py create mode 100644 partner_risk_insurance/views/account_move_view.xml create mode 100644 partner_risk_insurance/views/credit_policy_company_view.xml create mode 100644 portal_account_personal_data_only/i18n/it.po create mode 100644 product_category_company_favorite/README.rst create mode 100644 product_category_company_favorite/__init__.py create mode 100644 product_category_company_favorite/__manifest__.py create mode 100644 product_category_company_favorite/demo/res_company.xml create mode 100644 product_category_company_favorite/i18n/fr.po create mode 100644 product_category_company_favorite/i18n/product_category_company_favorite.pot create mode 100644 product_category_company_favorite/models/__init__.py create mode 100644 product_category_company_favorite/models/product_category.py create mode 100644 product_category_company_favorite/models/res_company.py create mode 100644 product_category_company_favorite/post_init_hook.py create mode 100644 product_category_company_favorite/readme/CONFIGURE.rst create mode 100644 product_category_company_favorite/readme/CONTRIBUTORS.rst create mode 100644 product_category_company_favorite/readme/DESCRIPTION.rst create mode 100644 product_category_company_favorite/readme/ROADMAP.rst create mode 100644 product_category_company_favorite/readme/USAGE.rst create mode 100644 product_category_company_favorite/static/description/icon.png create mode 100644 product_category_company_favorite/static/description/index.html create mode 100644 product_category_company_favorite/static/description/product_category_tree.png create mode 100644 product_category_company_favorite/static/description/product_form_view.png create mode 100644 product_category_company_favorite/tests/__init__.py create mode 100644 product_category_company_favorite/tests/test_module.py create mode 100644 product_category_company_favorite/views/view_product_category.xml create mode 100644 project_task_note/i18n/it.po create mode 100644 sale_commission_product_criteria/README.rst create mode 100644 sale_commission_product_criteria/__init__.py create mode 100644 sale_commission_product_criteria/__manifest__.py create mode 100644 sale_commission_product_criteria/demo/sale_agent_demo.xml create mode 100644 sale_commission_product_criteria/i18n/it.po create mode 100644 sale_commission_product_criteria/i18n/sale_commission_product_criteria.pot create mode 100644 sale_commission_product_criteria/models/__init__.py create mode 100644 sale_commission_product_criteria/models/account_move.py create mode 100644 sale_commission_product_criteria/models/commission.py create mode 100644 sale_commission_product_criteria/models/sale.py create mode 100644 sale_commission_product_criteria/models/sale_commission_line_mixin.py create mode 100644 sale_commission_product_criteria/models/settlement.py create mode 100644 sale_commission_product_criteria/readme/CONTRIBUTORS.rst create mode 100644 sale_commission_product_criteria/readme/DESCRIPTION.rst create mode 100644 sale_commission_product_criteria/readme/USAGE.rst create mode 100644 sale_commission_product_criteria/security/ir.model.access.csv create mode 100644 sale_commission_product_criteria/static/description/icon.png create mode 100644 sale_commission_product_criteria/static/description/index.html create mode 100644 sale_commission_product_criteria/tests/__init__.py create mode 100644 sale_commission_product_criteria/tests/test_sale_commission_product_criteria.py create mode 100644 sale_commission_product_criteria/views/views.xml create mode 100644 stock_picking_invoicing/i18n/it.po create mode 100644 subscription_oca/README.rst create mode 100644 subscription_oca/__init__.py create mode 100644 subscription_oca/__manifest__.py create mode 100644 subscription_oca/data/ir_cron.xml create mode 100644 subscription_oca/data/sale_subscription_data.xml create mode 100644 subscription_oca/i18n/es.po create mode 100644 subscription_oca/i18n/subscription_oca.pot create mode 100644 subscription_oca/models/__init__.py create mode 100644 subscription_oca/models/account_move.py create mode 100644 subscription_oca/models/product_template.py create mode 100644 subscription_oca/models/res_partner.py create mode 100644 subscription_oca/models/sale_order.py create mode 100644 subscription_oca/models/sale_order_line.py create mode 100644 subscription_oca/models/sale_subscription.py create mode 100644 subscription_oca/models/sale_subscription_close_reason.py create mode 100644 subscription_oca/models/sale_subscription_line.py create mode 100644 subscription_oca/models/sale_subscription_stage.py create mode 100644 subscription_oca/models/sale_subscription_tag.py create mode 100644 subscription_oca/models/sale_subscription_template.py create mode 100644 subscription_oca/readme/CONTRIBUTORS.rst create mode 100644 subscription_oca/readme/DESCRIPTION.rst create mode 100644 subscription_oca/readme/ROADMAP.rst create mode 100644 subscription_oca/readme/USAGE.rst create mode 100644 subscription_oca/security/ir.model.access.csv create mode 100644 subscription_oca/static/description/icon.png create mode 100644 subscription_oca/static/description/index.html create mode 100644 subscription_oca/static/img/icon.png create mode 100644 subscription_oca/tests/__init__.py create mode 100644 subscription_oca/tests/test_subscription_oca.py create mode 100644 subscription_oca/views/product_template_views.xml create mode 100644 subscription_oca/views/res_partner_views.xml create mode 100644 subscription_oca/views/sale_order_views.xml create mode 100644 subscription_oca/views/sale_subscription_stage_views.xml create mode 100644 subscription_oca/views/sale_subscription_tag_views.xml create mode 100644 subscription_oca/views/sale_subscription_template_views.xml create mode 100644 subscription_oca/views/sale_subscription_views.xml create mode 100644 subscription_oca/wizard/__init__.py create mode 100644 subscription_oca/wizard/close_subscription_wizard.py create mode 100644 subscription_oca/wizard/close_subscription_wizard.xml create mode 100644 web_widget_datepicker_fulloptions/README.rst create mode 100644 web_widget_datepicker_fulloptions/__init__.py create mode 100644 web_widget_datepicker_fulloptions/__manifest__.py create mode 100644 web_widget_datepicker_fulloptions/i18n/it.po create mode 100644 web_widget_datepicker_fulloptions/i18n/pt_BR.po create mode 100644 web_widget_datepicker_fulloptions/i18n/web_widget_datepicker_fulloptions.pot create mode 100644 web_widget_datepicker_fulloptions/readme/CONTRIBUTORS.rst create mode 100644 web_widget_datepicker_fulloptions/readme/DESCRIPTION.rst create mode 100644 web_widget_datepicker_fulloptions/static/description/change.png create mode 100644 web_widget_datepicker_fulloptions/static/description/icon.png create mode 100644 web_widget_datepicker_fulloptions/static/description/index.html create mode 100644 web_widget_datepicker_fulloptions/static/src/js/web_widget_datepicker_fulloptions.esm.js create mode 100644 website_require_login/i18n/de.po diff --git a/README-merged.md b/README-merged.md index 84350201e9..a2e25db064 100644 --- a/README-merged.md +++ b/README-merged.md @@ -276210,3 +276210,8532 @@ and promote its widespread use. ---- ---- + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-analytic&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-analytic/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-analytic/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-analytic/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-analytic/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-analytic/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-analytic) +[![Translation Status](https://translation.odoo-community.org/widgets/account-analytic-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-analytic-16-0/?utm_source=widget) + + + +# account-analytic + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_analytic_account_tag](account_analytic_account_tag/) | 16.0.1.0.0 | | Restore the tag_ids in account.analytic.account +[account_analytic_parent](account_analytic_parent/) | 16.0.1.0.0 | | This module reintroduces the hierarchy to the analytic accounts. +[account_analytic_required](account_analytic_required/) | 16.0.1.0.0 | | Account Analytic Required +[account_analytic_tag](account_analytic_tag/) | 16.0.1.0.0 | | Account Analytic Tag +[account_analytic_tag_distribution](account_analytic_tag_distribution/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Account Analytic Tag Distribution +[account_move_update_analytic](account_move_update_analytic/) | 16.0.1.0.2 | [![remi-filament](https://github.com/remi-filament.png?size=30px)](https://github.com/remi-filament) [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) | This module allows the user to update analytic on posted moves +[analytic_distribution_widget_remove_save](analytic_distribution_widget_remove_save/) | 16.0.1.0.1 | | Remove save button on analytic distribution widget +[hr_expense_analytic_tag](hr_expense_analytic_tag/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Hr Expense Analytic Tag +[hr_timesheet_analytic_tag](hr_timesheet_analytic_tag/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Hr Timesheet Analytic Tag +[product_analytic](product_analytic/) | 16.0.1.0.1 | | Add analytic account on products and product categories +[purchase_analytic](purchase_analytic/) | 16.0.2.1.0 | | Purchase Analytic +[purchase_analytic_tag](purchase_analytic_tag/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Purchase Analytic Tag +[purchase_stock_analytic](purchase_stock_analytic/) | 16.0.1.0.0 | | Copies the analytic distribution of the purchase order item to the stock move +[sale_analytic_tag](sale_analytic_tag/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Sale Analytic Tag +[stock_analytic](stock_analytic/) | 16.0.1.2.0 | | Adds analytic distribution in stock move +[stock_picking_analytic](stock_picking_analytic/) | 16.0.1.0.0 | | Allows to define the analytic account on picking level + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-budgeting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-budgeting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-budgeting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-budgeting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-budgeting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-budgeting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-budgeting) +[![Translation Status](https://translation.odoo-community.org/widgets/account-budgeting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-budgeting-16-0/?utm_source=widget) + + + +# account-budgeting + +{'TODO': 'add repo description.'} + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_budget_oca](account_budget_oca/) | 16.0.1.0.1 | | Budgets Management + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-closing/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-closing/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-closing/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-closing/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-closing/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-closing) +[![Translation Status](https://translation.odoo-community.org/widgets/account-closing-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-closing-16-0/?utm_source=widget) + + + +# account-closing + +{'TODO': 'add repo description.'} + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_cutoff_accrual_subscription](account_cutoff_accrual_subscription/) | 16.0.1.2.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Accrued expenses based on subscriptions +[account_cutoff_base](account_cutoff_base/) | 16.0.1.3.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Base module for Account Cut-offs +[account_cutoff_picking](account_cutoff_picking/) | 16.0.1.3.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Accrued and prepaid expense/revenue from pickings +[account_cutoff_start_end_dates](account_cutoff_start_end_dates/) | 16.0.1.1.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Cutoffs based on start/end dates +[account_invoice_start_end_dates](account_invoice_start_end_dates/) | 16.0.1.2.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Adds start/end dates on invoice/move lines +[account_multicurrency_revaluation](account_multicurrency_revaluation/) | 16.0.1.0.1 | | Manage revaluation for multicurrency environment + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-consolidation&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-consolidation/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-consolidation/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-consolidation/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-consolidation/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-consolidation/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-consolidation) +[![Translation Status](https://translation.odoo-community.org/widgets/account-consolidation-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-consolidation-16-0/?utm_source=widget) + + + +# account-consolidation + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-financial-tools&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-financial-tools/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-financial-tools/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-financial-tools/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-financial-tools/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-financial-tools/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-financial-tools) +[![Translation Status](https://translation.odoo-community.org/widgets/account-financial-tools-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-financial-tools-16-0/?utm_source=widget) + + + +# account-financial-tools + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_account_tag_code](account_account_tag_code/) | 16.0.1.0.0 | | Add a code field to the accounts tags +[account_asset_batch_compute](account_asset_batch_compute/) | 16.0.1.0.0 | | Add the possibility to compute assets in batch +[account_asset_management](account_asset_management/) | 16.0.1.2.0 | | Assets Management +[account_cash_deposit](account_cash_deposit/) | 16.0.1.2.0 | | Manage cash deposits and cash orders +[account_chart_update](account_chart_update/) | 16.0.2.0.3 | | Wizard to update a company's account chart from a template +[account_chart_update_l10n_eu_oss_oca](account_chart_update_l10n_eu_oss_oca/) | 16.0.1.0.0 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Account Chart update OSS OCA +[account_fiscal_month](account_fiscal_month/) | 16.0.1.1.0 | | Provide a fiscal month date range type +[account_fiscal_position_vat_check](account_fiscal_position_vat_check/) | 16.0.1.1.0 | | Check VAT on invoice validation +[account_fiscal_year](account_fiscal_year/) | 16.0.1.1.0 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) | Create Account Fiscal Year +[account_fiscal_year_auto_create](account_fiscal_year_auto_create/) | 16.0.1.0.2 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Automatically create new fiscal years, based on the datas of the last fiscal years +[account_invoice_constraint_chronology](account_invoice_constraint_chronology/) | 16.0.1.1.0 | | Account Invoice Constraint Chronology +[account_journal_general_sequence](account_journal_general_sequence/) | 16.0.2.0.1 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Add configurable sequence to account moves, per journal +[account_journal_lock_date](account_journal_lock_date/) | 16.0.1.0.0 | | Lock each journal independently +[account_journal_restrict_mode](account_journal_restrict_mode/) | 16.0.1.0.0 | | Lock All Posted Entries of Journals. +[account_loan](account_loan/) | 16.0.1.0.4 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | Account Loan management +[account_lock_date_update](account_lock_date_update/) | 16.0.1.0.1 | | Allow an Account adviser to update locking date without having access to all technical settings +[account_move_budget](account_move_budget/) | 16.0.1.0.0 | | Create Accounting Budgets +[account_move_fiscal_month](account_move_fiscal_month/) | 16.0.1.0.0 | | Display the fiscal month on journal entries/item +[account_move_fiscal_year](account_move_fiscal_year/) | 16.0.1.0.0 | | Display the fiscal year on journal entries/item +[account_move_line_check_number](account_move_line_check_number/) | 16.0.1.0.1 | [![ps-tubtim](https://github.com/ps-tubtim.png?size=30px)](https://github.com/ps-tubtim) | Add the check number in the journal items +[account_move_line_purchase_info](account_move_line_purchase_info/) | 16.0.1.0.0 | | Introduces the purchase order line to the journal items +[account_move_line_sale_info](account_move_line_sale_info/) | 16.0.1.0.0 | | Introduces the purchase order line to the journal items +[account_move_line_tax_editable](account_move_line_tax_editable/) | 16.0.1.0.1 | | Allows to edit taxes on non-posted account move lines +[account_move_name_sequence](account_move_name_sequence/) | 16.0.1.1.7 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) [![moylop260](https://github.com/moylop260.png?size=30px)](https://github.com/moylop260) [![frahikLV](https://github.com/frahikLV.png?size=30px)](https://github.com/frahikLV) [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) | Generate journal entry number from sequence +[account_move_print](account_move_print/) | 16.0.1.0.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) | Adds the option to print Journal Entries +[account_move_template](account_move_template/) | 16.0.1.0.0 | | Templates for recurring Journal Entries +[account_netting](account_netting/) | 16.0.1.0.0 | | Compensate AR/AP accounts from the same partner +[account_partner_required](account_partner_required/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Adds an option 'partner policy' on accounts +[account_template_active](account_template_active/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Allow to disable / enable account template items (tax, fiscal position, account) +[account_usability](account_usability/) | 16.0.1.0.3 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Adds missing menu entries for Account module and adds the option to enable Saxon Accounting +[base_vat_optional_vies](base_vat_optional_vies/) | 16.0.1.1.0 | | Optional validation of VAT via VIES + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-financial-reporting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-financial-reporting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-financial-reporting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-financial-reporting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-financial-reporting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-financial-reporting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-financial-reporting) +[![Translation Status](https://translation.odoo-community.org/widgets/account-financial-reporting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-financial-reporting-16-0/?utm_source=widget) + + + +# account-financial-reporting + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_financial_report](account_financial_report/) | 16.0.1.4.1 | | OCA Financial Reports +[account_tax_balance](account_tax_balance/) | 16.0.1.1.1 | | Compute tax balances based on date range +[mis_builder_cash_flow](mis_builder_cash_flow/) | 16.0.1.0.0 | [![jjscarafia](https://github.com/jjscarafia.png?size=30px)](https://github.com/jjscarafia) | MIS Builder Cash Flow +[partner_statement](partner_statement/) | 16.0.1.0.0 | [![MiquelRForgeFlow](https://github.com/MiquelRForgeFlow.png?size=30px)](https://github.com/MiquelRForgeFlow) | OCA Financial Reports + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-invoice-reporting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-invoice-reporting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-invoice-reporting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-invoice-reporting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-invoice-reporting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-invoice-reporting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-invoice-reporting) +[![Translation Status](https://translation.odoo-community.org/widgets/account-invoice-reporting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-invoice-reporting-16-0/?utm_source=widget) + + + +# account-invoice-reporting + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_comment_template](account_comment_template/) | 16.0.1.0.1 | | Comments templates on invoice documents +[account_invoice_line_report](account_invoice_line_report/) | 16.0.1.0.0 | | New view to manage invoice lines information +[account_invoice_production_lot](account_invoice_production_lot/) | 16.0.1.0.0 | | Display delivered serial numbers in invoice +[account_invoice_report_due_list](account_invoice_report_due_list/) | 16.0.1.0.0 | | Show multiple due data in invoice +[account_invoice_report_grouped_by_picking](account_invoice_report_grouped_by_picking/) | 16.0.1.1.1 | | Print invoice lines grouped by picking +[account_invoice_report_payment_info](account_invoice_report_payment_info/) | 16.0.1.0.1 | | Show payment extended info in invoice +[account_reporting_volume](account_reporting_volume/) | 16.0.1.0.0 | | Volume in the invoices analysis view +[account_reporting_weight](account_reporting_weight/) | 16.0.1.0.0 | | Weights in the invoices analysis view +[partner_time_to_pay](partner_time_to_pay/) | 16.0.1.0.0 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) | Add receivables and payables statistics to partners + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-invoicing&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-invoicing/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-invoicing/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-invoicing/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-invoicing/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-invoicing/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-invoicing) +[![Translation Status](https://translation.odoo-community.org/widgets/account-invoicing-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-invoicing-16-0/?utm_source=widget) + + + +# account-invoicing + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_invoice_blocking](account_invoice_blocking/) | 16.0.1.0.1 | | Set a blocking (No Follow-up) flag on invoices +[account_invoice_change_currency](account_invoice_change_currency/) | 16.0.1.0.1 | [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) [![rolandojduartem](https://github.com/rolandojduartem.png?size=30px)](https://github.com/rolandojduartem) | Allows to change currency of Invoice by wizard +[account_invoice_check_total](account_invoice_check_total/) | 16.0.1.0.0 | | Check if the verification total is equal to the bill's total +[account_invoice_crm_tag](account_invoice_crm_tag/) | 16.0.1.0.0 | | Account Invoice CRM Tag +[account_invoice_currency_taxes](account_invoice_currency_taxes/) | 16.0.1.0.1 | | Taxes in company currency in invoice report +[account_invoice_default_code_column](account_invoice_default_code_column/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Display Default code product in a dedicated column on invoice reports +[account_invoice_fiscal_position_update](account_invoice_fiscal_position_update/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Changing the fiscal position of an invoice will auto-update invoice lines +[account_invoice_fixed_discount](account_invoice_fixed_discount/) | 16.0.1.0.2 | | Allows to apply fixed amount discounts in invoices. +[account_invoice_force_number](account_invoice_force_number/) | 16.0.1.0.0 | | Allows to force invoice numbering on specific invoices +[account_invoice_mass_sending](account_invoice_mass_sending/) | 16.0.1.1.1 | [![jguenat](https://github.com/jguenat.png?size=30px)](https://github.com/jguenat) | This addon adds a mass sending feature on invoices. +[account_invoice_merge](account_invoice_merge/) | 16.0.1.0.1 | | Merge invoices in draft +[account_invoice_payment_retention](account_invoice_payment_retention/) | 16.0.1.0.0 | | Account Invoice Payment Retention +[account_invoice_payment_term_date_due](account_invoice_payment_term_date_due/) | 16.0.1.0.0 | [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Display invoices date due when using payment terms +[account_invoice_pricelist](account_invoice_pricelist/) | 16.0.1.0.1 | | Add partner pricelist on invoices +[account_invoice_pricelist_sale](account_invoice_pricelist_sale/) | 16.0.1.0.0 | | Module to fill pricelist from sales order in invoice. +[account_invoice_refund_code](account_invoice_refund_code/) | 16.0.1.0.0 | | This module allows to have specific refund codes. +[account_invoice_refund_line_selection](account_invoice_refund_line_selection/) | 16.0.1.0.0 | | This module allows the user to refund specific lines in a invoice +[account_invoice_refund_link](account_invoice_refund_link/) | 16.0.1.0.4 | | Show links between refunds and their originator invoices. +[account_invoice_refund_reason](account_invoice_refund_reason/) | 16.0.1.0.1 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Account Invoice Refund Reason. +[account_invoice_section_sale_order](account_invoice_section_sale_order/) | 16.0.1.0.0 | | For invoices targetting multiple sale order addsections with sale order name. +[account_invoice_show_currency_rate](account_invoice_show_currency_rate/) | 16.0.1.0.1 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Show currency rate in invoices. +[account_invoice_supplier_ref_unique](account_invoice_supplier_ref_unique/) | 16.0.1.0.0 | | Checks that supplier invoices are not entered twice +[account_invoice_supplier_self_invoice](account_invoice_supplier_self_invoice/) | 16.0.1.0.0 | | Purchase Self Invoice +[account_invoice_supplierinfo_update](account_invoice_supplierinfo_update/) | 16.0.1.1.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | In the supplier invoice, automatically updates all products whose unit price on the line is different from the supplier price +[account_invoice_supplierinfo_update_discount](account_invoice_supplierinfo_update_discount/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | In the supplier invoice, automatically update all products whose discount on the line is different from the supplier discount +[account_invoice_supplierinfo_update_triple_discount](account_invoice_supplierinfo_update_triple_discount/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | In the supplier invoice, automatically update all products whose discounts on the line is different from the supplier discounts +[account_invoice_tax_required](account_invoice_tax_required/) | 16.0.1.1.0 | | This module adds functional a check on invoice to force user to set tax on invoice line. +[account_invoice_transmit_method](account_invoice_transmit_method/) | 16.0.1.0.2 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Configure invoice transmit method (email, post, portal, ...) +[account_invoice_tree_currency](account_invoice_tree_currency/) | 16.0.1.0.0 | | Show currencies in the invoice tree view +[account_invoice_triple_discount](account_invoice_triple_discount/) | 16.0.1.0.2 | | Manage triple discount on invoice lines +[account_mail_autosubscribe](account_mail_autosubscribe/) | 16.0.1.0.0 | [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Automatically subscribe partners to their company's invoices +[account_menu_invoice_refund](account_menu_invoice_refund/) | 16.0.1.0.1 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | New invoice menu that combine invoices and refunds +[account_move_tier_validation](account_move_tier_validation/) | 16.0.1.0.0 | | Extends the functionality of Account Moves to support a tier validation process. +[account_receipt_journal](account_receipt_journal/) | 16.0.1.1.0 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) [![anddago78](https://github.com/anddago78.png?size=30px)](https://github.com/anddago78) | Define and use journals dedicated to receipts +[account_receipt_send](account_receipt_send/) | 16.0.1.0.2 | [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) | Send receipts +[account_tax_change](account_tax_change/) | 16.0.1.0.1 | [![sebalix](https://github.com/sebalix.png?size=30px)](https://github.com/sebalix) | Configure your tax changes starting from a date. +[account_tax_group_widget_base_amount](account_tax_group_widget_base_amount/) | 16.0.1.0.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Adds base amount to tax group widget +[account_tax_one_vat](account_tax_one_vat/) | 16.0.1.0.0 | | Allow only the selection of one VAT Tax. +[partner_invoicing_mode](partner_invoicing_mode/) | 16.0.1.0.1 | | Base module for handling multiple partner invoicing mode +[partner_invoicing_mode_at_shipping](partner_invoicing_mode_at_shipping/) | 16.0.1.0.1 | | Create invoices automatically when goods are shipped. +[partner_invoicing_mode_monthly](partner_invoicing_mode_monthly/) | 16.0.1.0.1 | | Create invoices automatically on a monthly basis. +[portal_account_personal_data_only](portal_account_personal_data_only/) | 16.0.1.0.0 | | Portal Accounting Personal Data Only +[product_form_account_move_line_link](product_form_account_move_line_link/) | 16.0.1.0.0 | | Adds a button on product forms to access Journal Items +[purchase_invoicing_no_zero_line](purchase_invoicing_no_zero_line/) | 16.0.1.0.0 | | Avoid creation of zero quantity invoice lines from purchase +[purchase_stock_picking_return_invoicing](purchase_stock_picking_return_invoicing/) | 16.0.1.0.1 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) [![MiquelRForgeFlow](https://github.com/MiquelRForgeFlow.png?size=30px)](https://github.com/MiquelRForgeFlow) | Add an option to refund returned pickings +[sale_line_refund_to_invoice_qty](sale_line_refund_to_invoice_qty/) | 16.0.1.0.0 | | Allow deciding whether refunded quantity should be considered as quantity to reinvoice +[sale_order_invoicing_grouping_criteria](sale_order_invoicing_grouping_criteria/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Sales order invoicing grouping criteria +[sale_order_invoicing_qty_percentage](sale_order_invoicing_qty_percentage/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Sales order invoicing by percentage of the quantity +[sale_timesheet_invoice_description](sale_timesheet_invoice_description/) | 16.0.1.0.0 | | Add timesheet details in invoice line +[stock_picking_invoicing](stock_picking_invoicing/) | 16.0.1.0.0 | | Stock Picking Invoicing +[stock_picking_return_refund_option](stock_picking_return_refund_option/) | 16.0.1.0.1 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Update the refund options in pickings + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-fiscal-rule&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-fiscal-rule/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-fiscal-rule/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-fiscal-rule/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-fiscal-rule/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-fiscal-rule/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-fiscal-rule) +[![Translation Status](https://translation.odoo-community.org/widgets/account-fiscal-rule-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-fiscal-rule-16-0/?utm_source=widget) + + + +# account-fiscal-rule + +Odoo Accounting Taxe and Fiscal Features + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_avatax_exemption_base](account_avatax_exemption_base/) | 16.0.1.0.0 | | This application allows you to add exemptions base to Avatax +[account_avatax_oca](account_avatax_oca/) | 16.0.1.1.7 | [![dreispt](https://github.com/dreispt.png?size=30px)](https://github.com/dreispt) | Compute Sales Tax using the Avalara Avatax Service +[account_avatax_sale_oca](account_avatax_sale_oca/) | 16.0.1.1.2 | [![dreispt](https://github.com/dreispt.png?size=30px)](https://github.com/dreispt) | Sales Orders with automatic Tax application using Avatax +[account_avatax_website_sale](account_avatax_website_sale/) | 16.0.1.0.0 | [![cybernexus](https://github.com/cybernexus.png?size=30px)](https://github.com/cybernexus) | Ecommerce Sales Orders require tax recalculation prior to payment. +[account_fiscal_position_autodetect_optional_vies](account_fiscal_position_autodetect_optional_vies/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Account Fiscal Position Autodetect optional VIES +[account_fiscal_position_partner_type](account_fiscal_position_partner_type/) | 16.0.1.0.1 | | Account Fiscal Position Partner Type +[account_fiscal_position_type](account_fiscal_position_type/) | 16.0.1.0.3 | | Add sale / purchase type on fiscal position +[account_product_fiscal_classification](account_product_fiscal_classification/) | 16.0.1.0.6 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Simplify taxes management for products +[l10n_eu_oss_oca](l10n_eu_oss_oca/) | 16.0.1.0.2 | | L10n EU OSS OCA + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/operating-unit&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/operating-unit/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/operating-unit/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/operating-unit/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/operating-unit/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/operating-unit/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/operating-unit) +[![Translation Status](https://translation.odoo-community.org/widgets/operating-unit-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/operating-unit-16-0/?utm_source=widget) + + + +# operating-unit + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[analytic_operating_unit](analytic_operating_unit/) | 16.0.1.0.0 | | Analytic Operating Unit +[operating_unit](operating_unit/) | 16.0.1.0.2 | | An operating unit (OU) is an organizational entity part of a company +[product_operating_unit](product_operating_unit/) | 16.0.1.0.1 | | Adds the concept of operating unit (OU) in products +[project_operating_unit](project_operating_unit/) | 16.0.1.0.0 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | This module adds operating unit information to projects and tasks. +[sales_team_operating_unit](sales_team_operating_unit/) | 16.0.1.0.0 | | Sales Team Operating Unit +[stock_operating_unit](stock_operating_unit/) | 16.0.1.2.1 | | Adds the concept of operating unit (OU) in stock management + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/intrastat-extrastat&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/intrastat-extrastat/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/intrastat-extrastat/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/intrastat-extrastat/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/intrastat-extrastat/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/intrastat-extrastat/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/intrastat-extrastat) +[![Translation Status](https://translation.odoo-community.org/widgets/intrastat-extrastat-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/intrastat-extrastat-16-0/?utm_source=widget) + + + +# intrastat-extrastat + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[intrastat_base](intrastat_base/) | 16.0.1.1.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) [![luc-demeyer](https://github.com/luc-demeyer.png?size=30px)](https://github.com/luc-demeyer) | Base module for Intrastat reporting +[intrastat_delivery](intrastat_delivery/) | 16.0.1.0.0 | | Propagates the value of the incoterm fields from the order shipping method to the invoices +[intrastat_product](intrastat_product/) | 16.0.1.6.1 | | Base module for Intrastat Product +[intrastat_product_generic](intrastat_product_generic/) | 16.0.1.0.0 | | Generic Intrastat Product Declaration +[intrastat_product_hscodes_import](intrastat_product_hscodes_import/) | 16.0.1.0.0 | | Module used to import HS Codes for Intrastat Product +[product_harmonized_system](product_harmonized_system/) | 16.0.1.1.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) [![luc-demeyer](https://github.com/luc-demeyer.png?size=30px)](https://github.com/luc-demeyer) | Base module for Product Import/Export reports +[product_harmonized_system_delivery](product_harmonized_system_delivery/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) [![luc-demeyer](https://github.com/luc-demeyer.png?size=30px)](https://github.com/luc-demeyer) | Hide native hs_code field provided by the delivery module +[product_harmonized_system_stock](product_harmonized_system_stock/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) [![luc-demeyer](https://github.com/luc-demeyer.png?size=30px)](https://github.com/luc-demeyer) | Adds a menu entry for H.S. codes + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/mis-builder&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/mis-builder/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/mis-builder/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/mis-builder/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/mis-builder/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/mis-builder/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/mis-builder) +[![Translation Status](https://translation.odoo-community.org/widgets/mis-builder-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/mis-builder-16-0/?utm_source=widget) + + + +# MIS Builder + +Management Information System reports for Odoo: easily build super fast, +beautiful, custom reports such as P&L, Balance Sheets and more. + +This project implements a class of reports where KPI (Key Performance Indicators) +are displayed in rows, and time periods in columns. It focuses on very fast reporting +on accounting data but can also use data from any other Odoo model. + +It features the following key characteristics: + +- User configurable: end users can create new report templates without development, + using simple Excel-like formulas. +- Very fast balance reporting for accounting data, even on million lines databases + and very complex account charts. +- Use the same template for different reports. +- Compare data over different time periods. +- User-configurable styles, rendered perfectly in the UI as well as Excel and PDF exports. +- Interactive display with drill-down. +- Export to PDF and Excel. +- A budgeting module. +- Evaluate KPI over various data sources, such as actuals, simulation, committed costs + (some custom development is required to create the data source). +- For developers, the accounting balance computation engine is exposed as an easy + to use API. + +Here are some presentations: + +- Odoo Experience 2017 ([slides](https://www.slideshare.net/acsone/budget-control-with-misbuilder-3-2017), [video](https://youtu.be/0PpxGAf2l-0)) +- Odoo Experience 2016 ([slides](https://www.slideshare.net/acsone/misbuilder-2016)) +- Odoo Experience 2015 ([slides](https://www.slideshare.net/acsone/misbuilder)) + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[mis_builder](mis_builder/) | 16.0.5.1.9 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | Build 'Management Information System' Reports and Dashboards +[mis_builder_budget](mis_builder_budget/) | 16.0.5.0.3 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | Create budgets for MIS reports +[mis_builder_demo](mis_builder_demo/) | 16.0.1.0.3 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | Demo addon for MIS Builder + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/currency&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/currency/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/currency/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/currency/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/currency/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/currency/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/currency) +[![Translation Status](https://translation.odoo-community.org/widgets/currency-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/currency-16-0/?utm_source=widget) + + + +# currency + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[currency_old_rate_notify](currency_old_rate_notify/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Notify accounting managers when currency rates are too old +[currency_rate_update](currency_rate_update/) | 16.0.1.1.2 | | Update exchange rates using OCA modules + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/credit-control&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/credit-control/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/credit-control/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/credit-control/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/credit-control/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/credit-control/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/credit-control) +[![Translation Status](https://translation.odoo-community.org/widgets/credit-control-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/credit-control-16-0/?utm_source=widget) + + + +# credit-control + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_credit_control](account_credit_control/) | 16.0.1.1.1 | | Account Credit Control +[account_credit_control_dunning_fees](account_credit_control_dunning_fees/) | 16.0.1.0.0 | | Credit control dunning fees +[account_financial_risk](account_financial_risk/) | 16.0.1.2.2 | [![carlosdauden](https://github.com/carlosdauden.png?size=30px)](https://github.com/carlosdauden) | Manage customer risk +[account_invoice_overdue_reminder](account_invoice_overdue_reminder/) | 16.0.1.3.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Simple mail/letter/phone overdue customer invoice reminder +[account_invoice_overdue_warn](account_invoice_overdue_warn/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Show warning on customer form view if it has overdue invoices +[account_invoice_overdue_warn_sale](account_invoice_overdue_warn_sale/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Show overdue warning on sale order form view +[account_payment_return_financial_risk](account_payment_return_financial_risk/) | 16.0.1.0.1 | | Partner Payment Return Risk +[partner_risk_insurance](partner_risk_insurance/) | 16.0.4.0.0 | [![Daniel-CA](https://github.com/Daniel-CA.png?size=30px)](https://github.com/Daniel-CA) [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) [![omar7r](https://github.com/omar7r.png?size=30px)](https://github.com/omar7r) [![Tardo](https://github.com/Tardo.png?size=30px)](https://github.com/Tardo) [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) | Risk insurance partner information +[sale_financial_risk](sale_financial_risk/) | 16.0.1.1.1 | | Manage partner risk in sales orders +[sale_financial_risk_info](sale_financial_risk_info/) | 16.0.1.0.1 | | Adds risk consumption info in sales orders. +[sale_payment_sheet_financial_risk](sale_payment_sheet_financial_risk/) | 16.0.1.0.0 | | Manage partner risk in sale payment sheet +[stock_financial_risk](stock_financial_risk/) | 16.0.1.0.0 | | Manage partner risk in stock moves + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/data-protection&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/data-protection/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/data-protection/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/data-protection/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/data-protection/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/data-protection/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/data-protection) +[![Translation Status](https://translation.odoo-community.org/widgets/data-protection-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/data-protection-16-0/?utm_source=widget) + + + +# data-protection + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[privacy](privacy/) | 16.0.1.0.0 | | Provides data privacy and protection features to comply to regulations, such as GDPR. +[privacy_consent](privacy_consent/) | 16.0.1.0.1 | | Allow people to explicitly accept or reject inclusion in some activity, GDPR compliant + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/bank-payment&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/bank-payment/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/bank-payment/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/bank-payment/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/bank-payment/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/bank-payment/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/bank-payment) +[![Translation Status](https://translation.odoo-community.org/widgets/bank-payment-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/bank-payment-16-0/?utm_source=widget) + + + +# bank-payment + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_banking_mandate](account_banking_mandate/) | 16.0.1.2.1 | | Banking mandates +[account_banking_mandate_sale](account_banking_mandate_sale/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Adds mandates on sale orders +[account_banking_pain_base](account_banking_pain_base/) | 16.0.1.1.0 | | Base module for PAIN file generation +[account_banking_sepa_credit_transfer](account_banking_sepa_credit_transfer/) | 16.0.1.1.1 | | Create SEPA XML files for Credit Transfers +[account_banking_sepa_direct_debit](account_banking_sepa_direct_debit/) | 16.0.1.1.0 | | Create SEPA files for Direct Debit +[account_payment_mode](account_payment_mode/) | 16.0.1.2.0 | | Account Payment Mode +[account_payment_order](account_payment_order/) | 16.0.1.6.3 | | Account Payment Order +[account_payment_order_grouped_output](account_payment_order_grouped_output/) | 16.0.1.0.2 | | Account Payment Order - Generate grouped moves +[account_payment_order_notification](account_payment_order_notification/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Account Payment Order Notification +[account_payment_partner](account_payment_partner/) | 16.0.1.2.2 | | Adds payment mode on partners and invoices +[account_payment_purchase](account_payment_purchase/) | 16.0.2.0.1 | | Adds Bank Account and Payment Mode on Purchase Orders +[account_payment_purchase_stock](account_payment_purchase_stock/) | 16.0.1.0.0 | | Integrate Account Payment Purchase with Stock +[account_payment_sale](account_payment_sale/) | 16.0.1.0.0 | | Adds payment mode on sale orders + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-reconcile&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-reconcile/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-reconcile/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-reconcile/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-reconcile/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-reconcile/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-reconcile) +[![Translation Status](https://translation.odoo-community.org/widgets/account-reconcile-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-reconcile-16-0/?utm_source=widget) + + + +# account-reconcile + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_mass_reconcile](account_mass_reconcile/) | 16.0.1.1.1 | | Account Mass Reconcile +[account_move_base_import](account_move_base_import/) | 16.0.1.0.1 | | Journal Entry base import +[account_move_line_reconcile_manual](account_move_line_reconcile_manual/) | 16.0.2.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Manually reconcile Journal Items +[account_move_reconcile_forbid_cancel](account_move_reconcile_forbid_cancel/) | 16.0.1.0.1 | | Account Move Reconcile Forbid Cancel +[account_reconcile_oca](account_reconcile_oca/) | 16.0.1.2.8 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | Reconcile addons for Odoo CE accounting +[account_statement_base](account_statement_base/) | 16.0.1.3.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Base module for Bank Statements +[base_transaction_id](base_transaction_id/) | 16.0.1.0.0 | | Base transaction ID for financial institutes + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/bank-statement-import&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/bank-statement-import/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/bank-statement-import/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/bank-statement-import/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/bank-statement-import/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/bank-statement-import/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/bank-statement-import) +[![Translation Status](https://translation.odoo-community.org/widgets/bank-statement-import-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/bank-statement-import-16-0/?utm_source=widget) + + + +# OCA bank statement import modules for Odoo + +This repository hosts additionnal parsers and import features for bank statements. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_statement_import_base](account_statement_import_base/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Base module for Bank Statement Import +[account_statement_import_camt](account_statement_import_camt/) | 16.0.1.0.0 | | CAMT Format Bank Statements Import +[account_statement_import_camt54](account_statement_import_camt54/) | 16.0.1.0.0 | | Bank Account Camt54 Import +[account_statement_import_file](account_statement_import_file/) | 16.0.1.0.2 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Import Statement Files +[account_statement_import_file_reconcile_oca](account_statement_import_file_reconcile_oca/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Import Statement Files and Go Direct to Reconciliation +[account_statement_import_ofx](account_statement_import_ofx/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Import OFX Bank Statement +[account_statement_import_online](account_statement_import_online/) | 16.0.1.2.1 | [![alexey-pelykh](https://github.com/alexey-pelykh.png?size=30px)](https://github.com/alexey-pelykh) | Online bank statements update +[account_statement_import_online_paypal](account_statement_import_online_paypal/) | 16.0.1.0.1 | [![alexey-pelykh](https://github.com/alexey-pelykh.png?size=30px)](https://github.com/alexey-pelykh) | Online bank statements for PayPal.com +[account_statement_import_online_ponto](account_statement_import_online_ponto/) | 16.0.1.1.0 | | Online Bank Statements: MyPonto.com +[account_statement_import_sheet_file](account_statement_import_sheet_file/) | 16.0.1.1.0 | [![alexey-pelykh](https://github.com/alexey-pelykh.png?size=30px)](https://github.com/alexey-pelykh) | Import TXT/CSV or XLSX files as Bank Statements in Odoo + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/account-payment&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/account-payment/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-payment/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/account-payment/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/account-payment/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/account-payment/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/account-payment) +[![Translation Status](https://translation.odoo-community.org/widgets/account-payment-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/account-payment-16-0/?utm_source=widget) + + + +# account-payment + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_due_list](account_due_list/) | 16.0.1.2.0 | | List of open credits and debits, with due date +[account_due_list_aging_comment](account_due_list_aging_comment/) | 16.0.1.0.0 | | Account Due List Aging Comment +[account_due_list_payment_mode](account_due_list_payment_mode/) | 16.0.1.0.0 | | Payment Due List Payment Mode +[account_payment_multi_deduction](account_payment_multi_deduction/) | 16.0.1.0.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Payment Register with Multiple Deduction +[account_payment_notification](account_payment_notification/) | 16.0.1.0.1 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Notifiy upcoming payments +[account_payment_promissory_note](account_payment_promissory_note/) | 16.0.1.0.1 | | Account Payment Promissory Note +[account_payment_return](account_payment_return/) | 16.0.1.0.2 | | Manage the return of your payments +[account_payment_return_import](account_payment_return_import/) | 16.0.1.0.1 | | This module adds a generic wizard to import payment returnfile formats. Is only the base to be extended by anothermodules +[account_payment_return_import_iso20022](account_payment_return_import_iso20022/) | 16.0.1.0.1 | | This addon allows to import payment returns from ISO 20022 files like PAIN or CAMT. +[account_payment_term_extension](account_payment_term_extension/) | 16.0.1.0.1 | | Adds rounding, months, weeks and multiple payment days properties on payment term lines + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-16-0/?utm_source=widget) + + + +# connector + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[component](component/) | 16.0.1.1.1 | [![guewen](https://github.com/guewen.png?size=30px)](https://github.com/guewen) | Add capabilities to register and use decoupled components, as an alternative to model classes +[component_event](component_event/) | 16.0.1.0.1 | | Components Events +[connector](connector/) | 16.0.1.0.0 | | Connector +[connector_base_product](connector_base_product/) | 16.0.1.0.0 | | Connector Base Product +[test_component](test_component/) | 16.0.1.0.0 | [![guewen](https://github.com/guewen.png?size=30px)](https://github.com/guewen) | Automated tests for Components, do not install. +[test_connector](test_connector/) | 16.0.1.0.0 | | Automated tests for Connector, do not install. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-ecommerce&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-ecommerce/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-ecommerce/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-ecommerce/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-ecommerce/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-ecommerce/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-ecommerce) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-ecommerce-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-ecommerce-16-0/?utm_source=widget) + + + +# connector-ecommerce + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[connector_ecommerce](connector_ecommerce/) | 16.0.1.0.0 | | Connector for E-Commerce + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/queue&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/queue/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/queue/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/queue/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/queue/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/queue/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/queue) +[![Translation Status](https://translation.odoo-community.org/widgets/queue-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/queue-16-0/?utm_source=widget) + + + +# Odoo Queue Job + +Asynchronous Job Queue. Delay Model methods in asynchronous jobs, executed in the background as soon as possible or on a schedule. Support Channels to segregates jobs in different queues with different capacities. Unlike scheduled tasks, a job captures arguments for later processing. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_export_async](base_export_async/) | 16.0.1.0.0 | | Asynchronous export with job queue +[base_import_async](base_import_async/) | 16.0.1.1.0 | | Import CSV files in the background +[queue_job](queue_job/) | 16.0.2.6.0 | [![guewen](https://github.com/guewen.png?size=30px)](https://github.com/guewen) | Job Queue +[queue_job_batch](queue_job_batch/) | 16.0.1.0.0 | | Job Queue Batch +[queue_job_cron](queue_job_cron/) | 16.0.2.0.0 | | Scheduled Actions as Queue Jobs +[queue_job_cron_jobrunner](queue_job_cron_jobrunner/) | 16.0.1.0.0 | [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Run jobs without a dedicated JobRunner +[queue_job_subscribe](queue_job_subscribe/) | 16.0.1.0.0 | | Control which users are subscribed to queue job notifications +[test_queue_job](test_queue_job/) | 16.0.2.2.1 | | Queue Job Tests +[test_queue_job_batch](test_queue_job_batch/) | 16.0.1.0.0 | | Test Job Queue Batch + + +Unported addons +--------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[test_base_import_async](test_base_import_async/) | 14.0.1.0.1 (unported) | | Test suite for base_import_async. Normally you don't need to install this. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-accountedge&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-accountedge/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-accountedge/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-accountedge/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-accountedge/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-accountedge/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-accountedge) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-accountedge-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-accountedge-16-0/?utm_source=widget) + + + +# connector-accountedge + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-cmis&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-cmis/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-cmis/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-cmis/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-cmis/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-cmis/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-cmis) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-cmis-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-cmis-16-0/?utm_source=widget) + + + +# connector-cmis + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[cmis](cmis/) | 16.0.1.0.0 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Connect Odoo with a CMIS server + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-infor&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-infor/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-infor/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-infor/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-infor/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-infor/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-infor) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-infor-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-infor-16-0/?utm_source=widget) + + + +# connector-infor + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-lengow&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-lengow/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-lengow/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-lengow/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-lengow/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-lengow/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-lengow) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-lengow-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-lengow-16-0/?utm_source=widget) + + + +# connector-lengow + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-lims&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-lims/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-lims/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-lims/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-lims/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-lims/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-lims) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-lims-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-lims-16-0/?utm_source=widget) + + + +# connector-lims + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-magento&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-magento/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-magento/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-magento/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-magento/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-magento/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-magento) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-magento-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-magento-16-0/?utm_source=widget) + + + +# connector-magento + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-prestashop&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-prestashop/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-prestashop/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-prestashop/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-prestashop/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-prestashop/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-prestashop) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-prestashop-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-prestashop-16-0/?utm_source=widget) + + + +# connector-prestashop + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-sage&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-sage/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-sage/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-sage/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-sage/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-sage/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-sage) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-sage-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-sage-16-0/?utm_source=widget) + + + +# connector-sage + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-salesforce&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-salesforce/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-salesforce/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-salesforce/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-salesforce/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-salesforce/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-salesforce) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-salesforce-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-salesforce-16-0/?utm_source=widget) + + + +# connector-salesforce + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-spscommerce&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-spscommerce/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-spscommerce/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-spscommerce/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-spscommerce/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-spscommerce/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-spscommerce) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-spscommerce-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-spscommerce-16-0/?utm_source=widget) + + + +# connector-spscommerce + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-woocommerce&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-woocommerce/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-woocommerce/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-woocommerce/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-woocommerce/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-woocommerce/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-woocommerce) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-woocommerce-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-woocommerce-16-0/?utm_source=widget) + + + +# connector-woocommerce + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/sale-workflow/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/sale-workflow/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/sale-workflow/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/sale-workflow/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/sale-workflow/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/sale-workflow) +[![Translation Status](https://translation.odoo-community.org/widgets/sale-workflow-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/sale-workflow-16-0/?utm_source=widget) + + + +# sale-workflow + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[partner_contact_sale_info_propagation](partner_contact_sale_info_propagation/) | 16.0.1.0.1 | | Propagate Salesperson and Sales Channel from Company to Contacts +[partner_sale_pivot](partner_sale_pivot/) | 16.0.1.0.0 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | Sales analysis from customer form view +[portal_sale_personal_data_only](portal_sale_personal_data_only/) | 16.0.1.0.0 | | Portal Sale Personal Data Only +[product_form_sale_link](product_form_sale_link/) | 16.0.1.0.1 | | Adds a button on product forms to access Sale Lines +[product_supplierinfo_for_customer_sale](product_supplierinfo_for_customer_sale/) | 16.0.1.0.0 | | Loads in every sale order line the customer code defined in the product +[sale_advance_payment](sale_advance_payment/) | 16.0.1.0.0 | | Allow to add advance payments on sales and then use them on invoices +[sale_auto_remove_zero_quantity_lines](sale_auto_remove_zero_quantity_lines/) | 16.0.1.0.0 | | On sale confirmation remove lines with zero quantities +[sale_automatic_workflow](sale_automatic_workflow/) | 16.0.1.0.2 | | Sale Automatic Workflow +[sale_automatic_workflow_job](sale_automatic_workflow_job/) | 16.0.1.0.0 | | Execute sale automatic workflows in queue jobs +[sale_automatic_workflow_payment_mode](sale_automatic_workflow_payment_mode/) | 16.0.1.0.0 | | Sale Automatic Workflow - Payment Mode +[sale_blanket_order](sale_blanket_order/) | 16.0.1.0.0 | | Blanket Orders +[sale_cancel_reason](sale_cancel_reason/) | 16.0.1.0.1 | | Sale Cancel Reason +[sale_commercial_partner](sale_commercial_partner/) | 16.0.1.0.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add stored related field 'Commercial Entity' on sale orders +[sale_company_currency](sale_company_currency/) | 16.0.1.0.0 | | Company Currency in Sale Orders +[sale_delivery_split_date](sale_delivery_split_date/) | 16.0.1.0.0 | | Sale Deliveries split by date +[sale_delivery_state](sale_delivery_state/) | 16.0.1.0.1 | | Show the delivery state on the sale order +[sale_discount_display_amount](sale_discount_display_amount/) | 16.0.1.0.0 | | This addon intends to display the amount of the discount computed on sale_order_line and sale_order level +[sale_elaboration](sale_elaboration/) | 16.0.1.1.0 | | Set an elaboration for any sale line +[sale_exception](sale_exception/) | 16.0.1.3.0 | | Custom exceptions on sale order +[sale_exception_holidays_public](sale_exception_holidays_public/) | 16.0.1.0.1 | [![jbaudoux](https://github.com/jbaudoux.png?size=30px)](https://github.com/jbaudoux) | Raise a sale exception if there is a commitment_date on the SO and this date is a public holidays for the shipping partner address +[sale_fixed_discount](sale_fixed_discount/) | 16.0.1.0.0 | | Allows to apply fixed amount discounts in sales orders. +[sale_force_invoiced](sale_force_invoiced/) | 16.0.1.0.0 | | Allows to force the invoice status of the sales order to Invoiced +[sale_invoice_frequency](sale_invoice_frequency/) | 16.0.1.2.1 | [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Define the invoice frequency for customers +[sale_last_price_info](sale_last_price_info/) | 16.0.1.0.0 | | Product Last Price Info - Sale +[sale_loyalty_exclude](sale_loyalty_exclude/) | 16.0.1.0.0 | | Exclude products from sale loyalty program +[sale_manual_delivery](sale_manual_delivery/) | 16.0.1.0.1 | | Create manually your deliveries +[sale_mrp_bom](sale_mrp_bom/) | 16.0.1.0.0 | | Allows define a BOM in the sales lines. +[sale_numeric_step](sale_numeric_step/) | 16.0.1.0.1 | [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Improve mobile/tablet sale process by adding numeric step widgets +[sale_order_amount_to_invoice](sale_order_amount_to_invoice/) | 16.0.1.0.0 | | Show total amount to invoice in quotations/sales orders +[sale_order_archive](sale_order_archive/) | 16.0.1.0.0 | | Archive Sale Orders +[sale_order_carrier_auto_assign](sale_order_carrier_auto_assign/) | 16.0.1.0.0 | | Auto assign delivery carrier on sale order confirmation +[sale_order_currency_rate](sale_order_currency_rate/) | 16.0.1.0.0 | | Currency Rate in Sale Order +[sale_order_general_discount](sale_order_general_discount/) | 16.0.1.0.0 | | General discount per sale order +[sale_order_general_discount_triple](sale_order_general_discount_triple/) | 16.0.2.0.1 | [![ashishhirapara](https://github.com/ashishhirapara.png?size=30px)](https://github.com/ashishhirapara) | General discount per sale order with triple +[sale_order_invoice_amount](sale_order_invoice_amount/) | 16.0.1.0.0 | | Display the invoiced and uninvoiced total in the sale order +[sale_order_invoicing_finished_task](sale_order_invoicing_finished_task/) | 16.0.1.0.1 | | Control invoice order lines if their related task has been set to invoiceable +[sale_order_invoicing_picking_filter](sale_order_invoicing_picking_filter/) | 16.0.1.0.0 | | Create invoices from sale orders based on the products in pickings. +[sale_order_line_date](sale_order_line_date/) | 16.0.1.1.0 | | Adds a commitment date to each sale order line. +[sale_order_line_delivery_state](sale_order_line_delivery_state/) | 16.0.1.0.0 | | Show the delivery state on the sale order line +[sale_order_line_field_from_product_attribute](sale_order_line_field_from_product_attribute/) | 16.0.1.0.0 | | Store Attribute value sis Sales Order line fields +[sale_order_line_input](sale_order_line_input/) | 16.0.1.0.0 | | Search, create or modify directly sale order lines +[sale_order_line_menu](sale_order_line_menu/) | 16.0.1.3.1 | | Adds a Sale Order Lines Menu +[sale_order_line_price_history](sale_order_line_price_history/) | 16.0.1.1.1 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) [![CarlosRoca13](https://github.com/CarlosRoca13.png?size=30px)](https://github.com/CarlosRoca13) [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) | Sale order line price history +[sale_order_line_sequence](sale_order_line_sequence/) | 16.0.2.0.0 | | Propagates SO line sequence to invoices and stock picking. +[sale_order_line_tag](sale_order_line_tag/) | 16.0.1.0.0 | [![smaciaosi](https://github.com/smaciaosi.png?size=30px)](https://github.com/smaciaosi) [![dreispt](https://github.com/dreispt.png?size=30px)](https://github.com/dreispt) [![ckolobow](https://github.com/ckolobow.png?size=30px)](https://github.com/ckolobow) | Add tags to classify sales order line reasons +[sale_order_lot_generator](sale_order_lot_generator/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) [![mourad-ehm](https://github.com/mourad-ehm.png?size=30px)](https://github.com/mourad-ehm) [![bealdav](https://github.com/bealdav.png?size=30px)](https://github.com/bealdav) | Sale Order Lot Generator +[sale_order_lot_selection](sale_order_lot_selection/) | 16.0.1.0.1 | [![bodedra](https://github.com/bodedra.png?size=30px)](https://github.com/bodedra) | Sale Order Lot Selection +[sale_order_price_recalculation](sale_order_price_recalculation/) | 16.0.1.0.0 | | Recalculate prices / Reset descriptions on sale order lines +[sale_order_product_availability_inline](sale_order_product_availability_inline/) | 16.0.1.0.0 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | Show product availability in sales order line product drop-down. +[sale_order_product_picker](sale_order_product_picker/) | 16.0.1.1.1 | | Sale Order Product Picker +[sale_order_product_recommendation](sale_order_product_recommendation/) | 16.0.2.1.2 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Recommend products to sell to customer based on history +[sale_order_product_recommendation_elaboration](sale_order_product_recommendation_elaboration/) | 16.0.1.0.3 | [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Include elaborations when generating or accepting sale order product recommendations +[sale_order_product_recommendation_packaging_default](sale_order_product_recommendation_packaging_default/) | 16.0.2.1.1 | [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Quickly add recommended products to sale order by packagings +[sale_order_product_recommendation_quick_add](sale_order_product_recommendation_quick_add/) | 16.0.1.0.0 | | Add recommended products to sale order in a single click +[sale_order_qty_change_no_recompute](sale_order_qty_change_no_recompute/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Prevent recompute if only quantity has changed in sale order line +[sale_order_revision](sale_order_revision/) | 16.0.1.0.1 | | Keep track of revised quotations +[sale_order_type](sale_order_type/) | 16.0.1.1.0 | | Sale Order Type +[sale_order_warn_message](sale_order_warn_message/) | 16.0.1.0.0 | | Add a popup warning on sale to ensure warning is populated +[sale_packaging_default](sale_packaging_default/) | 16.0.2.1.0 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Simplify using products default packaging for sales +[sale_partner_incoterm](sale_partner_incoterm/) | 16.0.1.0.0 | | Set the customer preferred incoterm on each sales order +[sale_partner_pricelist](sale_partner_pricelist/) | 16.0.1.0.0 | | Sale Partner Pricelist +[sale_partner_selectable_option](sale_partner_selectable_option/) | 16.0.1.1.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Sale Partner Selectable Option +[sale_payment_sheet](sale_payment_sheet/) | 16.0.1.0.1 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Allow to create invoice payments to commercial users without accounting permissions +[sale_pricelist_from_commitment_date](sale_pricelist_from_commitment_date/) | 16.0.1.0.0 | | Use sale order commitment date to compute line price from pricelist +[sale_pricelist_technical](sale_pricelist_technical/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Prevent some pricelists from being selected on order and customer forms +[sale_procurement_customer](sale_procurement_customer/) | 16.0.1.0.0 | | Allows to transmit the customer to the procurement group +[sale_procurement_group_by_line](sale_procurement_group_by_line/) | 16.0.1.0.0 | | Base module for multiple procurement group by Sale order +[sale_product_category_menu](sale_product_category_menu/) | 16.0.1.0.0 | | Shows 'Product Categories' menu item in Sales +[sale_product_multi_add](sale_product_multi_add/) | 16.0.1.0.0 | | Sale Product Multi Add +[sale_product_packaging_container_deposit](sale_product_packaging_container_deposit/) | 16.0.1.0.1 | | Sale Product Packaging Container Deposit +[sale_product_set](sale_product_set/) | 16.0.2.0.0 | | Sale product set +[sale_quotation_number](sale_quotation_number/) | 16.0.1.0.2 | | Different sequence for sale quotations +[sale_shipping_info_helper](sale_shipping_info_helper/) | 16.0.1.0.0 | | Add shipping amounts on sale order +[sale_sourced_by_line](sale_sourced_by_line/) | 16.0.1.0.0 | | Multiple warehouse source locations for Sale order +[sale_start_end_dates](sale_start_end_dates/) | 16.0.1.0.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Adds start date and end date on sale order lines +[sale_stock_cancel_restriction](sale_stock_cancel_restriction/) | 16.0.1.0.0 | | Sale Stock Cancel Restriction +[sale_stock_delivery_state](sale_stock_delivery_state/) | 16.0.1.0.1 | | Change the way to compute the delivery state +[sale_stock_line_sequence](sale_stock_line_sequence/) | 16.0.1.0.0 | | Glue Module for Sale Order Line Sequence and Stock Picking Line Sequence +[sale_stock_picking_blocking](sale_stock_picking_blocking/) | 16.0.1.0.0 | | Allow you to block the creation of deliveries from a sale order. +[sale_stock_picking_note](sale_stock_picking_note/) | 16.0.1.1.1 | [![carlosdauden](https://github.com/carlosdauden.png?size=30px)](https://github.com/carlosdauden) [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Add picking note in sale and purchase order +[sale_stock_product_recommendation](sale_stock_product_recommendation/) | 16.0.1.0.0 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) | Display stock info when recommending products to sell +[sale_substate](sale_substate/) | 16.0.1.0.0 | | Sale Sub State +[sale_tier_validation](sale_tier_validation/) | 16.0.1.0.4 | | Extends the functionality of Sale Orders to support a tier validation process. +[sale_triple_discount](sale_triple_discount/) | 16.0.1.0.1 | | Manage triple discount on sale order lines +[sale_wishlist](sale_wishlist/) | 16.0.1.0.0 | | Handle sale wishlist for partners +[sales_team_security](sales_team_security/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | New group for seeing only sales channel's documents +[sell_only_by_packaging](sell_only_by_packaging/) | 16.0.1.1.0 | | Manage sale of packaging + + +Unported addons +--------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[sale_invoice_policy](sale_invoice_policy/) | 16.0.1.0.0 (unported) | | Sales Management: let the user choose the invoice policy on the order + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/crm&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/crm/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/crm/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/crm/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/crm/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/crm/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/crm) +[![Translation Status](https://translation.odoo-community.org/widgets/crm-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/crm-16-0/?utm_source=widget) + + + +# crm + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[crm_claim](crm_claim/) | 16.0.1.1.0 | | Track your customers/vendors claims and grievances. +[crm_claim_code](crm_claim_code/) | 16.0.1.0.0 | | Sequential Code for Claims +[crm_claim_type](crm_claim_type/) | 16.0.1.0.0 | | Claim types for CRM +[crm_industry](crm_industry/) | 16.0.1.0.0 | | Link leads/opportunities to industries +[crm_lead_code](crm_lead_code/) | 16.0.1.0.1 | | Sequential Code for Leads / Opportunities +[crm_lead_currency](crm_lead_currency/) | 16.0.1.0.0 | [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) | On leads/opportunities, add the amount in the customer's currency. +[crm_lead_firstname](crm_lead_firstname/) | 16.0.1.0.1 | | Specify split names for contacts in leads +[crm_lead_search_archive](crm_lead_search_archive/) | 16.0.1.0.1 | [![bealdav](https://github.com/bealdav.png?size=30px)](https://github.com/bealdav) | Add a filter to search both in active/archive lead +[crm_lead_to_task](crm_lead_to_task/) | 16.0.1.0.1 | | Create Tasks from Leads/Opportunities +[crm_lead_vat](crm_lead_vat/) | 16.0.1.0.1 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Add VAT field to leads +[crm_location](crm_location/) | 16.0.1.0.1 | | CRM location +[crm_partner_assign](crm_partner_assign/) | 16.0.0.1.2 | [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) | Assign a Partner to an Opportunity/Lead/Partner to indicate Partnership +[crm_phonecall](crm_phonecall/) | 16.0.1.1.0 | | CRM Phone Calls +[crm_project_task](crm_project_task/) | 16.0.1.0.2 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Create tasks from lead or opportunity +[crm_salesperson_planner](crm_salesperson_planner/) | 16.0.1.0.0 | | Crm Salesperson Planner +[crm_salesperson_planner_sale](crm_salesperson_planner_sale/) | 16.0.1.0.0 | | Crm Salesperson Planner Sale +[crm_security_group](crm_security_group/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Add new group in Sales to show only CRM +[crm_stage_probability](crm_stage_probability/) | 16.0.1.0.0 | | Define fixed probability on the stages + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/partner-contact&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/partner-contact/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/partner-contact/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/partner-contact/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/partner-contact/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/partner-contact/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/partner-contact) +[![Translation Status](https://translation.odoo-community.org/widgets/partner-contact-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/partner-contact-16-0/?utm_source=widget) + + + +# Partner Contact + +Contact-related odoo addons. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_partner_company_group](account_partner_company_group/) | 16.0.1.0.0 | | Adds the possibility to add a company group to a company +[base_country_state_translatable](base_country_state_translatable/) | 16.0.1.0.0 | | Translate Country States +[base_location](base_location/) | 16.0.1.0.1 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Enhanced zip/npa management system +[base_location_geonames_import](base_location_geonames_import/) | 16.0.1.0.0 | | Import zip entries from Geonames +[base_partner_company_group](base_partner_company_group/) | 16.0.1.0.0 | | Adds the possibility to add a company group to a company +[base_partner_sequence](base_partner_sequence/) | 16.0.1.0.1 | | Sets customer's code from a sequence +[crm_partner_company_group](crm_partner_company_group/) | 16.0.1.0.0 | | Adds the possibility to add a company group to a company +[partner_accreditation](partner_accreditation/) | 16.0.1.0.0 | [![victor-champonnois](https://github.com/victor-champonnois.png?size=30px)](https://github.com/victor-champonnois) | Add Accreditation to Partners +[partner_address_split](partner_address_split/) | 16.0.1.0.0 | | Add specific helper methods +[partner_address_street3](partner_address_street3/) | 16.0.1.0.0 | | Add a third address line on partners +[partner_address_two_lines](partner_address_two_lines/) | 16.0.1.0.0 | | The company and the partner name are on two different lines +[partner_affiliate](partner_affiliate/) | 16.0.1.0.0 | | Partner Affiliates +[partner_bank_acc_type_constraint](partner_bank_acc_type_constraint/) | 16.0.1.0.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Adds constraint on bank account type +[partner_bank_code](partner_bank_code/) | 16.0.1.0.1 | | Add fields information in banks +[partner_capital](partner_capital/) | 16.0.0.1.1 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Partners Capital +[partner_category_type](partner_category_type/) | 16.0.1.0.0 | [![JordiMForgeFlow](https://github.com/JordiMForgeFlow.png?size=30px)](https://github.com/JordiMForgeFlow) | Add a selection field 'Type' to classify Contact Tags. +[partner_company_default](partner_company_default/) | 16.0.1.1.1 | | Partner Company Default +[partner_company_group](partner_company_group/) | 16.0.1.0.0 | [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) | Adds the possibility to add a company group to a company +[partner_company_type](partner_company_type/) | 16.0.1.0.0 | | Adds a company type to partner that are companies +[partner_contact_access_link](partner_contact_access_link/) | 16.0.1.1.0 | [![Yajo](https://github.com/Yajo.png?size=30px)](https://github.com/Yajo) | Allow to visit the full contact form from a company +[partner_contact_address_default](partner_contact_address_default/) | 16.0.1.0.0 | | Set a default delivery and invoice address for contacts +[partner_contact_age_range](partner_contact_age_range/) | 16.0.1.0.0 | | Age Range for Contact's +[partner_contact_birthdate](partner_contact_birthdate/) | 16.0.1.0.0 | | Contact's birthdate +[partner_contact_department](partner_contact_department/) | 16.0.1.0.1 | | Assign contacts to departments +[partner_contact_gender](partner_contact_gender/) | 16.0.1.0.0 | | Add gender field to contacts +[partner_contact_job_position](partner_contact_job_position/) | 16.0.1.0.0 | | Categorize job positions for contacts +[partner_contact_lang](partner_contact_lang/) | 16.0.1.0.0 | | Manage language in contacts +[partner_contact_nationality](partner_contact_nationality/) | 16.0.1.0.1 | | Add nationality field to contacts +[partner_contact_personal_information_page](partner_contact_personal_information_page/) | 16.0.1.0.1 | | Add a page to contacts form to put personal information +[partner_contact_type_end_user](partner_contact_type_end_user/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Adds a new contact type 'End User' +[partner_country_state_required](partner_country_state_required/) | 16.0.1.0.0 | | Partner Country State Required +[partner_deduplicate_acl](partner_deduplicate_acl/) | 16.0.1.0.0 | | Contact deduplication with fine-grained permission control +[partner_deduplicate_by_ref](partner_deduplicate_by_ref/) | 16.0.1.0.0 | | Deduplicate Contacts by reference +[partner_deduplicate_filter](partner_deduplicate_filter/) | 16.0.1.0.0 | | Exclude records from the deduplication +[partner_disable_gravatar](partner_disable_gravatar/) | 16.0.1.0.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Disable automatic connection to gravatar.com +[partner_email_check](partner_email_check/) | 16.0.1.0.0 | | Validate email address field +[partner_email_duplicate_warn](partner_email_duplicate_warn/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Warning banner on partner form if another partner has the same email +[partner_external_map](partner_external_map/) | 16.0.1.0.0 | | Add Map and Map Routing buttons on partner form to open GMaps, OSM, Bing and others +[partner_fax](partner_fax/) | 16.0.1.0.0 | | Add fax number on partner +[partner_firstname](partner_firstname/) | 16.0.1.0.1 | | Split first name and last name for non company partners +[partner_identification](partner_identification/) | 16.0.1.0.3 | | Partner Identification Numbers +[partner_identification_eori](partner_identification_eori/) | 16.0.1.0.0 | | This addon extends "Partner Identification Numbers" to provide a number category for EORI Number +[partner_identification_gln](partner_identification_gln/) | 16.0.1.0.1 | | This addon extends "Partner Identification Numbers" to provide a number category for GLN registration +[partner_industry_secondary](partner_industry_secondary/) | 16.0.1.0.0 | | Add secondary partner industries +[partner_interest_group](partner_interest_group/) | 16.0.1.1.0 | [![victor-champonnois](https://github.com/victor-champonnois.png?size=30px)](https://github.com/victor-champonnois) | Add Interest Group to Partners +[partner_label](partner_label/) | 16.0.1.0.0 | | Print partner labels +[partner_manual_rank](partner_manual_rank/) | 16.0.1.1.2 | [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) [![frahikLV](https://github.com/frahikLV.png?size=30px)](https://github.com/frahikLV) | Be able to manually flag partners as customer or supplier. +[partner_middlename](partner_middlename/) | 16.0.1.0.0 | | Have split Middle +[partner_mobile_duplicate_warn](partner_mobile_duplicate_warn/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Warning banner on partner form if another partner has the same mobile +[partner_multi_relation](partner_multi_relation/) | 16.0.1.0.0 | | Partner Relations +[partner_pricelist_search](partner_pricelist_search/) | 16.0.1.0.0 | | Partner pricelist search +[partner_purchase_manager](partner_purchase_manager/) | 16.0.1.0.1 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Add purchase manager field in partner +[partner_ref_unique](partner_ref_unique/) | 16.0.1.0.0 | | Add an unique constraint to partner ref field +[partner_second_lastname](partner_second_lastname/) | 16.0.1.0.1 | | Have split first and second lastnames +[partner_stage](partner_stage/) | 16.0.1.0.0 | [![dreispt](https://github.com/dreispt.png?size=30px)](https://github.com/dreispt) | Add lifecycle Stages to Partners +[partner_subject_to_vat](partner_subject_to_vat/) | 16.0.1.0.0 | [![victor-champonnois](https://github.com/victor-champonnois.png?size=30px)](https://github.com/victor-champonnois) | Record whether a company is subject to VAT. +[partner_tier_validation](partner_tier_validation/) | 16.0.1.0.0 | [![dreispt](https://github.com/dreispt.png?size=30px)](https://github.com/dreispt) | Support a tier validation process for Contacts +[partner_tz](partner_tz/) | 16.0.1.0.0 | | Remove partner timezone default value and display on form +[partner_vat_unique](partner_vat_unique/) | 16.0.1.0.0 | | Module to make the VAT number unique for customers and suppliers. +[purchase_supplier_rank](purchase_supplier_rank/) | 16.0.1.0.1 | | Update Supplier Rank when creating a Purchase Order +[sale_customer_rank](sale_customer_rank/) | 16.0.1.0.0 | | Update Customer Rank when creating a Sale Order +[sale_partner_company_group](sale_partner_company_group/) | 16.0.1.0.0 | | Adds the possibility to add a company group to a company + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/sale-financial&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/sale-financial/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/sale-financial/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/sale-financial/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/sale-financial/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/sale-financial/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/sale-financial) +[![Translation Status](https://translation.odoo-community.org/widgets/sale-financial-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/sale-financial-16-0/?utm_source=widget) + + + +# sale-financial + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/sale-promotion&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/sale-promotion/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/sale-promotion/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/sale-promotion/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/sale-promotion/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/sale-promotion/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/sale-promotion) +[![Translation Status](https://translation.odoo-community.org/widgets/sale-promotion-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/sale-promotion-16-0/?utm_source=widget) + + + +# Sales promotion management + +Odoo addons for handling promotions on the sales funnel. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[coupon_chatter](coupon_chatter/) | 16.0.1.0.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Register messages and activities on the sale coupon records +[loyalty_incompatibility](loyalty_incompatibility/) | 16.0.1.0.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Allows to set incompatibility rules between promotions +[loyalty_initial_date_validity](loyalty_initial_date_validity/) | 16.0.1.0.1 | | Set a start date for a promotion +[loyalty_limit](loyalty_limit/) | 16.0.1.0.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Restrict number of promotions per customer or salesman +[loyalty_mass_mailing](loyalty_mass_mailing/) | 16.0.1.0.0 | | Loyalty Mass Mailing +[loyalty_partner_applicability](loyalty_partner_applicability/) | 16.0.2.0.2 | | Enables the definition of a customer filter for promotion rules that will only be applied to customers who meet the specified conditions in the filter. +[sale_loyalty_incompatibility](sale_loyalty_incompatibility/) | 16.0.1.0.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Allows to set incompatibility rules between promotions in sale orders +[sale_loyalty_initial_date_validity](sale_loyalty_initial_date_validity/) | 16.0.1.0.1 | | Sale Loyalty Initial Date Validity +[sale_loyalty_limit](sale_loyalty_limit/) | 16.0.1.0.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Restrict number of promotions per customer or salesman +[sale_loyalty_order_info](sale_loyalty_order_info/) | 16.0.1.0.0 | | Add info on sale order about applied loyalties +[sale_loyalty_order_line_link](sale_loyalty_order_line_link/) | 16.0.1.0.1 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Adds a link between loyalty programs and their generated order linesfor easing tracking +[sale_loyalty_partner](sale_loyalty_partner/) | 16.0.1.0.0 | | Sale Loyalty Partner +[sale_loyalty_partner_applicability](sale_loyalty_partner_applicability/) | 16.0.1.0.2 | | Enables the definition of a customer filter for promotion rules that will only be applied to customers who meet the specified conditions in the filter. +[website_sale_loyalty_page](website_sale_loyalty_page/) | 16.0.1.0.0 | | Website Sale Loyalty Page + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/sale-reporting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/sale-reporting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/sale-reporting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/sale-reporting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/sale-reporting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/sale-reporting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/sale-reporting) +[![Translation Status](https://translation.odoo-community.org/widgets/sale-reporting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/sale-reporting-16-0/?utm_source=widget) + + + +# sale-reporting + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[product_sold_by_delivery_week](product_sold_by_delivery_week/) | 16.0.1.0.1 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Adds a field that graphically hints the weekly product sales +[sale_comment_template](sale_comment_template/) | 16.0.1.0.1 | | Comments texts templates on Sale documents +[sale_layout_category_hide_detail](sale_layout_category_hide_detail/) | 16.0.1.0.0 | | Hide details for sections in sale orders and invoices for reports and customer portal +[sale_order_line_position](sale_order_line_position/) | 16.0.1.1.0 | | Adds position number on sale order line. +[sale_order_product_recommendation_product_sold_by_delivery_week](sale_order_product_recommendation_product_sold_by_delivery_week/) | 16.0.1.1.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Adds the weekly sales field to the recommendation wizard +[sale_order_report_product_image](sale_order_report_product_image/) | 16.0.1.0.0 | | Show product images on Sale documents +[sale_packaging_report](sale_packaging_report/) | 16.0.1.0.1 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Packaging data in sale reports +[sale_report_delivered](sale_report_delivered/) | 16.0.1.0.0 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Sale Report Delivered +[sale_report_delivered_subtotal](sale_report_delivered_subtotal/) | 16.0.1.0.1 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Sale Report Delivered subtotal +[sale_report_delivered_volume](sale_report_delivered_volume/) | 16.0.1.0.0 | | Sale Report Delivered Volume + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/commission&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/commission/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/commission/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/commission/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/commission/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/commission/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/commission) +[![Translation Status](https://translation.odoo-community.org/widgets/commission-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/commission-16-0/?utm_source=widget) + + + +# commission + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_commission](account_commission/) | 16.0.2.2.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Account commissions +[commission](commission/) | 16.0.2.1.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Commissions +[commission_formula](commission_formula/) | 16.0.1.0.0 | | Commissions computed by formulas +[hr_commission](hr_commission/) | 16.0.1.0.0 | | HR commissions +[sale_commission](sale_commission/) | 16.0.1.0.1 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Sales commissions +[sale_commission_product_criteria](sale_commission_product_criteria/) | 16.0.1.0.0 | [![ilyasProgrammer](https://github.com/ilyasProgrammer.png?size=30px)](https://github.com/ilyasProgrammer) | Advanced commissions rules +[sale_commission_salesman](sale_commission_salesman/) | 16.0.1.0.0 | | Sales commissions from salesman + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/event&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/event/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/event/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/event/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/event/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/event/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/event) +[![Translation Status](https://translation.odoo-community.org/widgets/event-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/event-16-0/?utm_source=widget) + + + +# event + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[event_mail](event_mail/) | 16.0.1.0.0 | | Mail settings in events +[event_registration_multi_qty](event_registration_multi_qty/) | 16.0.1.0.0 | | Allow registration grouped by quantities +[event_registration_partner_unique](event_registration_partner_unique/) | 16.0.1.0.0 | | Enforces 1 registration per partner and event +[event_sale_registration_multi_qty](event_sale_registration_multi_qty/) | 16.0.1.0.0 | | Allows sell registrations with more than one attendee +[event_sale_session](event_sale_session/) | 16.0.1.0.1 | | Sell Event Sessions +[event_session](event_session/) | 16.0.1.2.0 | | Sessions in events +[event_session_registration_multi_qty](event_session_registration_multi_qty/) | 16.0.1.0.0 | | Allow registration grouped by quantities in sessions +[partner_event](partner_event/) | 16.0.1.0.1 | | Link partner to events +[website_event_questions_by_ticket](website_event_questions_by_ticket/) | 16.0.1.0.0 | | Events Questions conditional to the chosen ticket +[website_event_require_login](website_event_require_login/) | 16.0.1.0.0 | | Website Event Require Login +[website_event_sale_cart_quantity_readonly](website_event_sale_cart_quantity_readonly/) | 16.0.1.0.0 | [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Prevent the user to change the quantity of an event in the cart + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/survey&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/survey/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/survey/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/survey/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/survey/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/survey/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/survey) +[![Translation Status](https://translation.odoo-community.org/widgets/survey-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/survey-16-0/?utm_source=widget) + + + +# survey + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[survey_question_type_five_star](survey_question_type_five_star/) | 16.0.1.0.0 | | This module adds five stars rating as question type for survey page + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/knowledge&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/knowledge/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/knowledge/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/knowledge/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/knowledge/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/knowledge/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/knowledge) +[![Translation Status](https://translation.odoo-community.org/widgets/knowledge-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/knowledge-16-0/?utm_source=widget) + + + +# knowledge + +Knowlesge management addons. Also has some usefull tools to handle attachments + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[attachment_zipped_download](attachment_zipped_download/) | 16.0.2.0.1 | | Attachment Zipped Download +[document_knowledge](document_knowledge/) | 16.0.1.1.0 | | Documents Knowledge +[document_page](document_page/) | 16.0.1.3.0 | | Document Page +[document_page_approval](document_page_approval/) | 16.0.1.1.0 | | Document Page Approval +[document_page_group](document_page_group/) | 16.0.1.0.1 | | Define access groups on documents +[document_page_reference](document_page_reference/) | 16.0.1.0.1 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | Include references on document pages +[document_page_tag](document_page_tag/) | 16.0.1.0.0 | | Allows you to assign tags or keywords to pages and search for them afterwards +[document_url](document_url/) | 16.0.1.0.4 | | URL attachment +[document_url_google_drive](document_url_google_drive/) | 16.0.1.0.1 | | Attach Google Drive link to Odoo document using Google Drive Picker + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/dms&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/dms/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/dms/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/dms/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/dms/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/dms/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/dms) +[![Translation Status](https://translation.odoo-community.org/widgets/dms-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/dms-16-0/?utm_source=widget) + + + +# dms + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[dms](dms/) | 16.0.1.2.2 | | Document Management System for Odoo + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/e-commerce&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/e-commerce/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/e-commerce/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/e-commerce/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/e-commerce/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/e-commerce/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/e-commerce) +[![Translation Status](https://translation.odoo-community.org/widgets/e-commerce-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/e-commerce-16-0/?utm_source=widget) + + + +# e-commerce + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[product_template_multi_link](product_template_multi_link/) | 16.0.1.0.0 | | Product Multi Links (Template) +[website_sale_attribute_filter_form_submit](website_sale_attribute_filter_form_submit/) | 16.0.1.0.0 | | Allow to apply manually the filters on the e-commerce +[website_sale_attribute_filter_multiselect](website_sale_attribute_filter_multiselect/) | 16.0.1.0.0 | | Add multiselect display type for product and new filter for it +[website_sale_cart_expire](website_sale_cart_expire/) | 16.0.1.0.0 | [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Cancel carts without activity after a configurable time +[website_sale_checkout_skip_payment](website_sale_checkout_skip_payment/) | 16.0.1.1.0 | | Skip payment for logged users in checkout process +[website_sale_comparison_hide_price](website_sale_comparison_hide_price/) | 16.0.1.0.0 | | Hide product prices on the shop +[website_sale_hide_price](website_sale_hide_price/) | 16.0.2.0.0 | | Hide product prices on the shop +[website_sale_invoice_address](website_sale_invoice_address/) | 16.0.1.0.0 | | Set e-Commerce sale orders invoice address as in backend +[website_sale_order_type](website_sale_order_type/) | 16.0.1.0.0 | [![stefan-tecnativa](https://github.com/stefan-tecnativa.png?size=30px)](https://github.com/stefan-tecnativa) [![pilarvargas-tecnativa](https://github.com/pilarvargas-tecnativa.png?size=30px)](https://github.com/pilarvargas-tecnativa) | This module allows sale_order_type to work with website_sale. +[website_sale_product_assortment](website_sale_product_assortment/) | 16.0.1.0.0 | [![CarlosRoca13](https://github.com/CarlosRoca13.png?size=30px)](https://github.com/CarlosRoca13) | Use product assortments to display products available on e-commerce. +[website_sale_product_attachment](website_sale_product_attachment/) | 16.0.1.0.0 | [![Yajo](https://github.com/Yajo.png?size=30px)](https://github.com/Yajo) | Let visitors download attachments from a product page +[website_sale_product_attribute_filter_collapse](website_sale_product_attribute_filter_collapse/) | 16.0.1.0.0 | | Allows the attributes of the categories to be folded +[website_sale_product_attribute_value_filter_existing](website_sale_product_attribute_value_filter_existing/) | 16.0.1.0.3 | | Allow hide attributes values not used in variants +[website_sale_product_brand](website_sale_product_brand/) | 16.0.1.0.1 | | Product Brand Filtering in Website +[website_sale_product_description](website_sale_product_description/) | 16.0.1.0.0 | | Shows custom e-Commerce description for products +[website_sale_product_detail_attribute_image](website_sale_product_detail_attribute_image/) | 16.0.1.0.1 | | Display attributes images in shop product detail +[website_sale_product_image_sample](website_sale_product_image_sample/) | 16.0.1.0.0 | | Display product image sample to select product variant on website +[website_sale_product_item_cart_custom_qty](website_sale_product_item_cart_custom_qty/) | 16.0.1.1.0 | [![CarlosRoca13](https://github.com/CarlosRoca13.png?size=30px)](https://github.com/CarlosRoca13) | Allows to add to cart from product items a custom quantity. +[website_sale_product_reference_displayed](website_sale_product_reference_displayed/) | 16.0.1.0.2 | | Display product reference in e-commerce +[website_sale_require_legal](website_sale_require_legal/) | 16.0.1.0.1 | | Force the user to accept legal tems to buy in the web shop +[website_sale_stock_available](website_sale_stock_available/) | 16.0.1.0.0 | | Display 'Available to promise' in shop online instead of 'Free To Use Quantity' +[website_sale_stock_list_preview](website_sale_stock_list_preview/) | 16.0.1.0.0 | | Show the stock of products on the product previews +[website_sale_stock_provisioning_date](website_sale_stock_provisioning_date/) | 16.0.1.0.0 | | Display provisioning date for a product in shop online +[website_sale_suggest_create_account](website_sale_suggest_create_account/) | 16.0.1.0.2 | | Suggest users to create an account when buying in the website +[website_sale_vat_required](website_sale_vat_required/) | 16.0.1.0.0 | | VAT number required in checkout form +[website_sale_wishlist_hide_price](website_sale_wishlist_hide_price/) | 16.0.1.0.0 | | Hide product prices on the shop +[website_sale_wishlist_keep](website_sale_wishlist_keep/) | 16.0.1.0.1 | | Allows to add products to my cart but keep it in my wishlist" +[website_snippet_product_category](website_snippet_product_category/) | 16.0.1.0.0 | [![Tardo](https://github.com/Tardo.png?size=30px)](https://github.com/Tardo) | Adds a new snippet to show e-commerce categories + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/edi&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/edi/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/edi/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/edi/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/edi/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/edi/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/edi) +[![Translation Status](https://translation.odoo-community.org/widgets/edi-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/edi-16-0/?utm_source=widget) + + + +# edi + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_einvoice_generate](account_einvoice_generate/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Technical module to generate PDF invoices with embedded XML file +[account_invoice_edifact](account_invoice_edifact/) | 16.0.1.0.0 | | Generate customer invoices with EDIFACT/D96A format +[account_invoice_facturx](account_invoice_facturx/) | 16.0.1.2.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Generate Factur-X/ZUGFeRD customer invoices +[account_invoice_facturx_py3o](account_invoice_facturx_py3o/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Generate Factur-X invoices with Py3o reporting engine +[base_business_document_import](base_business_document_import/) | 16.0.1.1.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Provides technical tools to import sale orders or supplier invoices +[base_business_document_import_phone](base_business_document_import_phone/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Use phone numbers to match partners upon import of business documents +[base_edi](base_edi/) | 16.0.1.0.0 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) | Base module to aggregate EDI features. +[base_edifact](base_edifact/) | 16.0.1.2.0 | [![rmorant](https://github.com/rmorant.png?size=30px)](https://github.com/rmorant) | UN/EDIFACT/D96A utilities using pydifact parser +[base_facturx](base_facturx/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Base module for Factur-X/ZUGFeRD +[base_ubl](base_ubl/) | 16.0.1.1.0 | | Base module for Universal Business Language (UBL) +[base_wamas_ubl](base_wamas_ubl/) | 16.0.1.8.0 | | Base module to aggregate WAMAS - UBL features. +[despatch_advice_import](despatch_advice_import/) | 16.0.1.0.0 | | Despatch Advice import +[despatch_advice_import_ubl](despatch_advice_import_ubl/) | 16.0.1.0.0 | | Import Despatch Advice files +[pdf_helper](pdf_helper/) | 16.0.1.1.0 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Provides helpers to work w/ PDFs +[sale_order_import](sale_order_import/) | 16.0.1.2.0 | | Import RFQ or sale orders from files +[sale_order_import_edifact](sale_order_import_edifact/) | 16.0.1.0.0 | [![rmorant](https://github.com/rmorant.png?size=30px)](https://github.com/rmorant) | EDIFACT/D96A Order + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/field-service&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/field-service/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/field-service/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/field-service/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/field-service/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/field-service/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/field-service) +[![Translation Status](https://translation.odoo-community.org/widgets/field-service-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/field-service-16-0/?utm_source=widget) + + + +# field-service + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_territory](base_territory/) | 16.0.1.0.0 | [![wolfhall](https://github.com/wolfhall.png?size=30px)](https://github.com/wolfhall) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | This module allows you to define territories, branches, districts and regions to be used for Field Service operations or Sales. +[fieldservice](fieldservice/) | 16.0.1.4.0 | [![wolfhall](https://github.com/wolfhall.png?size=30px)](https://github.com/wolfhall) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Manage Field Service Locations, Workers and Orders +[fieldservice_account](fieldservice_account/) | 16.0.2.0.0 | [![osimallen](https://github.com/osimallen.png?size=30px)](https://github.com/osimallen) [![brian10048](https://github.com/brian10048.png?size=30px)](https://github.com/brian10048) [![bodedra](https://github.com/bodedra.png?size=30px)](https://github.com/bodedra) | Track invoices linked to Field Service orders +[fieldservice_account_analytic](fieldservice_account_analytic/) | 16.0.1.0.0 | [![osimallen](https://github.com/osimallen.png?size=30px)](https://github.com/osimallen) [![brian10048](https://github.com/brian10048.png?size=30px)](https://github.com/brian10048) [![bodedra](https://github.com/bodedra.png?size=30px)](https://github.com/bodedra) | Track analytic accounts on Field Service locations and orders +[fieldservice_activity](fieldservice_activity/) | 16.0.1.0.0 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) [![osi-scampbell](https://github.com/osi-scampbell.png?size=30px)](https://github.com/osi-scampbell) | Field Service Activities are a set of actions that need to be performed on a service order +[fieldservice_calendar](fieldservice_calendar/) | 16.0.1.0.0 | [![hparfr](https://github.com/hparfr.png?size=30px)](https://github.com/hparfr) | Add calendar to FSM Orders +[fieldservice_crm](fieldservice_crm/) | 16.0.1.0.0 | [![patrickrwilson](https://github.com/patrickrwilson.png?size=30px)](https://github.com/patrickrwilson) | Create Field Service orders from the CRM +[fieldservice_isp_account](fieldservice_isp_account/) | 16.0.1.0.0 | [![osimallen](https://github.com/osimallen.png?size=30px)](https://github.com/osimallen) [![brian10048](https://github.com/brian10048.png?size=30px)](https://github.com/brian10048) [![bodedra](https://github.com/bodedra.png?size=30px)](https://github.com/bodedra) | Invoice Field Service orders based on employee time or contractor costs +[fieldservice_project](fieldservice_project/) | 16.0.1.0.0 | | Create field service orders from a project or project task +[fieldservice_recurring](fieldservice_recurring/) | 16.0.2.0.0 | [![wolfhall](https://github.com/wolfhall.png?size=30px)](https://github.com/wolfhall) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) [![brian10048](https://github.com/brian10048.png?size=30px)](https://github.com/brian10048) | Manage recurring Field Service orders +[fieldservice_route](fieldservice_route/) | 16.0.1.0.0 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Organize the routes of each day. +[fieldservice_sale](fieldservice_sale/) | 16.0.1.1.0 | [![wolfhall](https://github.com/wolfhall.png?size=30px)](https://github.com/wolfhall) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) [![brian10048](https://github.com/brian10048.png?size=30px)](https://github.com/brian10048) | Sell field services. +[fieldservice_size](fieldservice_size/) | 16.0.1.0.0 | [![brian10048](https://github.com/brian10048.png?size=30px)](https://github.com/brian10048) | Manage Sizes for Field Service Locations and Orders +[fieldservice_skill](fieldservice_skill/) | 16.0.1.0.0 | [![osi-scampbell](https://github.com/osi-scampbell.png?size=30px)](https://github.com/osi-scampbell) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Manage your Field Service workers skills +[fieldservice_stage_validation](fieldservice_stage_validation/) | 16.0.1.0.0 | [![brian10048](https://github.com/brian10048.png?size=30px)](https://github.com/brian10048) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Validate input data when reaching a Field Service stage +[fieldservice_stock](fieldservice_stock/) | 16.0.1.2.1 | [![brian10048](https://github.com/brian10048.png?size=30px)](https://github.com/brian10048) [![wolfhall](https://github.com/wolfhall.png?size=30px)](https://github.com/wolfhall) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) [![smangukiya](https://github.com/smangukiya.png?size=30px)](https://github.com/smangukiya) | Integrate the logistics operations with Field Service +[fieldservice_vehicle](fieldservice_vehicle/) | 16.0.1.0.0 | [![wolfhall](https://github.com/wolfhall.png?size=30px)](https://github.com/wolfhall) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Manage Field Service vehicles and assign drivers + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/margin-analysis&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/margin-analysis/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/margin-analysis/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/margin-analysis/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/margin-analysis/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/margin-analysis/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/margin-analysis) +[![Translation Status](https://translation.odoo-community.org/widgets/margin-analysis-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/margin-analysis-16-0/?utm_source=widget) + + + +# margin-analysis + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_invoice_margin](account_invoice_margin/) | 16.0.1.0.1 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Show margin in invoices +[account_invoice_margin_sale](account_invoice_margin_sale/) | 16.0.1.0.2 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) [![carlosdauden](https://github.com/carlosdauden.png?size=30px)](https://github.com/carlosdauden) | Set margin in invoices from sale orders +[product_margin_classification](product_margin_classification/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Product Margin Classification +[product_replenishment_cost](product_replenishment_cost/) | 16.0.1.0.0 | | Provides an overridable method on product which computethe Replenishment cost of a product +[product_standard_margin](product_standard_margin/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Product Margin and Margin Rate +[sale_margin_delivered](sale_margin_delivered/) | 16.0.1.0.1 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Sale Margin Delivered +[sale_margin_delivered_security](sale_margin_delivered_security/) | 16.0.1.0.0 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Glue module between sale margin delivered and sale margin security modules +[sale_margin_security](sale_margin_security/) | 16.0.2.0.0 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Sale Margin Security +[sale_margin_sync](sale_margin_sync/) | 16.0.1.0.1 | | Recompute sale margin when stock move cost price is changed +[sale_report_margin](sale_report_margin/) | 16.0.1.0.0 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Sale Report Margin + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/fleet&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/fleet/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/fleet/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/fleet/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/fleet/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/fleet/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/fleet) +[![Translation Status](https://translation.odoo-community.org/widgets/fleet-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/fleet-16-0/?utm_source=widget) + + + +# fleet + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[fleet_vehicle_calendar_year](fleet_vehicle_calendar_year/) | 16.0.1.0.0 | [![marcelsavegnago](https://github.com/marcelsavegnago.png?size=30px)](https://github.com/marcelsavegnago) | This module extends the fleet management functionality. Allows the registration of the vehicle's calendar year. +[fleet_vehicle_configuration](fleet_vehicle_configuration/) | 16.0.1.0.0 | | add vehicle configuration capacity +[fleet_vehicle_fuel_capacity](fleet_vehicle_fuel_capacity/) | 16.0.1.0.0 | [![marcelsavegnago](https://github.com/marcelsavegnago.png?size=30px)](https://github.com/marcelsavegnago) | This module extends the functionality of fleet management. It allows the registration of a vehicle's fuel capacity. +[fleet_vehicle_fuel_type_ethanol](fleet_vehicle_fuel_type_ethanol/) | 16.0.1.0.0 | [![marcelsavegnago](https://github.com/marcelsavegnago.png?size=30px)](https://github.com/marcelsavegnago) | This module extends the fleet management functionality. This adds ethanol as another type of fuel to be used by a vehicle in the fleet. +[fleet_vehicle_service_kanban](fleet_vehicle_service_kanban/) | 16.0.1.0.0 | [![mamcode](https://github.com/mamcode.png?size=30px)](https://github.com/mamcode) [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Add features of kanban to logs of vehicle services. +[fleet_vehicle_service_services](fleet_vehicle_service_services/) | 16.0.1.0.0 | | Add subservices in Services. +[fleet_vehicle_stock](fleet_vehicle_stock/) | 16.0.1.0.0 | [![marcelsavegnago](https://github.com/marcelsavegnago.png?size=30px)](https://github.com/marcelsavegnago) | This module is an add-on for the Fleet application in Odoo. It allows you to track your Fleet Vehicles in stock moves. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/infrastructure&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/infrastructure/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/infrastructure/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/infrastructure/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/infrastructure/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/infrastructure/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/infrastructure) +[![Translation Status](https://translation.odoo-community.org/widgets/infrastructure-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/infrastructure-16-0/?utm_source=widget) + + + +# infrastructure + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/geospatial&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/geospatial/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/geospatial/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/geospatial/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/geospatial/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/geospatial/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/geospatial) +[![Translation Status](https://translation.odoo-community.org/widgets/geospatial-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/geospatial-16-0/?utm_source=widget) + + + +# geospatial + +This project will enable real life GIS support on Odoo. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_geoengine](base_geoengine/) | 16.0.1.0.0 | | Geospatial support for Odoo +[base_geoengine_demo](base_geoengine_demo/) | 16.0.1.0.0 | | Geo spatial support Demo +[base_geolocalize_company](base_geolocalize_company/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add latitude and longitude fields on company model +[geoengine_base_geolocalize](geoengine_base_geolocalize/) | 16.0.1.0.1 | | Geospatial support for base_geolocalize +[geoengine_partner](geoengine_partner/) | 16.0.1.0.1 | | Geospatial support of partners +[web_view_leaflet_map](web_view_leaflet_map/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Integrate leaflet.js librairy with odoo and add new 'leaflet_map' view, to display markers. +[web_view_leaflet_map_partner](web_view_leaflet_map_partner/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | TODO + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/timesheet&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/timesheet/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/timesheet/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/timesheet/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/timesheet/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/timesheet/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/timesheet) +[![Translation Status](https://translation.odoo-community.org/widgets/timesheet-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/timesheet-16-0/?utm_source=widget) + + + +# timesheet + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[crm_timesheet](crm_timesheet/) | 16.0.1.0.0 | | CRM Timesheet +[hr_timesheet_begin_end](hr_timesheet_begin_end/) | 16.0.1.0.0 | | Timesheet - Begin/End Hours +[hr_timesheet_employee_analytic_tag](hr_timesheet_employee_analytic_tag/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Hr Timesheet Employee Analytic Tag +[hr_timesheet_name_customer](hr_timesheet_name_customer/) | 16.0.1.0.0 | [![solo4games](https://github.com/solo4games.png?size=30px)](https://github.com/solo4games) [![CetmixGitDrone](https://github.com/CetmixGitDrone.png?size=30px)](https://github.com/CetmixGitDrone) | Add ‘Description Customer’ field for timesheets +[hr_timesheet_sheet](hr_timesheet_sheet/) | 16.0.1.1.0 | | Timesheet Sheets, Activities +[hr_timesheet_sheet_policy_project_manager](hr_timesheet_sheet_policy_project_manager/) | 16.0.1.0.0 | | Allows setting Project Manager as Reviewer +[hr_timesheet_task_domain](hr_timesheet_task_domain/) | 16.0.1.0.0 | | Limit task selection to tasks on currently-selected project +[hr_timesheet_task_required](hr_timesheet_task_required/) | 16.0.1.0.0 | | Set task on timesheet as a mandatory field +[hr_timesheet_task_stage](hr_timesheet_task_stage/) | 16.0.1.0.1 | | Open/Close task from corresponding Task Log entry +[hr_timesheet_time_type](hr_timesheet_time_type/) | 16.0.1.0.0 | | Ability to add time type in timesheet lines. +[project_task_stage_allow_timesheet](project_task_stage_allow_timesheet/) | 16.0.1.0.0 | | Allows to tell that a task stage is opened for timesheets. +[sale_timesheet_line_exclude](sale_timesheet_line_exclude/) | 16.0.1.0.0 | | Exclude Timesheet Line from Sale Order +[sale_timesheet_task_exclude](sale_timesheet_task_exclude/) | 16.0.1.0.0 | | Exclude Task and related Timesheets from Sale Order + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/hr&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/hr/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/hr/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/hr/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/hr/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/hr/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/hr) +[![Translation Status](https://translation.odoo-community.org/widgets/hr-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/hr-16-0/?utm_source=widget) + + + +# hr + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[hr_course](hr_course/) | 16.0.1.1.1 | | This module allows your to manage employee's training courses +[hr_employee_age](hr_employee_age/) | 16.0.1.0.1 | | Age field for employee +[hr_employee_birth_name](hr_employee_birth_name/) | 16.0.1.0.0 | | Employee Birth Name +[hr_employee_birthday_mail](hr_employee_birthday_mail/) | 16.0.1.0.0 | | Automating birthday mail messages and fostering for a positive work environment. +[hr_employee_calendar_planning](hr_employee_calendar_planning/) | 16.0.1.1.6 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Employee Calendar Planning +[hr_employee_digitized_signature](hr_employee_digitized_signature/) | 16.0.1.0.0 | [![newtratip](https://github.com/newtratip.png?size=30px)](https://github.com/newtratip) | Employee Digitized Signature +[hr_employee_document](hr_employee_document/) | 16.0.1.0.0 | | Documents attached to the employee profile +[hr_employee_firstname](hr_employee_firstname/) | 16.0.1.0.2 | [![Savoir-faire Linux](https://github.com/Savoir-faire Linux.png?size=30px)](https://github.com/Savoir-faire Linux) [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) | Adds First Name to Employee +[hr_employee_lastnames](hr_employee_lastnames/) | 16.0.1.0.2 | [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) | Split Name in First Name, Father's Last Name and Mother's Last Name +[hr_employee_medical_examination](hr_employee_medical_examination/) | 16.0.1.0.0 | | Adds information about employee's medical examinations +[hr_employee_partner_external](hr_employee_partner_external/) | 16.0.1.0.0 | | Associate an external Partner to Employee +[hr_employee_phone_extension](hr_employee_phone_extension/) | 16.0.1.0.0 | | Employee Phone Extension +[hr_employee_relative](hr_employee_relative/) | 16.0.1.0.0 | | Allows storing information about employee's family +[hr_employee_ssn](hr_employee_ssn/) | 16.0.1.0.0 | | View/edit employee's SSN & SIN fields +[hr_holidays_settings](hr_holidays_settings/) | 16.0.1.0.0 | | Enables Settings Form for HR Holidays. +[hr_personal_equipment_request](hr_personal_equipment_request/) | 16.0.1.0.0 | | This addon allows to manage employee personal equipment + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/hr-attendance&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/hr-attendance/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/hr-attendance/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/hr-attendance/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/hr-attendance/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/hr-attendance/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/hr-attendance) +[![Translation Status](https://translation.odoo-community.org/widgets/hr-attendance-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/hr-attendance-16-0/?utm_source=widget) + + + +# hr-attendance + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[hr_attendance_autoclose](hr_attendance_autoclose/) | 16.0.1.0.0 | | Close stale Attendances +[hr_attendance_calendar_view](hr_attendance_calendar_view/) | 16.0.1.0.0 | | This module adds the calendar view as an option to display attendance +[hr_attendance_geolocation](hr_attendance_geolocation/) | 16.0.1.0.1 | | With this module the geolocation of the user is tracked at the check-in/check-out step +[hr_attendance_reason](hr_attendance_reason/) | 16.0.1.0.1 | | HR Attendance Reason +[hr_attendance_report_theoretical_time](hr_attendance_report_theoretical_time/) | 16.0.1.1.0 | | Theoretical vs Attended Time Analysis +[hr_attendance_rfid](hr_attendance_rfid/) | 16.0.1.0.0 | | HR Attendance RFID + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/hr-expense&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/hr-expense/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/hr-expense/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/hr-expense/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/hr-expense/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/hr-expense/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/hr-expense) +[![Translation Status](https://translation.odoo-community.org/widgets/hr-expense-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/hr-expense-16-0/?utm_source=widget) + + + +# hr-expense + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[hr_expense_advance_clearing](hr_expense_advance_clearing/) | 16.0.1.0.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Employee Advance and Clearing +[hr_expense_cancel](hr_expense_cancel/) | 16.0.1.0.2 | | Hr expense cancel +[hr_expense_invoice](hr_expense_invoice/) | 16.0.1.0.0 | | Supplier invoices on HR expenses +[hr_expense_payment](hr_expense_payment/) | 16.0.1.0.1 | | HR Expense Payment +[hr_expense_sequence](hr_expense_sequence/) | 16.0.1.0.0 | | HR expense sequence +[hr_expense_tier_validation](hr_expense_tier_validation/) | 16.0.1.0.0 | [![ps-tubtim](https://github.com/ps-tubtim.png?size=30px)](https://github.com/ps-tubtim) | Expense Tier Validation + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/hr-holidays/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/hr-holidays/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/hr-holidays/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/hr-holidays/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/hr-holidays/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/hr-holidays) +[![Translation Status](https://translation.odoo-community.org/widgets/hr-holidays-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/hr-holidays-16-0/?utm_source=widget) + + + +# hr-holidays + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[hr_holidays_leave_auto_approve](hr_holidays_leave_auto_approve/) | 16.0.1.0.0 | | Leave type for auto-validation of Leaves +[hr_holidays_natural_period](hr_holidays_natural_period/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Apply natural days in holidays +[hr_holidays_public](hr_holidays_public/) | 16.0.1.1.3 | | Manage Public Holidays +[hr_holidays_public_city](hr_holidays_public_city/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | HR Holidays Public City +[hr_leave_type_code](hr_leave_type_code/) | 16.0.1.0.0 | | Add a code field to HR Leaves + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/department&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/department/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/department/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/department/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/department/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/department/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/department) +[![Translation Status](https://translation.odoo-community.org/widgets/department-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/department-16-0/?utm_source=widget) + + + +# department + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-odoo2odoo&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-odoo2odoo/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-odoo2odoo/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-odoo2odoo/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-odoo2odoo/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-odoo2odoo/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-odoo2odoo) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-odoo2odoo-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-odoo2odoo-16-0/?utm_source=widget) + + + +# connector-odoo2odoo + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/multi-company&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/multi-company/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/multi-company/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/multi-company/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/multi-company/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/multi-company/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/multi-company) +[![Translation Status](https://translation.odoo-community.org/widgets/multi-company-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/multi-company-16-0/?utm_source=widget) + + + +# Tools for managing instances containing multiple companies + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_invoice_inter_company](account_invoice_inter_company/) | 16.0.1.0.2 | | Intercompany invoice rules +[account_multicompany_easy_creation](account_multicompany_easy_creation/) | 16.0.1.0.0 | | This module adds a wizard to create companies easily +[account_reconcile_model_multicompany_propagate](account_reconcile_model_multicompany_propagate/) | 16.0.1.0.1 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Propagate account reconcile model in companies with same chart template +[base_multi_company](base_multi_company/) | 16.0.1.0.2 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Provides a base for adding multi-company support to models. +[company_dependent_flag](company_dependent_flag/) | 16.0.1.0.1 | | Apply css style to company dependent fields +[mail_multicompany](mail_multicompany/) | 16.0.1.0.1 | [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) | Email Gateway Multi company +[mail_template_multi_company](mail_template_multi_company/) | 16.0.1.0.0 | [![Olivier-LAURENT](https://github.com/Olivier-LAURENT.png?size=30px)](https://github.com/Olivier-LAURENT) | Mail Template Multi Company +[partner_multi_company](partner_multi_company/) | 16.0.1.0.1 | | Select individually the partner visibility on each company +[product_account_multicompany_default](product_account_multicompany_default/) | 16.0.0.1.0 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Set a default account for all companies of a product +[product_category_company](product_category_company/) | 16.0.1.0.1 | | Product categories as company dependent +[product_category_company_favorite](product_category_company_favorite/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Possilibity to set favorite product categories per company +[product_tax_multicompany_default](product_tax_multicompany_default/) | 16.0.1.0.2 | [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) | Product Tax Multi Company Default +[purchase_sale_inter_company](purchase_sale_inter_company/) | 16.0.1.1.1 | | Intercompany PO/SO rules +[purchase_sale_stock_inter_company](purchase_sale_stock_inter_company/) | 16.0.1.0.0 | | Intercompany PO/SO rules with warehouse +[res_company_active](res_company_active/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add the 'active' feature on company model +[res_company_category](res_company_category/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Company Categories +[res_company_code](res_company_code/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add 'code' field on company model +[res_company_search_view](res_company_search_view/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add a search view for company model +[stock_intercompany](stock_intercompany/) | 16.0.1.0.0 | | Stock Intercompany Delivery-Reception + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-argentina&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-argentina/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-argentina/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-argentina/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-argentina/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-argentina/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-argentina) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-argentina-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-argentina-16-0/?utm_source=widget) + + + +# Odoo addons for Argentina + +Odoo addons for Argentina + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_ar_afipws](l10n_ar_afipws/) | 16.0.1.0.0 | [![nimarosa](https://github.com/nimarosa.png?size=30px)](https://github.com/nimarosa) [![ibuioli](https://github.com/ibuioli.png?size=30px)](https://github.com/ibuioli) | Integration for Argentina Electronic invoice webservices +[l10n_ar_afipws_fe](l10n_ar_afipws_fe/) | 16.0.1.0.0 | [![nimarosa](https://github.com/nimarosa.png?size=30px)](https://github.com/nimarosa) [![ibuioli](https://github.com/ibuioli.png?size=30px)](https://github.com/ibuioli) | Integrate AFIP webservice for Argentina electronic documents +[l10n_ar_bank](l10n_ar_bank/) | 16.0.1.0.0 | | Listado de Bancos Argentinos + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-austria&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-austria/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-austria/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-austria/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-austria/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-austria/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-austria) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-austria-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-austria-16-0/?utm_source=widget) + + + +# l10n-austria + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-belarus&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-belarus/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-belarus/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-belarus/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-belarus/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-belarus/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-belarus) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-belarus-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-belarus-16-0/?utm_source=widget) + + + +# l10n-belarus + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-belgium&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-belgium/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-belgium/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-belgium/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-belgium/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-belgium/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-belgium) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-belgium-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-belgium-16-0/?utm_source=widget) + + + +# l10n-belgium + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_statement_import_coda](account_statement_import_coda/) | 16.0.1.0.0 | | Import CODA Bank Statement +[companyweb_base](companyweb_base/) | 16.0.1.0.7 | [![xavier-bouquiaux](https://github.com/xavier-bouquiaux.png?size=30px)](https://github.com/xavier-bouquiaux) | Know who you are dealing with. Enhance Odoo partner data from companyweb.be. +[companyweb_payment_info](companyweb_payment_info/) | 16.0.1.0.4 | [![xavier-bouquiaux](https://github.com/xavier-bouquiaux.png?size=30px)](https://github.com/xavier-bouquiaux) | Send your customer payment information to Companyweb +[l10n_be_bpost_address_autocomplete](l10n_be_bpost_address_autocomplete/) | 16.0.1.0.0 | | Bpost address autocomplete +[l10n_be_mis_reports](l10n_be_mis_reports/) | 16.0.1.0.1 | | MIS Builder templates for the Belgium P&L, Balance Sheets and VAT Declaration +[l10n_be_mis_reports_xml](l10n_be_mis_reports_xml/) | 16.0.1.0.0 | | Exports MIS Builder templates VAT Declaration as XML to load on the administration websites. +[l10n_be_partner_identification](l10n_be_partner_identification/) | 16.0.1.0.0 | | Belgium Partner Identification Numbers +[l10n_be_partner_kbo_bce](l10n_be_partner_kbo_bce/) | 16.0.1.0.1 | | Belgium - KBO/BCE numbers + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-cambodia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-cambodia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-cambodia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-cambodia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-cambodia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-cambodia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-cambodia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-cambodia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-cambodia-16-0/?utm_source=widget) + + + +# l10n-cambodia + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-canada&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-canada/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-canada/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-canada/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-canada/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-canada/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-canada) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-canada-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-canada-16-0/?utm_source=widget) + + + +# l10n-canada + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-chile&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-chile/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-chile/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-chile/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-chile/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-chile/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-chile) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-chile-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-chile-16-0/?utm_source=widget) + + + +# l10n-chile + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-china&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-china/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-china/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-china/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-china/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-china/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-china) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-china-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-china-16-0/?utm_source=widget) + + + +# l10n-china + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-colombia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-colombia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-colombia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-colombia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-colombia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-colombia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-colombia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-colombia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-colombia-16-0/?utm_source=widget) + + + +# l10n-colombia + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-costa-rica&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-costa-rica/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-costa-rica/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-costa-rica/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-costa-rica/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-costa-rica/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-costa-rica) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-costa-rica-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-costa-rica-16-0/?utm_source=widget) + + + +# l10n-costa-rica + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-croatia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-croatia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-croatia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-croatia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-croatia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-croatia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-croatia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-croatia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-croatia-16-0/?utm_source=widget) + + + +# l10n-croatia + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[currency_rate_update_hr_hnb](currency_rate_update_hr_hnb/) | 16.0.1.0.0 | | Update exchange rates using Croatia HNB +[l10n_hr_bank](l10n_hr_bank/) | 16.0.1.0.1 | | Croatia Banking localization +[l10n_hr_base](l10n_hr_base/) | 16.0.1.0.1 | | Croatia base localization data +[l10n_hr_city](l10n_hr_city/) | 16.0.1.0.1 | | Adds location data for Croatia - Cities, post offices etc. +[l10n_hr_nkd](l10n_hr_nkd/) | 16.0.1.0.1 | | Hrvatska - Nacionalna Klasifikacija Djelatnosti + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-ecuador&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-ecuador/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-ecuador/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-ecuador/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-ecuador/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-ecuador/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-ecuador) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-ecuador-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-ecuador-16-0/?utm_source=widget) + + + +# l10n-ecuador + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-estonia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-estonia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-estonia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-estonia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-estonia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-estonia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-estonia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-estonia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-estonia-16-0/?utm_source=widget) + + + +# l10n-estonia + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-ethiopia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-ethiopia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-ethiopia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-ethiopia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-ethiopia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-ethiopia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-ethiopia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-ethiopia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-ethiopia-16-0/?utm_source=widget) + + + +# l10n-ethiopia + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-finland&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-finland/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-finland/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-finland/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-finland/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-finland/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-finland) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-finland-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-finland-16-0/?utm_source=widget) + + + +# l10n-finland + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-france&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-france/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-france/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-france/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-france/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-france/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-france) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-france-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-france-16-0/?utm_source=widget) + + + +# French Localization + +French Localization Modules + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_balance_ebp_csv_export](account_balance_ebp_csv_export/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Account Balance EBP CSV export +[account_banking_fr_lcr](account_banking_fr_lcr/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Create French LCR CFONB files +[account_statement_import_fr_cfonb](account_statement_import_fr_cfonb/) | 16.0.1.1.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Import CFONB bank statements files in Odoo +[l10n_fr_account_invoice_facturx](l10n_fr_account_invoice_facturx/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | France-specific module to generate Factur-X invoices +[l10n_fr_account_tax_unece](l10n_fr_account_tax_unece/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Auto-configure UNECE params on French taxes +[l10n_fr_account_vat_return](l10n_fr_account_vat_return/) | 16.0.2.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | VAT return for France: CA3, 3310-A, 3519 +[l10n_fr_account_vat_return_teledec](l10n_fr_account_vat_return_teledec/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Teletransmit CA3 via Teledec.fr (subscription required) +[l10n_fr_chorus_account](l10n_fr_chorus_account/) | 16.0.1.1.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Generate Chorus-compliant e-invoices and transmit them via the Chorus API +[l10n_fr_chorus_facturx](l10n_fr_chorus_facturx/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Generate Chorus-compliant Factur-X invoices +[l10n_fr_chorus_sale](l10n_fr_chorus_sale/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add checks on sale orders for Chorus Pro +[l10n_fr_cog](l10n_fr_cog/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add Code Officiel Géographique (COG) on countries +[l10n_fr_das2](l10n_fr_das2/) | 16.0.1.4.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | DAS2 (France) +[l10n_fr_department](l10n_fr_department/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Populate Database with French Departments (Départements) +[l10n_fr_department_oversea](l10n_fr_department_oversea/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Populate Database with overseas French Departments (Départements d'outre-mer) +[l10n_fr_fec_oca](l10n_fr_fec_oca/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Fichier d'Échange Informatisé (FEC) for France +[l10n_fr_hr_check_ssnid](l10n_fr_hr_check_ssnid/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Check validity of Social Security Numbers in French companies +[l10n_fr_intrastat_product](l10n_fr_intrastat_product/) | 16.0.1.3.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | EMEBI (ex-DEB) for France +[l10n_fr_intrastat_service](l10n_fr_intrastat_service/) | 16.0.1.5.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Module for Intrastat service reporting (DES) for France +[l10n_fr_mis_reports](l10n_fr_mis_reports/) | 16.0.1.0.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | MIS Report templates for the French P&L and Balance Sheets +[l10n_fr_oca](l10n_fr_oca/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Fork of l10n_fr: fewer taxes, ready for OCA VAT return for France +[l10n_fr_pos_caisse_ap_ip](l10n_fr_pos_caisse_ap_ip/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add support for Caisse-AP payment protocol used in France +[l10n_fr_pos_cert_update_draft_order_line](l10n_fr_pos_cert_update_draft_order_line/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | fixes the French certification module implemented by Odoo, authorizing the modification of draft sales lines. +[l10n_fr_siret](l10n_fr_siret/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | French company identity numbers SIRET/SIREN/NIC +[l10n_fr_siret_lookup](l10n_fr_siret_lookup/) | 16.0.1.0.0 | [![remi-filament](https://github.com/remi-filament.png?size=30px)](https://github.com/remi-filament) [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Lookup partner via an API on the SIRENE directory +[l10n_fr_state](l10n_fr_state/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Populate Database with French States (Régions) + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-germany&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-germany/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-germany/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-germany/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-germany/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-germany/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-germany) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-germany-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-germany-16-0/?utm_source=widget) + + + +# l10n-germany + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[datev_import_csv_dtvf](datev_import_csv_dtvf/) | 16.0.1.0.1 | | Import account moves generated by external software + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-greece&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-greece/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-greece/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-greece/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-greece/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-greece/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-greece) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-greece-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-greece-16-0/?utm_source=widget) + + + +# l10n-greece + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-india&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-india/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-india/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-india/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-india/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-india/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-india) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-india-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-india-16-0/?utm_source=widget) + + + +# l10n-india + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-indonesia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-indonesia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-indonesia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-indonesia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-indonesia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-indonesia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-indonesia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-indonesia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-indonesia-16-0/?utm_source=widget) + + + +# l10n-indonesia + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-iran&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-iran/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-iran/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-iran/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-iran/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-iran/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-iran) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-iran-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-iran-16-0/?utm_source=widget) + + + +# l10n-iran + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_ir_accounting](l10n_ir_accounting/) | 16.0.1.0.1 | | iran accounting chart and localization. +[l10n_ir_hr_contract](l10n_ir_hr_contract/) | 16.0.1.0.0 | | Iran Hr Contract +[l10n_ir_states](l10n_ir_states/) | 16.0.1.0.0 | | Add Iran States and Cities + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-ireland&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-ireland/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-ireland/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-ireland/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-ireland/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-ireland/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-ireland) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-ireland-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-ireland-16-0/?utm_source=widget) + + + +# l10n-ireland + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-italy&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-italy/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-italy/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-italy/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-italy/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-italy/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-italy) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-italy-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-italy-16-0/?utm_source=widget) + + + +# Odoo Italia Modules + +Addons concerning Odoo Italian Localization. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_vat_period_end_statement](account_vat_period_end_statement/) | 16.0.1.2.1 | | Allow to create the 'VAT Statement'. +[currency_rate_update_boi](currency_rate_update_boi/) | 16.0.1.0.1 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) | Update exchange rates using www.bancaditalia.it +[l10n_it_abicab](l10n_it_abicab/) | 16.0.1.0.1 | [![Borruso](https://github.com/Borruso.png?size=30px)](https://github.com/Borruso) | Base Bank ABI/CAB codes +[l10n_it_account](l10n_it_account/) | 16.0.1.0.3 | | Modulo base usato come dipendenza di altri moduli contabili +[l10n_it_account_stamp](l10n_it_account_stamp/) | 16.0.1.0.4 | | Gestione automatica dell'imposta di bollo +[l10n_it_account_tax_kind](l10n_it_account_tax_kind/) | 16.0.1.0.1 | | Gestione natura delle aliquote IVA +[l10n_it_appointment_code](l10n_it_appointment_code/) | 16.0.1.0.0 | | Aggiunge la tabella dei codici carica da usare nelle dichiarazioni fiscali italiane +[l10n_it_ateco](l10n_it_ateco/) | 16.0.1.1.1 | | ITA - Codici Ateco +[l10n_it_bill_of_entry](l10n_it_bill_of_entry/) | 16.0.1.0.0 | | ITA - Bolle doganali +[l10n_it_central_journal_reportlab](l10n_it_central_journal_reportlab/) | 16.0.1.0.3 | [![MarcoCalcagni](https://github.com/MarcoCalcagni.png?size=30px)](https://github.com/MarcoCalcagni) [![Borruso](https://github.com/Borruso.png?size=30px)](https://github.com/Borruso) | ITA - Libro giornale - Reportlab +[l10n_it_declaration_of_intent](l10n_it_declaration_of_intent/) | 16.0.1.0.6 | | Gestione dichiarazioni di intento +[l10n_it_delivery_note](l10n_it_delivery_note/) | 16.0.1.3.0 | [![MarcoCalcagni](https://github.com/MarcoCalcagni.png?size=30px)](https://github.com/MarcoCalcagni) [![aleuffre](https://github.com/aleuffre.png?size=30px)](https://github.com/aleuffre) [![renda-dev](https://github.com/renda-dev.png?size=30px)](https://github.com/renda-dev) | Crea, gestisce e fattura i DDT partendo dalle consegne +[l10n_it_delivery_note_base](l10n_it_delivery_note_base/) | 16.0.1.0.2 | [![MarcoCalcagni](https://github.com/MarcoCalcagni.png?size=30px)](https://github.com/MarcoCalcagni) [![Borruso](https://github.com/Borruso.png?size=30px)](https://github.com/Borruso) | Crea e gestisce tabelle principali per gestire i DDT +[l10n_it_delivery_note_batch](l10n_it_delivery_note_batch/) | 16.0.1.0.1 | [![MarcoCalcagni](https://github.com/MarcoCalcagni.png?size=30px)](https://github.com/MarcoCalcagni) [![TheMule71](https://github.com/TheMule71.png?size=30px)](https://github.com/TheMule71) [![Borruso](https://github.com/Borruso.png?size=30px)](https://github.com/Borruso) | Crea i DDT partendo da gruppi di prelievi +[l10n_it_delivery_note_order_link](l10n_it_delivery_note_order_link/) | 16.0.1.0.0 | [![andreampiovesana](https://github.com/andreampiovesana.png?size=30px)](https://github.com/andreampiovesana) | Crea collegamento tra i DDT e ordine di vendita/acquisto +[l10n_it_fatturapa](l10n_it_fatturapa/) | 16.0.1.0.3 | | Fatture elettroniche +[l10n_it_fatturapa_export_zip](l10n_it_fatturapa_export_zip/) | 16.0.1.0.0 | [![sergiocorato](https://github.com/sergiocorato.png?size=30px)](https://github.com/sergiocorato) | Permette di esportare in uno ZIP diversi file XML di fatture elettroniche +[l10n_it_fatturapa_import_zip](l10n_it_fatturapa_import_zip/) | 16.0.1.0.1 | | Permette di importare in uno ZIP diversi file XML di fatture elettroniche +[l10n_it_fatturapa_in](l10n_it_fatturapa_in/) | 16.0.1.0.6 | | Ricezione fatture elettroniche +[l10n_it_fatturapa_in_purchase](l10n_it_fatturapa_in_purchase/) | 16.0.1.0.0 | | Modulo ponte tra ricezione fatture elettroniche e acquisti +[l10n_it_fatturapa_in_rc](l10n_it_fatturapa_in_rc/) | 16.0.1.0.0 | [![sergiocorato](https://github.com/sergiocorato.png?size=30px)](https://github.com/sergiocorato) | Modulo ponte tra e-fattura in acquisto e inversione contabile +[l10n_it_fatturapa_out](l10n_it_fatturapa_out/) | 16.0.1.0.17 | | Emissione fatture elettroniche +[l10n_it_fatturapa_out_di](l10n_it_fatturapa_out_di/) | 16.0.1.0.0 | | Dichiarazioni d'intento in fatturapa +[l10n_it_fatturapa_out_oss](l10n_it_fatturapa_out_oss/) | 16.0.1.0.1 | | OSS in fatturapa +[l10n_it_fatturapa_out_rc](l10n_it_fatturapa_out_rc/) | 16.0.1.0.0 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) | Integrazione l10n_it_fatturapa_out e l10n_it_reverse_charge +[l10n_it_fatturapa_out_sp](l10n_it_fatturapa_out_sp/) | 16.0.1.0.0 | | Scissione pagamenti in fatturapa +[l10n_it_fatturapa_out_stamp](l10n_it_fatturapa_out_stamp/) | 16.0.1.0.0 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) | Modulo ponte tra emissione fatture elettroniche e imposta di bollo +[l10n_it_fatturapa_out_wt](l10n_it_fatturapa_out_wt/) | 16.0.1.0.0 | | Modulo ponte tra emissione fatture elettroniche e ritenute. +[l10n_it_fatturapa_pec](l10n_it_fatturapa_pec/) | 16.0.1.0.1 | | Invio fatture elettroniche tramite PEC +[l10n_it_fatturapa_sale](l10n_it_fatturapa_sale/) | 16.0.1.0.1 | | Aggiunge alcuni dati per la fatturazione elettronica nell'ordine di vendita +[l10n_it_financial_statements_report](l10n_it_financial_statements_report/) | 16.0.1.0.0 | | Rendicontazione .pdf e .xls per stato patrimoniale e conto economico a sezioni contrapposte +[l10n_it_fiscal_document_type](l10n_it_fiscal_document_type/) | 16.0.1.0.0 | | ITA - Tipi di documento fiscale per dichiarativi +[l10n_it_fiscal_payment_term](l10n_it_fiscal_payment_term/) | 16.0.1.0.0 | | Condizioni di pagamento delle fatture elettroniche +[l10n_it_fiscalcode](l10n_it_fiscalcode/) | 16.0.1.0.1 | | ITA - Codice fiscale +[l10n_it_fiscalcode_sale](l10n_it_fiscalcode_sale/) | 16.0.1.0.0 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) | Mostra il codice fiscale del cliente nella stampa del preventivo +[l10n_it_intrastat](l10n_it_intrastat/) | 16.0.1.0.2 | | Riclassificazione merci e servizi per dichiarazioni Intrastat +[l10n_it_intrastat_statement](l10n_it_intrastat_statement/) | 16.0.1.0.0 | | Dichiarazione Intrastat per l'Agenzia delle Dogane +[l10n_it_ipa](l10n_it_ipa/) | 16.0.1.0.1 | | ITA - Codice IPA +[l10n_it_payment_reason](l10n_it_payment_reason/) | 16.0.1.0.0 | | Aggiunge la tabella delle causali di pagamento da usare ad esempio nelle ritenute d'acconto +[l10n_it_pec](l10n_it_pec/) | 16.0.1.0.0 | | Aggiunge il campo email PEC al partner +[l10n_it_pos_fiscalcode](l10n_it_pos_fiscalcode/) | 16.0.1.0.0 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) | Gestione codice fiscale del cliente all'interno dell'interfaccia del POS +[l10n_it_rea](l10n_it_rea/) | 16.0.1.0.0 | | Gestisce i campi del Repertorio Economico Amministrativo +[l10n_it_reverse_charge](l10n_it_reverse_charge/) | 16.0.1.0.2 | | Inversione contabile +[l10n_it_riba](l10n_it_riba/) | 16.0.1.2.1 | | Ricevute bancarie +[l10n_it_sdi_channel](l10n_it_sdi_channel/) | 16.0.1.0.0 | [![sergiocorato](https://github.com/sergiocorato.png?size=30px)](https://github.com/sergiocorato) | Aggiunge il canale di invio/ricezione dei file XML attraverso lo SdI +[l10n_it_split_payment](l10n_it_split_payment/) | 16.0.1.0.0 | | Scissione pagamenti +[l10n_it_vat_payability](l10n_it_vat_payability/) | 16.0.1.0.0 | | ITA - Esigibilità IVA +[l10n_it_vat_registries](l10n_it_vat_registries/) | 16.0.1.0.1 | | ITA - Registri IVA +[l10n_it_vat_registries_split_payment](l10n_it_vat_registries_split_payment/) | 16.0.1.0.0 | | Modulo di congiunzione tra registri IVA e scissione dei pagamenti +[l10n_it_vat_statement_communication](l10n_it_vat_statement_communication/) | 16.0.1.0.0 | | Comunicazione liquidazione IVA ed esportazione file xmlconforme alle specifiche dell'Agenzia delle Entrate +[l10n_it_vat_statement_split_payment](l10n_it_vat_statement_split_payment/) | 16.0.1.0.0 | | Migliora la liquidazione dell'IVA tenendo in considerazione la scissione dei pagamenti +[l10n_it_website_portal_fatturapa](l10n_it_website_portal_fatturapa/) | 16.0.1.0.0 | | Add fatturapa fields and checks in frontend user's details +[l10n_it_website_portal_fiscalcode](l10n_it_website_portal_fiscalcode/) | 16.0.1.0.0 | | Add fiscal code to details of frontend user +[l10n_it_website_portal_ipa](l10n_it_website_portal_ipa/) | 16.0.1.0.1 | | Aggiunge l'indice PA (IPA) tra i dettagli dell'utente nel portale. +[l10n_it_withholding_tax](l10n_it_withholding_tax/) | 16.0.1.1.2 | | ITA - Ritenute d'acconto +[l10n_it_withholding_tax_payment](l10n_it_withholding_tax_payment/) | 16.0.1.0.3 | | Gestisce le ritenute sulle fatture e sui pagamenti +[l10n_it_withholding_tax_reason](l10n_it_withholding_tax_reason/) | 16.0.1.0.0 | | ITA - Causali pagamento per ritenute d'acconto + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-japan&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-japan/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-japan/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-japan/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-japan/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-japan/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-japan) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-japan-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-japan-16-0/?utm_source=widget) + + + +# l10n-japan + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_jp_account_report_registration_number](l10n_jp_account_report_registration_number/) | 16.0.1.0.0 | | Japan Account Report Registration Number +[l10n_jp_address_layout](l10n_jp_address_layout/) | 16.0.1.0.0 | | Japan Address Layout +[l10n_jp_country_state](l10n_jp_country_state/) | 16.0.1.0.0 | | Japan Country States +[l10n_jp_partner_title_qweb](l10n_jp_partner_title_qweb/) | 16.0.1.0.0 | | Japan Partner Title QWeb +[l10n_jp_partner_zip_address](l10n_jp_partner_zip_address/) | 16.0.1.0.0 | | Japan Partner Zip Address + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-luxemburg&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-luxemburg/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-luxemburg/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-luxemburg/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-luxemburg/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-luxemburg/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-luxemburg) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-luxemburg-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-luxemburg-16-0/?utm_source=widget) + + + +# l10n-luxemburg + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-macedonia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-macedonia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-macedonia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-macedonia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-macedonia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-macedonia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-macedonia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-macedonia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-macedonia-16-0/?utm_source=widget) + + + +# l10n-macedonia + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-mexico&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-mexico/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-mexico/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-mexico/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-mexico/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-mexico/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-mexico) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-mexico-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-mexico-16-0/?utm_source=widget) + + + +# Odoo modules for Mexico + +This repository contains modules specific to Mexico. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_mx_res_partner_csf](l10n_mx_res_partner_csf/) | 16.0.1.0.3 | | Scan and extract information from CSF + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-morocco&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-morocco/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-morocco/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-morocco/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-morocco/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-morocco/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-morocco) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-morocco-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-morocco-16-0/?utm_source=widget) + + + +# l10n-morocco + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-netherlands&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-netherlands/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-netherlands/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-netherlands/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-netherlands/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-netherlands/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-netherlands) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-netherlands-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-netherlands-16-0/?utm_source=widget) + + + +# l10n-netherlands + +Odoo Dutch Localization + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_nl_bank](l10n_nl_bank/) | 16.0.1.0.0 | | Import all Dutch banks with BIC code +[l10n_nl_bsn](l10n_nl_bsn/) | 16.0.1.0.0 | [![astirpe](https://github.com/astirpe.png?size=30px)](https://github.com/astirpe) | Burgerservicenummer (BSN) for Partners +[l10n_nl_oin](l10n_nl_oin/) | 16.0.1.0.0 | [![astirpe](https://github.com/astirpe.png?size=30px)](https://github.com/astirpe) | Adds Dutch OIN field +[l10n_nl_postcode](l10n_nl_postcode/) | 16.0.1.0.0 | [![astirpe](https://github.com/astirpe.png?size=30px)](https://github.com/astirpe) | Dutch postcode validation for Partners +[l10n_nl_tax_statement](l10n_nl_tax_statement/) | 16.0.1.0.1 | | Netherlands BTW Statement +[l10n_nl_tax_statement_date_range](l10n_nl_tax_statement_date_range/) | 16.0.1.0.0 | | Netherlands BTW Statement - Date range +[l10n_nl_tax_statement_icp](l10n_nl_tax_statement_icp/) | 16.0.1.1.0 | | Netherlands ICP Statement +[l10n_nl_xaf_auditfile_export](l10n_nl_xaf_auditfile_export/) | 16.0.1.1.1 | | Export XAF auditfiles for Dutch tax authorities + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-norway&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-norway/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-norway/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-norway/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-norway/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-norway/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-norway) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-norway-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-norway-16-0/?utm_source=widget) + + + +# l10n-norway + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-peru&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-peru/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-peru/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-peru/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-peru/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-peru/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-peru) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-peru-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-peru-16-0/?utm_source=widget) + + + +# l10n-peru + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-poland&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-poland/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-poland/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-poland/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-poland/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-poland/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-poland) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-poland-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-poland-16-0/?utm_source=widget) + + + +# l10n-poland + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[currency_rate_update_nbp](currency_rate_update_nbp/) | 16.0.1.0.0 | | Allows to download currency exchange rates from National bank of Poland + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-romania&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-romania/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-romania/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-romania/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-romania/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-romania/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-romania) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-romania-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-romania-16-0/?utm_source=widget) + + + +# l10n-romania + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[currency_rate_update_RO_BNR](currency_rate_update_RO_BNR/) | 16.0.1.3.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Currency Rate Update National Bank of Romania service +[l10n_ro_account](l10n_ro_account/) | 16.0.1.3.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Romania - Account +[l10n_ro_account_anaf_sync](l10n_ro_account_anaf_sync/) | 16.0.1.10.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Account ANAF Sync +[l10n_ro_account_bank_statement_import_mt940_alpha](l10n_ro_account_bank_statement_import_mt940_alpha/) | 16.0.1.1.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | MT940 Alpha Format Bank Statements Import +[l10n_ro_account_bank_statement_import_mt940_base](l10n_ro_account_bank_statement_import_mt940_base/) | 16.0.1.2.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Romania - MT940 Bank Statements Import +[l10n_ro_account_bank_statement_import_mt940_bcr](l10n_ro_account_bank_statement_import_mt940_bcr/) | 16.0.1.2.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | MT940 BCR Format Bank Statements Import +[l10n_ro_account_bank_statement_import_mt940_brd](l10n_ro_account_bank_statement_import_mt940_brd/) | 16.0.1.2.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Romania - Import bank statements from BRD +[l10n_ro_account_bank_statement_import_mt940_ing](l10n_ro_account_bank_statement_import_mt940_ing/) | 16.0.1.3.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | MT940 ING Format Bank Statements Import +[l10n_ro_account_bank_statement_import_mt940_rffsn](l10n_ro_account_bank_statement_import_mt940_rffsn/) | 16.0.1.1.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Romania - Import bank statements from Raiffeisen +[l10n_ro_account_bank_statement_report](l10n_ro_account_bank_statement_report/) | 16.0.1.2.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Bank Statement Report +[l10n_ro_account_edi_ubl](l10n_ro_account_edi_ubl/) | 16.0.1.38.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - eFactura - Account EDI UBL +[l10n_ro_account_edit_currency_rate](l10n_ro_account_edit_currency_rate/) | 16.0.1.1.0 | [![mcojocaru](https://github.com/mcojocaru.png?size=30px)](https://github.com/mcojocaru) | Romania - Invoice Edit Currency Rate +[l10n_ro_account_period_close](l10n_ro_account_period_close/) | 16.0.3.5.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Account Period Closing +[l10n_ro_account_report_invoice](l10n_ro_account_report_invoice/) | 16.0.1.2.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Invoice Report +[l10n_ro_city](l10n_ro_city/) | 16.0.3.4.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Romania - City +[l10n_ro_config](l10n_ro_config/) | 16.0.1.7.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Localization Install and Config Applications +[l10n_ro_dvi](l10n_ro_dvi/) | 16.0.1.6.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - DVI +[l10n_ro_fiscal_validation](l10n_ro_fiscal_validation/) | 16.0.1.4.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Fiscal Validation +[l10n_ro_partner_create_by_vat](l10n_ro_partner_create_by_vat/) | 16.0.1.4.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Partner Create by VAT +[l10n_ro_partner_unique](l10n_ro_partner_unique/) | 16.0.1.1.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Creates a rule for vat and nrc unique for partners. +[l10n_ro_payment_receipt_report](l10n_ro_payment_receipt_report/) | 16.0.1.2.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Payment Receipt Report +[l10n_ro_payment_to_statement](l10n_ro_payment_to_statement/) | 16.0.2.7.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Add payment to cash statement +[l10n_ro_pos](l10n_ro_pos/) | 16.0.2.3.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Romania - Point of Sale +[l10n_ro_stock](l10n_ro_stock/) | 16.0.0.1.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Stock +[l10n_ro_stock_account](l10n_ro_stock_account/) | 16.0.1.19.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Stock Accounting +[l10n_ro_stock_account_date](l10n_ro_stock_account_date/) | 16.0.1.1.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Stock Accounting Date +[l10n_ro_stock_account_date_wizard](l10n_ro_stock_account_date_wizard/) | 16.0.1.1.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Stock Accounting Date Wizard +[l10n_ro_stock_account_notice](l10n_ro_stock_account_notice/) | 16.0.4.5.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) [![mcojocaru](https://github.com/mcojocaru.png?size=30px)](https://github.com/mcojocaru) [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Romania - Stock Accounting Notice +[l10n_ro_stock_account_reception_in_progress](l10n_ro_stock_account_reception_in_progress/) | 16.0.0.1.0 | [![nct74](https://github.com/nct74.png?size=30px)](https://github.com/nct74) [![vasi26ro](https://github.com/vasi26ro.png?size=30px)](https://github.com/vasi26ro) | Romania - Stock Accounting Reception In progress +[l10n_ro_stock_price_difference](l10n_ro_stock_price_difference/) | 16.0.5.6.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) [![mcojocaru](https://github.com/mcojocaru.png?size=30px)](https://github.com/mcojocaru) [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) | Romania - Stock Accounting Price Difference +[l10n_ro_stock_report](l10n_ro_stock_report/) | 16.0.6.13.0 | [![dhongu](https://github.com/dhongu.png?size=30px)](https://github.com/dhongu) [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - Stock Report (Fisa Magazie) +[l10n_ro_vat_on_payment](l10n_ro_vat_on_payment/) | 16.0.1.7.0 | [![feketemihai](https://github.com/feketemihai.png?size=30px)](https://github.com/feketemihai) | Romania - VAT on Payment + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-russia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-russia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-russia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-russia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-russia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-russia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-russia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-russia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-russia-16-0/?utm_source=widget) + + + +# l10n-russia + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-slovenia&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-slovenia/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-slovenia/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-slovenia/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-slovenia/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-slovenia/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-slovenia) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-slovenia-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-slovenia-16-0/?utm_source=widget) + + + +# l10n-slovenia + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-spain&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-spain/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-spain/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-spain/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-spain/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-spain/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-spain) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-spain-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-spain-16-0/?utm_source=widget) + + + +# l10n-spain + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_es_account_asset](l10n_es_account_asset/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Gestión de activos fijos para España +[l10n_es_account_banking_sepa_fsdd](l10n_es_account_banking_sepa_fsdd/) | 16.0.1.0.0 | | Account Banking Sepa - FSDD (Anticipos de crédito) +[l10n_es_account_statement_import_n43](l10n_es_account_statement_import_n43/) | 16.0.1.0.3 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Importación de extractos bancarios españoles (Norma 43) +[l10n_es_aeat](l10n_es_aeat/) | 16.0.2.3.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Modulo base para declaraciones de la AEAT +[l10n_es_aeat_mod111](l10n_es_aeat_mod111/) | 16.0.1.1.0 | | AEAT modelo 111 +[l10n_es_aeat_mod115](l10n_es_aeat_mod115/) | 16.0.1.0.1 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | AEAT modelo 115 +[l10n_es_aeat_mod123](l10n_es_aeat_mod123/) | 16.0.1.0.2 | | AEAT modelo 123 +[l10n_es_aeat_mod190](l10n_es_aeat_mod190/) | 16.0.1.2.0 | | AEAT modelo 190 +[l10n_es_aeat_mod216](l10n_es_aeat_mod216/) | 16.0.1.0.1 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | AEAT modelo 216 +[l10n_es_aeat_mod296](l10n_es_aeat_mod296/) | 16.0.1.0.1 | | AEAT modelo 296 +[l10n_es_aeat_mod303](l10n_es_aeat_mod303/) | 16.0.2.3.2 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | AEAT modelo 303 +[l10n_es_aeat_mod303_oss](l10n_es_aeat_mod303_oss/) | 16.0.1.0.1 | | AEAT modelo 303 - OSS +[l10n_es_aeat_mod303_vat_prorate](l10n_es_aeat_mod303_vat_prorate/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Prorrata de IVA [303] +[l10n_es_aeat_mod347](l10n_es_aeat_mod347/) | 16.0.1.6.0 | | AEAT modelo 347 +[l10n_es_aeat_mod349](l10n_es_aeat_mod349/) | 16.0.1.1.2 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | AEAT modelo 349 +[l10n_es_aeat_mod390](l10n_es_aeat_mod390/) | 16.0.2.4.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | AEAT modelo 390 +[l10n_es_aeat_partner_check](l10n_es_aeat_partner_check/) | 16.0.1.0.1 | | AEAT - Comprobación de Calidad de datos identificativos +[l10n_es_aeat_sii_match](l10n_es_aeat_sii_match/) | 16.0.1.0.0 | [![Abranes](https://github.com/Abranes.png?size=30px)](https://github.com/Abranes) [![Reyes4711-S73](https://github.com/Reyes4711-S73.png?size=30px)](https://github.com/Reyes4711-S73) | Sistema de comprobación y contraste de facturas enviadas al SII +[l10n_es_aeat_sii_oca](l10n_es_aeat_sii_oca/) | 16.0.1.7.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Suministro Inmediato de Información en el IVA +[l10n_es_aeat_sii_oss](l10n_es_aeat_sii_oss/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Suministro Inmediato de Información en el IVA: OSS +[l10n_es_atc](l10n_es_atc/) | 16.0.1.0.0 | | Modulo 'glue' de la AEAT para el menú de la ATC +[l10n_es_dua](l10n_es_dua/) | 16.0.1.0.0 | | Importaciones con DUA +[l10n_es_dua_sii](l10n_es_dua_sii/) | 16.0.1.1.1 | | Suministro Inmediato de Información de importaciones con DUA +[l10n_es_facturae](l10n_es_facturae/) | 16.0.1.6.2 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | Creación de Facturae +[l10n_es_facturae_face](l10n_es_facturae_face/) | 16.0.1.1.2 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | Envío de Facturae a FACe +[l10n_es_igic](l10n_es_igic/) | 16.0.1.0.0 | | IGIC (Impuesto General Indirecto Canario +[l10n_es_intrastat_report](l10n_es_intrastat_report/) | 16.0.1.3.1 | | Spanish Intrastat Product Declaration +[l10n_es_irnr](l10n_es_irnr/) | 16.0.1.0.0 | | Retenciones IRNR (No residentes) +[l10n_es_irnr_sii](l10n_es_irnr_sii/) | 16.0.1.0.0 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Suministro Inmediato de Información de importaciones con IRNR +[l10n_es_mis_report](l10n_es_mis_report/) | 16.0.1.1.0 | | Plantillas MIS Builder para informes contables españoles +[l10n_es_partner](l10n_es_partner/) | 16.0.2.1.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Adaptación de los clientes, proveedores y bancos para España +[l10n_es_partner_mercantil](l10n_es_partner_mercantil/) | 16.0.1.0.0 | | Añade los datos del registro mercantil a la empresa +[l10n_es_payment_order_confirming_aef](l10n_es_payment_order_confirming_aef/) | 16.0.1.0.2 | | Exportación de fichero bancario Confirming estándar AEF +[l10n_es_pos](l10n_es_pos/) | 16.0.1.0.2 | | Punto de venta adaptado a la legislación española +[l10n_es_pos_sii](l10n_es_pos_sii/) | 16.0.1.0.2 | | Envío de pedidos del TPV al SII +[l10n_es_sigaus_account](l10n_es_sigaus_account/) | 16.0.1.0.0 | | Sistema de gestión de aceites industriales usados en España - Facturación +[l10n_es_ticketbai](l10n_es_ticketbai/) | 16.0.1.0.8 | [![ao-landoo](https://github.com/ao-landoo.png?size=30px)](https://github.com/ao-landoo) | Declaración de todas las operaciones de venta realizadas por las personas y entidades que desarrollan actividades económicas +[l10n_es_ticketbai_api](l10n_es_ticketbai_api/) | 16.0.1.0.4 | [![ao-landoo](https://github.com/ao-landoo.png?size=30px)](https://github.com/ao-landoo) | TicketBAI - API +[l10n_es_ticketbai_api_batuz](l10n_es_ticketbai_api_batuz/) | 16.0.1.0.3 | [![ao-landoo](https://github.com/ao-landoo.png?size=30px)](https://github.com/ao-landoo) | TicketBAI (API) - Batuz - declaración de todas las operaciones de venta realizadas por las personas y entidades que desarrollan actividades económicas en Bizkaia +[l10n_es_ticketbai_batuz](l10n_es_ticketbai_batuz/) | 16.0.1.0.0 | [![enriquemartin](https://github.com/enriquemartin.png?size=30px)](https://github.com/enriquemartin) [![ao-landoo](https://github.com/ao-landoo.png?size=30px)](https://github.com/ao-landoo) | TicketBAI - Batuz - declaración de todas las operaciones de venta realizadas por las personas y entidades que desarrollan actividades económicas en Bizkaia +[l10n_es_toponyms](l10n_es_toponyms/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Topónimos españoles +[l10n_es_vat_book](l10n_es_vat_book/) | 16.0.1.4.0 | | Libro de IVA +[l10n_es_vat_book_igic](l10n_es_vat_book_igic/) | 16.0.1.0.0 | [![nicolasramos](https://github.com/nicolasramos.png?size=30px)](https://github.com/nicolasramos) | Libro de IGIC +[l10n_es_vat_prorate](l10n_es_vat_prorate/) | 16.0.1.0.1 | | Prorrata de IVA para la localización española +[payment_redsys](payment_redsys/) | 16.0.1.0.1 | | Payment Acquirer: Redsys Implementation + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-switzerland&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-switzerland/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-switzerland/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-switzerland/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-switzerland/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-switzerland/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-switzerland) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-switzerland-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-switzerland-16-0/?utm_source=widget) + + + +# l10n-switzerland + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_ch_account_tags](l10n_ch_account_tags/) | 16.0.1.0.0 | | Switzerland Account Tags +[l10n_ch_mis_reports](l10n_ch_mis_reports/) | 16.0.1.0.0 | | Specific MIS reports for switzerland localization + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-taiwan&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-taiwan/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-taiwan/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-taiwan/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-taiwan/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-taiwan/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-taiwan) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-taiwan-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-taiwan-16-0/?utm_source=widget) + + + +# l10n-taiwan + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-thailand&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-thailand/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-thailand/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-thailand/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-thailand/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-thailand/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-thailand) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-thailand-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-thailand-16-0/?utm_source=widget) + + + +# l10n-thailand + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_th_account_tax](l10n_th_account_tax/) | 16.0.1.1.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Thai Localization - VAT and Withholding Tax +[l10n_th_account_tax_report](l10n_th_account_tax_report/) | 16.0.1.1.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Thai Localization - VAT and Withholding Tax Reports +[l10n_th_account_wht_cert_form](l10n_th_account_wht_cert_form/) | 16.0.1.1.0 | [![Saran440](https://github.com/Saran440.png?size=30px)](https://github.com/Saran440) | Thai Localization - Withholding Tax Certificate Form +[l10n_th_amount_to_text](l10n_th_amount_to_text/) | 16.0.1.0.0 | [![Saran440](https://github.com/Saran440.png?size=30px)](https://github.com/Saran440) | Convert Amount Text to Thai +[l10n_th_base_location](l10n_th_base_location/) | 16.0.1.0.0 | | Thai Localization - Base Location +[l10n_th_fonts](l10n_th_fonts/) | 16.0.1.0.0 | [![Saran440](https://github.com/Saran440.png?size=30px)](https://github.com/Saran440) | Collection of all Thai fonts +[l10n_th_partner](l10n_th_partner/) | 16.0.1.0.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Thai Localization - Partner + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-turkey&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-turkey/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-turkey/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-turkey/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-turkey/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-turkey/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-turkey) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-turkey-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-turkey-16-0/?utm_source=widget) + + + +# l10n-turkey + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-united-kingdom&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-united-kingdom/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-united-kingdom/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-united-kingdom/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-united-kingdom/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-united-kingdom/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-united-kingdom) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-united-kingdom-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-united-kingdom-16-0/?utm_source=widget) + + + +# l10n-united-kingdom + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-uruguay&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-uruguay/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-uruguay/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-uruguay/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-uruguay/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-uruguay/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-uruguay) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-uruguay-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-uruguay-16-0/?utm_source=widget) + + + +# l10n-uruguay + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-usa&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-usa/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-usa/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-usa/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-usa/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-usa/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-usa) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-usa-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-usa-16-0/?utm_source=widget) + + + +# l10n-usa + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[l10n_us_form_1099](l10n_us_form_1099/) | 16.0.1.0.0 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Manage 1099 Types and Suppliers +[l10n_us_gaap](l10n_us_gaap/) | 16.0.1.0.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) | United States Sample GAAP Chart of Accounts +[l10n_us_gaap_mis_report](l10n_us_gaap_mis_report/) | 16.0.1.0.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) | MIS Builder Templates for US Chart of Accounts + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-venezuela&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-venezuela/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-venezuela/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-venezuela/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-venezuela/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-venezuela/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-venezuela) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-venezuela-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-venezuela-16-0/?utm_source=widget) + + + +# l10n-venezuela + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[res_currency_rate_provider_BCV](res_currency_rate_provider_BCV/) | 16.0.1.1.2 | [![lapinzon](https://github.com/lapinzon.png?size=30px)](https://github.com/lapinzon) | OCA version for BCV scrapping rates + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/l10n-vietnam&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/l10n-vietnam/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-vietnam/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/l10n-vietnam/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/l10n-vietnam/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/l10n-vietnam/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/l10n-vietnam) +[![Translation Status](https://translation.odoo-community.org/widgets/l10n-vietnam-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/l10n-vietnam-16-0/?utm_source=widget) + + + +# l10n-vietnam + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/delivery-carrier&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/delivery-carrier/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/delivery-carrier/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/delivery-carrier/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/delivery-carrier/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/delivery-carrier/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/delivery-carrier) +[![Translation Status](https://translation.odoo-community.org/widgets/delivery-carrier-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/delivery-carrier-16-0/?utm_source=widget) + + + +# delivery-carrier + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_delivery_carrier_label](base_delivery_carrier_label/) | 16.0.1.1.1 | | Base module for carrier labels +[carrier_account_environment](carrier_account_environment/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) | Configure carriers with server_environment_files +[delivery_auto_refresh](delivery_auto_refresh/) | 16.0.1.0.1 | | Auto-refresh delivery price in sales orders +[delivery_automatic_package](delivery_automatic_package/) | 16.0.1.0.0 | | Allows to set a delivery package automatically when sending to shipper. +[delivery_carrier_account](delivery_carrier_account/) | 16.0.1.0.1 | | Delivery Carrier Account +[delivery_carrier_agency](delivery_carrier_agency/) | 16.0.1.0.0 | | Add a model for Carrier Agencies +[delivery_carrier_deposit](delivery_carrier_deposit/) | 16.0.1.0.0 | | Create deposit slips +[delivery_carrier_info](delivery_carrier_info/) | 16.0.1.0.0 | | Add code on carrier +[delivery_carrier_max_weight_constraint](delivery_carrier_max_weight_constraint/) | 16.0.1.0.1 | | Constrain package maximum weight +[delivery_carrier_partner](delivery_carrier_partner/) | 16.0.1.0.0 | | Add a partner in the delivery carrier +[delivery_cttexpress](delivery_cttexpress/) | 16.0.1.1.0 | | Delivery Carrier implementation for CTT Express API +[delivery_deliverea](delivery_deliverea/) | 16.0.1.0.0 | | Delivery Carrier implementation for Deliverea using their API +[delivery_driver](delivery_driver/) | 16.0.1.0.0 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) | Allow choose driver in delivery methods +[delivery_driver_stock_picking_batch](delivery_driver_stock_picking_batch/) | 16.0.1.0.1 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Add drivers from delivery in stock picking batch +[delivery_estimated_package_quantity_by_weight](delivery_estimated_package_quantity_by_weight/) | 16.0.1.0.0 | | Compute the amount of packages a picking out should have depending on the weight of the products and the limit fixed by the carrier +[delivery_package_fee](delivery_package_fee/) | 16.0.1.1.1 | | Add fees on delivered packages on shipping methods +[delivery_package_number](delivery_package_number/) | 16.0.2.0.0 | | Set or compute number of packages for a picking +[delivery_package_type_number_parcels](delivery_package_type_number_parcels/) | 16.0.1.0.1 | | Number of parcels in a package type +[delivery_postlogistics](delivery_postlogistics/) | 16.0.1.0.4 | | Print PostLogistics shipping labels using the Barcode web service +[delivery_postlogistics_server_env](delivery_postlogistics_server_env/) | 16.0.1.0.0 | | Server Environment layer for Delivery Postlogistics +[delivery_price_method](delivery_price_method/) | 16.0.1.0.0 | | Provides fields to be able to contemplate the tracking statesand also adds a global fields +[delivery_roulier](delivery_roulier/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) | Integration of multiple carriers +[delivery_state](delivery_state/) | 16.0.1.1.0 | | Provides fields to be able to contemplate the tracking statesand also adds a global fields +[partner_delivery_schedule](partner_delivery_schedule/) | 16.0.1.0.0 | | Set on partners a schedule for delivery goods +[partner_delivery_zone](partner_delivery_zone/) | 16.0.1.0.1 | | This module allows to create partner delivery zones for physical products +[server_environment_delivery](server_environment_delivery/) | 16.0.1.0.0 | | Configure prod environment for delivery carriers +[stock_picking_delivery_link](stock_picking_delivery_link/) | 16.0.1.1.0 | | Adds link to the delivery on all intermediate operations. +[stock_picking_report_delivery_cost](stock_picking_report_delivery_cost/) | 16.0.1.0.0 | | Show delivery cost in delivery slip and picking operations reports + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-barcode&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/stock-logistics-barcode/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-barcode/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/stock-logistics-barcode/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-barcode/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/stock-logistics-barcode/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/stock-logistics-barcode) +[![Translation Status](https://translation.odoo-community.org/widgets/stock-logistics-barcode-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/stock-logistics-barcode-16-0/?utm_source=widget) + + + +# stock-logistics-barcode + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[barcodes_generator_abstract](barcodes_generator_abstract/) | 16.0.3.0.3 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Generate Barcodes for Any Models +[barcodes_generator_package](barcodes_generator_package/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Generate Barcodes for Product Packaging +[barcodes_generator_product](barcodes_generator_product/) | 16.0.2.0.2 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Generate Barcodes for Products (Templates and Variants) +[product_barcode_constraint_per_company](product_barcode_constraint_per_company/) | 16.0.1.0.2 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Change the product barcode constraint, allowing the same barcode for differents companies +[product_multi_barcode](product_multi_barcode/) | 16.0.1.0.1 | | Multiple barcodes on products +[product_multi_barcode_constraint_per_company](product_multi_barcode_constraint_per_company/) | 16.0.1.0.1 | | Glue module for product_multi_barcode andproduct_barcode_constraint_per_company +[product_multi_barcode_stock_menu](product_multi_barcode_stock_menu/) | 16.0.1.0.0 | | Multiple barcodes menu +[product_packaging_multi_barcode](product_packaging_multi_barcode/) | 16.0.1.1.0 | | Multiple barcodes on product packagings + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-workflow&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/stock-logistics-workflow/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-workflow/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/stock-logistics-workflow/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-workflow/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/stock-logistics-workflow/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/stock-logistics-workflow) +[![Translation Status](https://translation.odoo-community.org/widgets/stock-logistics-workflow-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/stock-logistics-workflow-16-0/?utm_source=widget) + + + +# stock-logistics-workflow + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[delivery_procurement_group_carrier](delivery_procurement_group_carrier/) | 16.0.1.0.0 | | Delivery Procurement Group Carrier +[delivery_total_weight_from_packaging](delivery_total_weight_from_packaging/) | 16.0.1.0.0 | | Include packaging weight on move, transfer and package. +[purchase_stock_picking_invoice_link](purchase_stock_picking_invoice_link/) | 16.0.1.0.0 | | Adds link between purchases, pickings and invoices +[sale_line_returned_qty](sale_line_returned_qty/) | 16.0.1.0.0 | | Track returned quantity of sale order lines. +[sale_order_global_stock_route](sale_order_global_stock_route/) | 16.0.1.0.0 | | Add the possibility to choose one warehouse path for an order +[stock_account_product_run_fifo_hook](stock_account_product_run_fifo_hook/) | 16.0.1.0.0 | | Add more flexibility in the run fifo method. +[stock_delivery_note](stock_delivery_note/) | 16.0.1.0.0 | | This module allows to fill in a delivery note that will be displayed on delivery report +[stock_grn](stock_grn/) | 16.0.1.0.1 | | Goods Received Note +[stock_landed_costs_currency](stock_landed_costs_currency/) | 16.0.1.0.0 | | Stock Landed Costs Currency +[stock_lot_production_date](stock_lot_production_date/) | 16.0.1.0.0 | | Stock Lot Production Date +[stock_lot_scrap](stock_lot_scrap/) | 16.0.1.0.0 | | This module adds a button in Production Lot/Serial Number view form to Scrap all products contained. +[stock_move_free_reservation_reassign](stock_move_free_reservation_reassign/) | 16.0.1.0.1 | | Try to reassign a move when its reservation is removed due to the related quant becoming unavailable +[stock_move_line_auto_fill](stock_move_line_auto_fill/) | 16.0.1.1.0 | | Stock Move Line auto fill +[stock_move_line_expiration_date_required](stock_move_line_expiration_date_required/) | 16.0.1.0.2 | | Stock Move Line Expiration Date Required +[stock_move_line_reserved_quant](stock_move_line_reserved_quant/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | This module allows to get the link from a stock move line to the reserved quant +[stock_move_line_serial_unique](stock_move_line_serial_unique/) | 16.0.1.0.0 | | Stock Move Line Serial Unique +[stock_move_manage_priority](stock_move_manage_priority/) | 16.0.1.0.0 | | Stock Move Priority Management +[stock_move_propagate_first_move](stock_move_propagate_first_move/) | 16.0.1.0.1 | | This addon propagate the picking type of the original move to all next moves created from procurement +[stock_no_negative](stock_no_negative/) | 16.0.1.0.2 | | Disallow negative stock levels by default +[stock_override_procurement](stock_override_procurement/) | 16.0.1.0.0 | | This technical module allow to override procurement values +[stock_owner_restriction](stock_owner_restriction/) | 16.0.1.1.0 | | Do not reserve quantity with assigned owner +[stock_partner_delivery_window](stock_partner_delivery_window/) | 16.0.1.0.1 | | Define preferred delivery time windows for partners +[stock_picking_auto_create_lot](stock_picking_auto_create_lot/) | 16.0.1.0.0 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Auto create lots for incoming pickings +[stock_picking_back2draft](stock_picking_back2draft/) | 16.0.1.0.0 | | Reopen cancelled pickings +[stock_picking_batch_extended](stock_picking_batch_extended/) | 16.0.1.1.0 | [![gurneyalex](https://github.com/gurneyalex.png?size=30px)](https://github.com/gurneyalex) [![carlosdauden](https://github.com/carlosdauden.png?size=30px)](https://github.com/carlosdauden) [![i-vyshnevska](https://github.com/i-vyshnevska.png?size=30px)](https://github.com/i-vyshnevska) | Allows manage a lot of pickings in batch +[stock_picking_batch_extended_account](stock_picking_batch_extended_account/) | 16.0.1.0.2 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | Generates invoices when batch is set to Done state +[stock_picking_batch_extended_account_sale_type](stock_picking_batch_extended_account_sale_type/) | 16.0.1.0.2 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | Generates invoices when batch is set to Done state +[stock_picking_batch_invoice_frequency](stock_picking_batch_invoice_frequency/) | 16.0.1.0.1 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) | Invoice Sale Orders from Stock Pickin Batch +[stock_picking_batch_print_invoices](stock_picking_batch_print_invoices/) | 16.0.1.0.2 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Print invoices from stock picking batchs +[stock_picking_batch_print_pickings](stock_picking_batch_print_pickings/) | 16.0.1.0.2 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Print Picking from Stock Picking Batch +[stock_picking_customer_ref](stock_picking_customer_ref/) | 16.0.1.0.0 | | This module displays the sale reference/description in the pickings +[stock_picking_filter_lot](stock_picking_filter_lot/) | 16.0.1.0.0 | | In picking out lots' selection, filter lots based on their location +[stock_picking_grn_mandatory](stock_picking_grn_mandatory/) | 16.0.1.0.0 | | This module allows to require a GRN (Goods Receive Note) when doing a Stock Picking +[stock_picking_group_by_base](stock_picking_group_by_base/) | 16.0.1.0.0 | | Allows to define a way to create index on extensible domain +[stock_picking_group_by_max_weight](stock_picking_group_by_max_weight/) | 16.0.1.0.0 | | Allows to filter available pickings for which a maximum weight is not exceeded. +[stock_picking_group_by_partner_by_carrier](stock_picking_group_by_partner_by_carrier/) | 16.0.1.1.0 | | Stock Picking: group by partner and carrier +[stock_picking_info_lot](stock_picking_info_lot/) | 16.0.1.0.0 | | Add lot information on Stock Transfer lines +[stock_picking_invoice_link](stock_picking_invoice_link/) | 16.0.1.0.2 | | Adds link between pickings and invoices +[stock_picking_kind](stock_picking_kind/) | 16.0.1.0.0 | | Computes the kind of picking based on locations +[stock_picking_line_sequence](stock_picking_line_sequence/) | 16.0.1.0.0 | | Manages the order of stock moves by displaying its sequence +[stock_picking_mass_action](stock_picking_mass_action/) | 16.0.1.0.0 | | Stock Picking Mass Action +[stock_picking_partner_note](stock_picking_partner_note/) | 16.0.1.0.0 | | Add partner notes on picking +[stock_picking_product_link](stock_picking_product_link/) | 16.0.1.0.0 | [![robinkeunen](https://github.com/robinkeunen.png?size=30px)](https://github.com/robinkeunen) | Adds a "Product" smart button on stock pickings. +[stock_picking_purchase_order_link](stock_picking_purchase_order_link/) | 16.0.1.0.1 | | Link between picking and purchase order +[stock_picking_sale_order_link](stock_picking_sale_order_link/) | 16.0.1.0.0 | | Link between picking and sale order +[stock_picking_send_by_mail](stock_picking_send_by_mail/) | 16.0.1.0.0 | | Send stock picking by email +[stock_picking_show_backorder](stock_picking_show_backorder/) | 16.0.1.0.0 | | Provides a new field on stock pickings, allowing to display the corresponding backorders. +[stock_picking_show_return](stock_picking_show_return/) | 16.0.1.0.1 | | Show returns on stock pickings +[stock_picking_start](stock_picking_start/) | 16.0.1.1.0 | | Add button to start picking +[stock_picking_supplier_ref](stock_picking_supplier_ref/) | 16.0.1.0.0 | | Adds a supplier reference field inside supplier's pickings and allows search for this reference. +[stock_picking_to_batch_group_fields](stock_picking_to_batch_group_fields/) | 16.0.1.0.1 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Allows to create batches grouped by picking fields. +[stock_picking_warn_message](stock_picking_warn_message/) | 16.0.1.0.0 | | Add a popup warning on picking to ensure warning is populated +[stock_procurement_customer](stock_procurement_customer/) | 16.0.1.0.1 | | Allows to store customer if different from the partner +[stock_putaway_hook](stock_putaway_hook/) | 16.0.1.0.1 | | Add hooks allowing modules to add more putaway strategies +[stock_quant_package_dimension](stock_quant_package_dimension/) | 16.0.1.0.1 | | Use dimensions on packages +[stock_quant_package_dimension_total_weight_from_packaging](stock_quant_package_dimension_total_weight_from_packaging/) | 16.0.1.0.0 | | Estimated weight of a package +[stock_quant_package_product_packaging](stock_quant_package_product_packaging/) | 16.0.1.0.1 | | Use product packagings on packages +[stock_receipt_lot_info](stock_receipt_lot_info/) | 16.0.1.1.0 | | Be able to introduce more info on lot/serial number while processing a receipt. +[stock_restrict_lot](stock_restrict_lot/) | 16.0.1.1.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) | Base module that add back the concept of restrict lot on stock move +[stock_split_picking](stock_split_picking/) | 16.0.1.0.4 | | Split a picking in two not transferred pickings +[stock_valuation_layer_usage](stock_valuation_layer_usage/) | 16.0.1.0.0 | | Trace where has the stock valuation been used in, including the quantities taken. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-tracking&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/stock-logistics-tracking/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-tracking/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/stock-logistics-tracking/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-tracking/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/stock-logistics-tracking/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/stock-logistics-tracking) +[![Translation Status](https://translation.odoo-community.org/widgets/stock-logistics-tracking-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/stock-logistics-tracking-16-0/?utm_source=widget) + + + +# stock-logistics-tracking + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[stock_quant_package_multi_reference](stock_quant_package_multi_reference/) | 16.0.1.0.0 | | Package multi reference + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-warehouse&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/stock-logistics-warehouse/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-warehouse/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/stock-logistics-warehouse/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-warehouse/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/stock-logistics-warehouse/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/stock-logistics-warehouse) +[![Translation Status](https://translation.odoo-community.org/widgets/stock-logistics-warehouse-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/stock-logistics-warehouse-16-0/?utm_source=widget) + + + +# stock-logistics-warehouse + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_move_line_product](account_move_line_product/) | 16.0.1.0.0 | | Displays the product in the journal entries and items +[account_move_line_stock_info](account_move_line_stock_info/) | 16.0.1.1.1 | | Account Move Line Stock Info +[procurement_auto_create_group](procurement_auto_create_group/) | 16.0.1.0.0 | | Allows to configure the system to propose automatically new procurement groups during the procurement run. +[product_packaging_usability](product_packaging_usability/) | 16.0.1.0.1 | | Add sugar to Product Packaging +[scrap_reason_code](scrap_reason_code/) | 16.0.1.1.0 | [![bodedra](https://github.com/bodedra.png?size=30px)](https://github.com/bodedra) | Reason code for scrapping +[stock_demand_estimate](stock_demand_estimate/) | 16.0.1.1.0 | | Allows to create demand estimates. +[stock_demand_estimate_matrix](stock_demand_estimate_matrix/) | 16.0.1.0.0 | | Allows to create demand estimates. +[stock_helper](stock_helper/) | 16.0.1.1.0 | | Add methods shared between various stock modules +[stock_inventory](stock_inventory/) | 16.0.1.0.0 | | Allows to do an easier follow up of the Inventory Adjustments +[stock_inventory_count_to_zero](stock_inventory_count_to_zero/) | 16.0.1.0.0 | | Request an inventory count filling the quantities to zero as default +[stock_inventory_discrepancy](stock_inventory_discrepancy/) | 16.0.1.0.0 | | Adds the capability to show the discrepancy of every line in an inventory and to block the inventory validation when the discrepancy is over a user defined threshold. +[stock_location_lockdown](stock_location_lockdown/) | 16.0.1.0.1 | | Prevent to add stock on locked locations +[stock_location_position](stock_location_position/) | 16.0.1.0.0 | | Add coordinate attributes on stock location. +[stock_location_product_restriction](stock_location_product_restriction/) | 16.0.1.0.0 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Prevent to mix different products into the same stock location +[stock_location_zone](stock_location_zone/) | 16.0.1.0.1 | | Classify locations with zones. +[stock_move_auto_assign](stock_move_auto_assign/) | 16.0.1.1.1 | | Try to reserve moves when goods enter in a location +[stock_move_auto_assign_auto_release](stock_move_auto_assign_auto_release/) | 16.0.1.1.1 | | Auto release moves after auto assign +[stock_move_common_dest](stock_move_common_dest/) | 16.0.1.0.1 | | Adds field for common destination moves +[stock_move_location](stock_move_location/) | 16.0.1.2.1 | | This module allows to move all stock in a stock location to an other one. +[stock_move_packaging_qty](stock_move_packaging_qty/) | 16.0.1.1.0 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Add packaging fields in the stock moves +[stock_mts_mto_rule](stock_mts_mto_rule/) | 16.0.1.0.0 | | Add a MTS+MTO route +[stock_packaging_calculator](stock_packaging_calculator/) | 16.0.1.0.1 | | Compute product quantity to pick by packaging +[stock_packaging_calculator_packaging_level](stock_packaging_calculator_packaging_level/) | 16.0.1.0.0 | | Glue module for packaging level +[stock_picking_commercial_partner](stock_picking_commercial_partner/) | 16.0.1.0.0 | | Add Commercial Partner on the Stock Picking +[stock_picking_procure_method](stock_picking_procure_method/) | 16.0.1.0.0 | | Allows to force the procurement method from the picking +[stock_picking_product_interchangeable](stock_picking_product_interchangeable/) | 16.0.1.0.0 | [![CetmixGitDrone](https://github.com/CetmixGitDrone.png?size=30px)](https://github.com/CetmixGitDrone) | Stock Picking Product Interchangeable +[stock_picking_volume](stock_picking_volume/) | 16.0.1.0.0 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Compute volume information on stock moves and pickings +[stock_picking_volume_packaging](stock_picking_volume_packaging/) | 16.0.1.0.0 | | Use volume information on potential product packaging to compute the volume of a stock.move +[stock_product_qty_by_packaging](stock_product_qty_by_packaging/) | 16.0.1.0.0 | | Compute product quantity to pick by packaging +[stock_putaway_product_template](stock_putaway_product_template/) | 16.0.1.0.0 | [![kevinkhao](https://github.com/kevinkhao.png?size=30px)](https://github.com/kevinkhao) [![sebastienbeau](https://github.com/sebastienbeau.png?size=30px)](https://github.com/sebastienbeau) | Add product template in putaway strategies from the product view +[stock_quant_cost_info](stock_quant_cost_info/) | 16.0.1.0.0 | | Shows the cost of the quants +[stock_quant_manual_assign](stock_quant_manual_assign/) | 16.0.1.0.1 | | Stock - Manual Quant Assignment +[stock_reserve](stock_reserve/) | 16.0.1.3.0 | | Stock reservations on products +[stock_route_mto](stock_route_mto/) | 16.0.1.0.0 | | Allows to identify MTO routes through a checkbox and availability to filter them. +[stock_search_supplierinfo_code](stock_search_supplierinfo_code/) | 16.0.1.0.1 | | Allows to search for picking from supplierinfo code +[stock_storage_category_capacity_name](stock_storage_category_capacity_name/) | 16.0.1.0.0 | | Allows to have a better display name for Stock Storage Category Capacity model +[stock_warehouse_calendar](stock_warehouse_calendar/) | 16.0.1.0.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) | Adds a calendar to the Warehouse + + +Unported addons +--------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[stock_package_type_button_box](stock_package_type_button_box/) | 16.0.1.0.0 (unported) | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | DEPRECATED - This module is a technical module that allows to fill in a button box for Stock Package Type form view + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-reporting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/stock-logistics-reporting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-reporting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/stock-logistics-reporting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/stock-logistics-reporting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/stock-logistics-reporting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/stock-logistics-reporting) +[![Translation Status](https://translation.odoo-community.org/widgets/stock-logistics-reporting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/stock-logistics-reporting-16-0/?utm_source=widget) + + + +# stock-logistics-reporting + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[delivery_line_sale_line_position](delivery_line_sale_line_position/) | 16.0.1.1.0 | | Adds the sale line position to the delivery report lines +[stock_card_report](stock_card_report/) | 16.0.1.0.0 | | Add stock card report on Inventory Reporting. +[stock_picking_report_custom_description](stock_picking_report_custom_description/) | 16.0.1.0.0 | [![carlosdauden](https://github.com/carlosdauden.png?size=30px)](https://github.com/carlosdauden) | Show moves description in picking reports +[stock_picking_report_internal_delivery_address](stock_picking_report_internal_delivery_address/) | 16.0.1.0.0 | | Show delivery address when picking type is internal +[stock_picking_report_valued](stock_picking_report_valued/) | 16.0.1.0.0 | | Adding Valued Picking on Delivery Slip report +[stock_quantity_history_location](stock_quantity_history_location/) | 16.0.1.0.1 | [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) [![rolandojduartem](https://github.com/rolandojduartem.png?size=30px)](https://github.com/rolandojduartem) | Provides stock quantity by location on past date +[stock_report_quantity_by_location](stock_report_quantity_by_location/) | 16.0.1.0.0 | | Stock Report Quantity By Location + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/rma&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/rma/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/rma/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/rma/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/rma/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/rma/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/rma) +[![Translation Status](https://translation.odoo-community.org/widgets/rma-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/rma-16-0/?utm_source=widget) + + + +# rma + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[product_warranty](product_warranty/) | 16.0.1.0.0 | [![osi-scampbell](https://github.com/osi-scampbell.png?size=30px)](https://github.com/osi-scampbell) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Product Warranty +[rma](rma/) | 16.0.1.2.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Return Merchandise Authorization (RMA) +[rma_sale](rma_sale/) | 16.0.1.1.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Sale Order - Return Merchandise Authorization (RMA) +[rma_sale_mrp](rma_sale_mrp/) | 16.0.1.1.0 | [![chienandalu](https://github.com/chienandalu.png?size=30px)](https://github.com/chienandalu) | Allow doing RMAs from MRP kits + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/ddmrp&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/ddmrp/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/ddmrp/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/ddmrp/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/ddmrp/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/ddmrp/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/ddmrp) +[![Translation Status](https://translation.odoo-community.org/widgets/ddmrp-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/ddmrp-16-0/?utm_source=widget) + + + +# ddmrp + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[ddmrp](ddmrp/) | 16.0.1.6.3 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) [![ChrisOForgeFlow](https://github.com/ChrisOForgeFlow.png?size=30px)](https://github.com/ChrisOForgeFlow) | Demand Driven Material Requirements Planning +[ddmrp_adjustment](ddmrp_adjustment/) | 16.0.1.2.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Allow to apply factor adjustments to buffers. +[ddmrp_chatter](ddmrp_chatter/) | 16.0.1.1.0 | | Adds chatter and activities to stock buffers. +[ddmrp_exclude_moves_adu_calc](ddmrp_exclude_moves_adu_calc/) | 16.0.1.0.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Define additional rules to exclude certain moves from ADU calculation +[ddmrp_history](ddmrp_history/) | 16.0.1.1.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Allow to store historical data of DDMRP buffers. +[ddmrp_product_replace](ddmrp_product_replace/) | 16.0.1.1.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Provides a assisting tool for product replacement. +[ddmrp_warning](ddmrp_warning/) | 16.0.1.2.0 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Adds configuration warnings on stock buffers. +[stock_buffer_route](stock_buffer_route/) | 16.0.1.2.0 | | Allows to force a route to be used when procuring from Stock Buffers +[stock_buffer_sales_analysis](stock_buffer_sales_analysis/) | 16.0.1.0.0 | | Allows to access the Sales Analysis from Stock Buffers + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/wms&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/wms/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/wms/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/wms/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/wms/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/wms/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/wms) +[![Translation Status](https://translation.odoo-community.org/widgets/wms-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/wms-16-0/?utm_source=widget) + + + +# wms + +WMS modules for Odoo + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[delivery_carrier_warehouse](delivery_carrier_warehouse/) | 16.0.1.0.1 | | Get delivery method used in sales orders from warehouse +[shopfloor_base](shopfloor_base/) | 16.0.1.0.1 | [![guewen](https://github.com/guewen.png?size=30px)](https://github.com/guewen) [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) [![sebalix](https://github.com/sebalix.png?size=30px)](https://github.com/sebalix) | Core module for creating mobile apps +[stock_available_to_promise_release](stock_available_to_promise_release/) | 16.0.2.4.2 | | Release Operations based on available to promise +[stock_dynamic_routing](stock_dynamic_routing/) | 16.0.1.0.2 | | Dynamic routing of stock moves +[stock_picking_completion_info](stock_picking_completion_info/) | 16.0.1.0.1 | | Display on current document completion information according to next operations +[stock_picking_type_shipping_policy](stock_picking_type_shipping_policy/) | 16.0.1.0.0 | | Define different shipping policies according to picking type +[stock_release_channel](stock_release_channel/) | 16.0.2.8.0 | [![sebalix](https://github.com/sebalix.png?size=30px)](https://github.com/sebalix) | Manage workload in WMS with release channels +[stock_release_channel_auto_release](stock_release_channel_auto_release/) | 16.0.1.0.1 | | Add an automatic release mode to the release channel +[stock_release_channel_batch_mode_commercial_partner](stock_release_channel_batch_mode_commercial_partner/) | 16.0.1.0.2 | | Release pickings into channels by batch of same commercial entity +[stock_release_channel_cutoff](stock_release_channel_cutoff/) | 16.0.1.0.1 | [![jbaudoux](https://github.com/jbaudoux.png?size=30px)](https://github.com/jbaudoux) | Add the cutoff time to the release channel +[stock_release_channel_partner_delivery_window](stock_release_channel_partner_delivery_window/) | 16.0.1.0.1 | [![jbaudoux](https://github.com/jbaudoux.png?size=30px)](https://github.com/jbaudoux) | Allows to define an end date (and time) on a release channel and propagate it to the concerned pickings +[stock_release_channel_partner_public_holidays](stock_release_channel_partner_public_holidays/) | 16.0.1.0.0 | [![jbaudoux](https://github.com/jbaudoux.png?size=30px)](https://github.com/jbaudoux) | Add an option to exclude the public holidays when assigning th release channel +[stock_release_channel_process_end_time](stock_release_channel_process_end_time/) | 16.0.1.1.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Allows to define an end date (and time) on a release channel and propagate it to the concerned pickings +[stock_release_channel_propagate_channel_picking](stock_release_channel_propagate_channel_picking/) | 16.0.1.0.0 | | Allows to propagate the channel to every picking that is created from the original one. +[stock_release_channel_shipment_advice](stock_release_channel_shipment_advice/) | 16.0.1.0.0 | [![jbaudoux](https://github.com/jbaudoux.png?size=30px)](https://github.com/jbaudoux) | Plan shipment advices for ready and released pickings +[stock_release_channel_shipment_lead_time](stock_release_channel_shipment_lead_time/) | 16.0.1.0.0 | [![jbaudoux](https://github.com/jbaudoux.png?size=30px)](https://github.com/jbaudoux) | Release channel with shipment lead time +[stock_storage_type](stock_storage_type/) | 16.0.1.0.6 | [![jbaudoux](https://github.com/jbaudoux.png?size=30px)](https://github.com/jbaudoux) [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Manage packages and locations storage types +[stock_storage_type_putaway_abc](stock_storage_type_putaway_abc/) | 16.0.1.0.0 | | Advanced storage strategy ABC for WMS +[stock_warehouse_flow](stock_warehouse_flow/) | 16.0.1.0.1 | | Configure routing flow for stock moves + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/manufacture&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/manufacture/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/manufacture/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/manufacture/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/manufacture/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/manufacture/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/manufacture) +[![Translation Status](https://translation.odoo-community.org/widgets/manufacture-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/manufacture-16-0/?utm_source=widget) + + + +# manufacture + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_move_line_mrp_info](account_move_line_mrp_info/) | 16.0.1.0.0 | | Account Move Line Mrp Info +[mrp_bom_component_menu](mrp_bom_component_menu/) | 16.0.1.0.0 | | MRP BOM Component Menu +[mrp_bom_hierarchy](mrp_bom_hierarchy/) | 16.0.1.0.0 | | Make it easy to navigate through BoM hierarchy. +[mrp_bom_location](mrp_bom_location/) | 16.0.1.1.1 | | Adds location field to Bill of Materials and its components. +[mrp_bom_tracking](mrp_bom_tracking/) | 16.0.1.0.0 | | Logs any change to a BoM in the chatter +[mrp_lot_number_propagation](mrp_lot_number_propagation/) | 16.0.1.0.0 | [![sebalix](https://github.com/sebalix.png?size=30px)](https://github.com/sebalix) | Propagate a serial number from a component to a finished product +[mrp_lot_production_date](mrp_lot_production_date/) | 16.0.1.0.0 | | MRP Lot Production Date +[mrp_multi_level](mrp_multi_level/) | 16.0.1.3.5 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) [![ChrisOForgeFlow](https://github.com/ChrisOForgeFlow.png?size=30px)](https://github.com/ChrisOForgeFlow) | Adds an MRP Scheduler +[mrp_multi_level_estimate](mrp_multi_level_estimate/) | 16.0.1.1.1 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Allows to consider demand estimates using MRP multi level. +[mrp_packaging_default](mrp_packaging_default/) | 16.0.1.0.0 | [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Include packaging info in MRP by default +[mrp_planned_order_matrix](mrp_planned_order_matrix/) | 16.0.1.0.0 | | Allows to create fixed planned orders on a grid view. +[mrp_production_note](mrp_production_note/) | 16.0.1.0.0 | | Notes in production orders +[mrp_production_quant_manual_assign](mrp_production_quant_manual_assign/) | 16.0.1.0.0 | | Production - Manual Quant Assignment +[mrp_restrict_lot](mrp_restrict_lot/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) | MRP Restrict Lot +[mrp_sale_info](mrp_sale_info/) | 16.0.1.1.0 | | Adds sale information to Manufacturing models +[mrp_subcontracting_inhibit](mrp_subcontracting_inhibit/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Inhibit subcontracting flow on demand +[mrp_subcontracting_purchase_link](mrp_subcontracting_purchase_link/) | 16.0.1.0.0 | | Link Purchase Order Line to Subcontract Productions +[mrp_subcontracting_skip_no_negative](mrp_subcontracting_skip_no_negative/) | 16.0.1.0.0 | | MRP Subcontracting Skip No Negative +[mrp_tag](mrp_tag/) | 16.0.1.1.0 | | Allows to add multiple tags to Manufacturing Orders +[mrp_unbuild_move_link](mrp_unbuild_move_link/) | 16.0.1.0.1 | | Link the stock moves of manufacturing orders to the respective unbuild orders +[mrp_warehouse_calendar](mrp_warehouse_calendar/) | 16.0.1.0.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) | Considers the warehouse calendars in manufacturing +[mrp_workorder_lot_display](mrp_workorder_lot_display/) | 16.0.1.0.0 | [![grindtildeath](https://github.com/grindtildeath.png?size=30px)](https://github.com/grindtildeath) | Display lot number on workorders kanban +[mrp_workorder_sequence](mrp_workorder_sequence/) | 16.0.0.1.0 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | adds sequence to production work orders. +[quality_control_oca](quality_control_oca/) | 16.0.1.1.0 | | Generic infrastructure for quality tests. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/manufacture-reporting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/manufacture-reporting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/manufacture-reporting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/manufacture-reporting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/manufacture-reporting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/manufacture-reporting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/manufacture-reporting) +[![Translation Status](https://translation.odoo-community.org/widgets/manufacture-reporting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/manufacture-reporting-16-0/?utm_source=widget) + + + +# manufacture-reporting + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[mrp_bom_structure_xlsx](mrp_bom_structure_xlsx/) | 16.0.1.0.1 | | Export BoM Structure to Excel .XLSX +[mrp_bom_structure_xlsx_level_1](mrp_bom_structure_xlsx_level_1/) | 16.0.1.0.0 | | Export BOM Structure (Level 1) to Excel .XLSX +[mrp_flattened_bom_xlsx](mrp_flattened_bom_xlsx/) | 16.0.1.0.0 | | Export Flattened BOM to Excel +[mrp_flattened_bom_xlsx_direct_materials_cost](mrp_flattened_bom_xlsx_direct_materials_cost/) | 16.0.1.0.0 | | Export Flattened BOM to Excel with direct materials cost +[mrp_flattened_bom_xlsx_subcontracting_cost](mrp_flattened_bom_xlsx_subcontracting_cost/) | 16.0.1.0.0 | | Export Flattened BOM to Excel with subcontracting cost + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/management-system&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/management-system/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/management-system/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/management-system/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/management-system/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/management-system/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/management-system) +[![Translation Status](https://translation.odoo-community.org/widgets/management-system-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/management-system-16-0/?utm_source=widget) + + + +# Management System + +Odoo modules to support management systems + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[document_page_environment_manual](document_page_environment_manual/) | 16.0.1.0.0 | | Document Management - Wiki - Environment Manual +[document_page_environmental_aspect](document_page_environmental_aspect/) | 16.0.1.0.0 | | Environmental Aspects +[document_page_health_safety_manual](document_page_health_safety_manual/) | 16.0.1.0.0 | | Health and Safety Manual +[document_page_procedure](document_page_procedure/) | 16.0.1.0.0 | | Document Management - Wiki - Procedures +[document_page_quality_manual](document_page_quality_manual/) | 16.0.1.0.0 | | Quality Manual +[document_page_work_instruction](document_page_work_instruction/) | 16.0.1.0.0 | | Document Management - Wiki - Work Instructions +[mgmtsystem](mgmtsystem/) | 16.0.1.0.0 | | Management System +[mgmtsystem_action](mgmtsystem_action/) | 16.0.1.0.0 | | Management System - Action +[mgmtsystem_action_efficacy](mgmtsystem_action_efficacy/) | 16.0.1.0.0 | | Add information on the application of the Action. +[mgmtsystem_action_template](mgmtsystem_action_template/) | 16.0.1.0.0 | | Add Template management for Actions. +[mgmtsystem_audit](mgmtsystem_audit/) | 16.0.1.0.1 | | Management System - Audit +[mgmtsystem_claim](mgmtsystem_claim/) | 16.0.1.1.0 | | Management System - Claim +[mgmtsystem_environment](mgmtsystem_environment/) | 16.0.1.0.0 | | Environment Management System +[mgmtsystem_hazard](mgmtsystem_hazard/) | 16.0.1.0.0 | | Hazard +[mgmtsystem_hazard_risk](mgmtsystem_hazard_risk/) | 16.0.1.0.0 | | Hazard Risk +[mgmtsystem_health_safety](mgmtsystem_health_safety/) | 16.0.1.0.1 | | Health and Safety Management System +[mgmtsystem_info_security_manual](mgmtsystem_info_security_manual/) | 16.0.1.0.0 | | Information Security Management System Manual +[mgmtsystem_manual](mgmtsystem_manual/) | 16.0.1.0.0 | | Management System - Manual +[mgmtsystem_nonconformity](mgmtsystem_nonconformity/) | 16.0.1.1.0 | | Management System - Nonconformity +[mgmtsystem_nonconformity_hr](mgmtsystem_nonconformity_hr/) | 16.0.1.0.0 | | Bridge module between hr and mgmsystem and +[mgmtsystem_nonconformity_mrp](mgmtsystem_nonconformity_mrp/) | 16.0.1.0.0 | | Bridge module between mrp and mgmsystem +[mgmtsystem_nonconformity_product](mgmtsystem_nonconformity_product/) | 16.0.1.0.0 | | Bridge module between Product and Management System. +[mgmtsystem_nonconformity_quality_control_oca](mgmtsystem_nonconformity_quality_control_oca/) | 16.0.1.0.0 | | Bridge module between Quality Control and Non Conformities +[mgmtsystem_nonconformity_repair](mgmtsystem_nonconformity_repair/) | 16.0.1.0.0 | | Bridge module between Repair and Non Conformities +[mgmtsystem_nonconformity_type](mgmtsystem_nonconformity_type/) | 16.0.1.0.0 | | Add Nonconformity classification for the root context. +[mgmtsystem_partner](mgmtsystem_partner/) | 16.0.1.0.0 | | Add Management System reference on Partner's Contacts. +[mgmtsystem_quality](mgmtsystem_quality/) | 16.0.1.0.1 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Manage your quality management system +[mgmtsystem_review](mgmtsystem_review/) | 16.0.1.0.0 | | Management System - Review +[mgmtsystem_survey](mgmtsystem_survey/) | 16.0.1.0.0 | | Management System - Survey + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/pms&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/pms/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/pms/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/pms/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/pms/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/pms/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/pms) +[![Translation Status](https://translation.odoo-community.org/widgets/pms-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/pms-16-0/?utm_source=widget) + + + +# pms + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/purchase-workflow&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/purchase-workflow/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/purchase-workflow/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/purchase-workflow/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/purchase-workflow/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/purchase-workflow/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/purchase-workflow) +[![Translation Status](https://translation.odoo-community.org/widgets/purchase-workflow-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/purchase-workflow-16-0/?utm_source=widget) + + + +# purchase-workflow + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[product_supplier_code_purchase](product_supplier_code_purchase/) | 16.0.1.0.0 | | This module adds to the purchase order line the supplier code defined in the product. +[product_supplierinfo_qty_multiplier](product_supplierinfo_qty_multiplier/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Product supplierinfo qty multiplier +[purchase_advance_payment](purchase_advance_payment/) | 16.0.1.0.0 | | Allow to add advance payments on purchase orders +[purchase_all_shipments](purchase_all_shipments/) | 16.0.1.0.0 | | Purchase All Shipments +[purchase_allowed_product](purchase_allowed_product/) | 16.0.2.1.0 | | This module allows to select only products that can be supplied by the vendor +[purchase_blanket_order](purchase_blanket_order/) | 16.0.2.0.1 | | Purchase Blanket Orders +[purchase_commercial_partner](purchase_commercial_partner/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add stored related field 'Commercial Supplier' on POs +[purchase_default_terms_conditions](purchase_default_terms_conditions/) | 16.0.1.0.2 | | This module allows purchase default terms & conditions +[purchase_delivery_split_date](purchase_delivery_split_date/) | 16.0.1.0.1 | | Allows Purchase Order you confirm to generate one Incoming Shipment for each expected date indicated in the Purchase Order Lines +[purchase_deposit](purchase_deposit/) | 16.0.1.0.1 | | Option to create deposit from purchase order +[purchase_discount](purchase_discount/) | 16.0.1.2.0 | | Purchase order lines with discounts +[purchase_exception](purchase_exception/) | 16.0.1.0.0 | | Custom exceptions on purchase order +[purchase_fop_shipping](purchase_fop_shipping/) | 16.0.1.0.0 | | Purchase Free-Of-Payment shipping +[purchase_force_invoiced](purchase_force_invoiced/) | 16.0.1.0.1 | | Allows to force the billing status of the purchase order to "Invoiced" +[purchase_invoice_method](purchase_invoice_method/) | 16.0.1.0.0 | | Allow to force the invoice method of a purchase +[purchase_invoice_plan](purchase_invoice_plan/) | 16.0.1.0.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Add to purchases order, ability to manage future invoice plan +[purchase_last_price_info](purchase_last_price_info/) | 16.0.1.0.1 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Purchase Product Last Price Info +[purchase_line_procurement_group](purchase_line_procurement_group/) | 16.0.1.0.0 | | Group purchase order line according to procurement group +[purchase_location_by_line](purchase_location_by_line/) | 16.0.1.0.0 | | Allows to define a specific destination location on each PO line +[purchase_lot](purchase_lot/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) | Purchase Lot +[purchase_manual_delivery](purchase_manual_delivery/) | 16.0.1.1.0 | | Prevents pickings to be auto generated upon Purchase Order confirmation and adds the ability to manually generate them as the supplier confirms the different purchase order lines. +[purchase_merge](purchase_merge/) | 16.0.1.0.1 | | Wizard to merge purchase with required conditions +[purchase_no_rfq](purchase_no_rfq/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Purchase Order - No Request For Quotation +[purchase_only_by_packaging](purchase_only_by_packaging/) | 16.0.1.0.0 | | Manage purchase of packaging +[purchase_open_qty](purchase_open_qty/) | 16.0.2.0.1 | | Allows to identify the purchase orders that have quantities pending to invoice or to receive. +[purchase_order_approved](purchase_order_approved/) | 16.0.1.0.0 | | Add a new state 'Approved' in purchase orders. +[purchase_order_archive](purchase_order_archive/) | 16.0.1.0.0 | | Archive Purchase Orders +[purchase_order_general_discount](purchase_order_general_discount/) | 16.0.1.0.0 | | General discount per purchase order +[purchase_order_hide_receipt_status](purchase_order_hide_receipt_status/) | 16.0.1.0.1 | | Purchase Order Hide Receipt Status +[purchase_order_line_menu](purchase_order_line_menu/) | 16.0.2.1.0 | | Adds Purchase Order Lines Menu +[purchase_order_no_zero_price](purchase_order_no_zero_price/) | 16.0.1.0.1 | | Prevent zero price lines on Purchase Orders +[purchase_order_owner](purchase_order_owner/) | 16.0.1.0.0 | | Purchase Order Owner +[purchase_order_product_recommendation](purchase_order_product_recommendation/) | 16.0.1.1.0 | | Recommend products to buy to supplier based on history +[purchase_order_purchase_manager](purchase_order_purchase_manager/) | 16.0.1.0.1 | [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Purchase Manager from Supplier in Purchase Order +[purchase_order_supplierinfo_update](purchase_order_supplierinfo_update/) | 16.0.1.0.1 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | Update product supplierinfo with the last purchase price +[purchase_order_type](purchase_order_type/) | 16.0.1.0.1 | | Purchase Order Type +[purchase_order_type_dashboard](purchase_order_type_dashboard/) | 16.0.1.0.0 | [![dalonsod](https://github.com/dalonsod.png?size=30px)](https://github.com/dalonsod) | Purchase Order Type Dashboard +[purchase_order_uninvoiced_amount](purchase_order_uninvoiced_amount/) | 16.0.1.0.1 | | Purchase Order Univoiced Amount +[purchase_order_weight_volume](purchase_order_weight_volume/) | 16.0.2.2.0 | [![ilyasProgrammer](https://github.com/ilyasProgrammer.png?size=30px)](https://github.com/ilyasProgrammer) | Display purchase order weight and volume +[purchase_packaging_level_qty](purchase_packaging_level_qty/) | 16.0.1.0.0 | | Display purchase order packaging level quantity +[purchase_partner_incoterm](purchase_partner_incoterm/) | 16.0.1.0.0 | [![TDu](https://github.com/TDu.png?size=30px)](https://github.com/TDu) [![bealdav](https://github.com/bealdav.png?size=30px)](https://github.com/bealdav) | Add a an incoterm field for supplier and use it on purchase order +[purchase_partner_selectable_option](purchase_partner_selectable_option/) | 16.0.1.0.3 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Purchase Partner Selectable Option +[purchase_product_packaging_container_deposit](purchase_product_packaging_container_deposit/) | 16.0.1.0.0 | | Purchase Product Packaging Container Deposit +[purchase_reception_status](purchase_reception_status/) | 16.0.1.0.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add reception status on purchase orders +[purchase_request](purchase_request/) | 16.0.1.0.3 | | Use this module to have notification of requirements of materials and/or external services and keep track of such requirements. +[purchase_request_tier_validation](purchase_request_tier_validation/) | 16.0.1.0.0 | | Extends the functionality of Purchase Requests to support a tier validation process. +[purchase_requisition_tier_validation](purchase_requisition_tier_validation/) | 16.0.1.0.0 | | Extends the functionality of Purchase Agreements to support a tier validation process. +[purchase_security](purchase_security/) | 16.0.1.0.0 | [![pilarvargas-tecnativa](https://github.com/pilarvargas-tecnativa.png?size=30px)](https://github.com/pilarvargas-tecnativa) | See only your purchase orders +[purchase_stock_packaging](purchase_stock_packaging/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Allows to transmit the product packaging from the procurement values to the generated purchase order line +[purchase_tag](purchase_tag/) | 16.0.1.1.0 | | Allows to add multiple tags to purchase orders +[purchase_tier_validation](purchase_tier_validation/) | 16.0.1.1.0 | | Extends the functionality of Purchase Orders to support a tier validation process. +[purchase_triple_discount](purchase_triple_discount/) | 16.0.1.0.0 | | Manage triple discount on purchase order lines +[purchase_warn_message](purchase_warn_message/) | 16.0.1.0.0 | | Add a popup warning on purchase to ensure warning is populated +[sale_purchase_force_vendor](sale_purchase_force_vendor/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Sale Purchase Force Vendor +[supplier_calendar](supplier_calendar/) | 16.0.1.0.0 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Supplier Calendar + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/purchase-reporting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/purchase-reporting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/purchase-reporting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/purchase-reporting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/purchase-reporting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/purchase-reporting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/purchase-reporting) +[![Translation Status](https://translation.odoo-community.org/widgets/purchase-reporting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/purchase-reporting-16-0/?utm_source=widget) + + + +# purchase-reporting + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[purchase_report_date_format](purchase_report_date_format/) | 16.0.1.0.1 | | Purchase Report Date Format +[purchase_report_payment_term](purchase_report_payment_term/) | 16.0.1.0.0 | | Purchase Report Payment Term +[purchase_report_shipping_address](purchase_report_shipping_address/) | 16.0.1.0.0 | | Purchase Report Shipping Address + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/product-attribute/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/product-attribute/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/product-attribute/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/product-attribute/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/product-attribute/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/product-attribute) +[![Translation Status](https://translation.odoo-community.org/widgets/product-attribute-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/product-attribute-16-0/?utm_source=widget) + + + +# product-attribute + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[product_abc_classification](product_abc_classification/) | 16.0.1.0.0 | | ABC classification for sales and warehouse management +[product_abc_classification_sale_stock](product_abc_classification_sale_stock/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) [![lmarion-source](https://github.com/lmarion-source.png?size=30px)](https://github.com/lmarion-source) | Compute ABC classification from the number of delivered sale order line by product +[product_assortment](product_assortment/) | 16.0.1.0.2 | | Adds the ability to manage products assortment +[product_attribute_archive](product_attribute_archive/) | 16.0.1.0.0 | | Add an active field on product attributes +[product_attribute_company_favorite](product_attribute_company_favorite/) | 16.0.1.0.0 | [![victor-champonnois](https://github.com/victor-champonnois.png?size=30px)](https://github.com/victor-champonnois) | Possibility to set favorite product attributes per company +[product_attribute_value_menu](product_attribute_value_menu/) | 16.0.1.0.0 | | Product attributes values tree and form. Import attribute values. +[product_category_active](product_category_active/) | 16.0.1.0.2 | | Add option to archive product categories +[product_category_code](product_category_code/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Allows to define a code on product categories +[product_category_hr_department](product_category_hr_department/) | 16.0.1.0.0 | [![smaciaosi](https://github.com/smaciaosi.png?size=30px)](https://github.com/smaciaosi) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Link product categories to hr departments +[product_category_type](product_category_type/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add Type field on Product Categories to distinguish between parent and final categories +[product_code_unique](product_code_unique/) | 16.0.1.0.1 | | Set Product Internal Reference as Unique +[product_company_default](product_company_default/) | 16.0.1.0.0 | | Product Company Default +[product_cost_security](product_cost_security/) | 16.0.1.0.0 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Product cost security restriction view +[product_country_restriction](product_country_restriction/) | 16.0.1.0.0 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Allows to define product restrictions country based +[product_dimension](product_dimension/) | 16.0.1.1.0 | | Product Dimension +[product_expiry_configurable](product_expiry_configurable/) | 16.0.1.0.0 | | This model allows setting expiry times on category and to use the 'end_of_life' date for the computation of lot dates +[product_get_price_helper](product_get_price_helper/) | 16.0.1.0.0 | | This module provides a helper function to compute product prices. +[product_logistics_uom](product_logistics_uom/) | 16.0.3.0.0 | [![hparfr](https://github.com/hparfr.png?size=30px)](https://github.com/hparfr) | Configure product weights and volume UoM +[product_lot_sequence](product_lot_sequence/) | 16.0.1.0.0 | | Adds ability to define a lot sequence from the product +[product_manufacturer](product_manufacturer/) | 16.0.1.0.1 | | Adds manufacturers and attributes on the product view. +[product_multi_category](product_multi_category/) | 16.0.1.0.0 | | Product - Many Categories +[product_net_weight](product_net_weight/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add 'Net Weight' on product models +[product_packaging_container_deposit](product_packaging_container_deposit/) | 16.0.1.1.0 | | Add container deposit fees in a order +[product_packaging_dimension](product_packaging_dimension/) | 16.0.1.1.1 | | Manage packaging dimensions and weight +[product_packaging_level](product_packaging_level/) | 16.0.1.1.0 | | This module binds a product packaging to a packaging level +[product_packaging_level_purchasable](product_packaging_level_purchasable/) | 16.0.1.1.0 | | Control purchase of products via packaging settings. +[product_packaging_level_salable](product_packaging_level_salable/) | 16.0.1.0.0 | | Product Packaging level salable +[product_pricelist_direct_print](product_pricelist_direct_print/) | 16.0.1.0.2 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Print price list from menu option, product templates, products variants or price lists +[product_pricelist_direct_print_company_group](product_pricelist_direct_print_company_group/) | 16.0.1.0.0 | | Print Pricelist items using the company group model +[product_pricelist_direct_print_website_sale](product_pricelist_direct_print_website_sale/) | 16.0.1.0.0 | [![CarlosRoca13](https://github.com/CarlosRoca13.png?size=30px)](https://github.com/CarlosRoca13) | Extend Product Pricelist Direct Print for filter by public categories +[product_pricelist_direct_print_xlsx](product_pricelist_direct_print_xlsx/) | 16.0.1.0.0 | | Print price list in XLSX format +[product_pricelist_fixed_currency_rate](product_pricelist_fixed_currency_rate/) | 16.0.1.0.0 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Set a fixed currency rate between pricelists +[product_pricelist_item_list_view](product_pricelist_item_list_view/) | 16.0.1.1.0 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | View and search the list of pricelist items +[product_pricelist_revision](product_pricelist_revision/) | 16.0.1.0.1 | | Product Pricelist Revision +[product_pricelist_simulation](product_pricelist_simulation/) | 16.0.1.0.2 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Simulate the product price for all pricelists +[product_pricelist_simulation_margin](product_pricelist_simulation_margin/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add margin of product price for all pricelists +[product_pricelist_supplierinfo](product_pricelist_supplierinfo/) | 16.0.1.0.1 | [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) | Allows to create priceslists based on supplier info +[product_print_category](product_print_category/) | 16.0.1.0.3 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Define print categories for products and automate products print, when data has changed +[product_product_template_link](product_product_template_link/) | 16.0.1.0.0 | | Adds a button in product to view the template +[product_profile](product_profile/) | 16.0.1.0.0 | [![bealdav](https://github.com/bealdav.png?size=30px)](https://github.com/bealdav) [![sebastienbeau](https://github.com/sebastienbeau.png?size=30px)](https://github.com/sebastienbeau) [![kevinkhao](https://github.com/kevinkhao.png?size=30px)](https://github.com/kevinkhao) | Allow to configure a product in 1 click +[product_route_mto](product_route_mto/) | 16.0.1.0.0 | | This module allows to compute if a product is an 'MTO' one from its configured routes +[product_sale_description](product_sale_description/) | 16.0.1.0.1 | | Long and short description for products +[product_secondary_unit](product_secondary_unit/) | 16.0.1.0.2 | [![sergio-teruel](https://github.com/sergio-teruel.png?size=30px)](https://github.com/sergio-teruel) | Set a secondary unit per product +[product_sequence](product_sequence/) | 16.0.2.0.1 | | Product Sequence +[product_set](product_set/) | 16.0.2.0.0 | | Product set +[product_state](product_state/) | 16.0.1.1.0 | [![emagdalenaC2i](https://github.com/emagdalenaC2i.png?size=30px)](https://github.com/emagdalenaC2i) | Module introducing a state field on product template +[product_stock_state](product_stock_state/) | 16.0.1.0.0 | [![sebastienbeau](https://github.com/sebastienbeau.png?size=30px)](https://github.com/sebastienbeau) [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) [![kevinkhao](https://github.com/kevinkhao.png?size=30px)](https://github.com/kevinkhao) | Compute the state of a product's stockthe stock level and sale_ok field +[product_supplierinfo_archive](product_supplierinfo_archive/) | 16.0.1.0.0 | [![GuillemCForgeFlow](https://github.com/GuillemCForgeFlow.png?size=30px)](https://github.com/GuillemCForgeFlow) [![AlvaroTForgeFlow](https://github.com/AlvaroTForgeFlow.png?size=30px)](https://github.com/AlvaroTForgeFlow) [![OriolVForgeFlow](https://github.com/OriolVForgeFlow.png?size=30px)](https://github.com/OriolVForgeFlow) | Add the active field to the product supplier info +[product_supplierinfo_for_customer](product_supplierinfo_for_customer/) | 16.0.1.0.1 | | Allows to define prices for customers in the products +[product_supplierinfo_revision](product_supplierinfo_revision/) | 16.0.1.0.0 | | Product Supplierinfo Revision +[product_template_has_one_variant](product_template_has_one_variant/) | 16.0.1.0.1 | [![rousseldenis](https://github.com/rousseldenis.png?size=30px)](https://github.com/rousseldenis) | Allows to define a field on product template level to determine if it has only one variant +[product_template_tags](product_template_tags/) | 16.0.1.0.1 | [![patrickrwilson](https://github.com/patrickrwilson.png?size=30px)](https://github.com/patrickrwilson) [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | This addon allow to add tags on products +[product_total_weight_from_packaging](product_total_weight_from_packaging/) | 16.0.1.0.0 | | Compute estimated weight based on product's packaging weights +[product_uom_measure_type](product_uom_measure_type/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Product - UoM Measure Type +[product_uom_po_domain](product_uom_po_domain/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Product - Domain on Purchase UoM +[product_uom_updatable](product_uom_updatable/) | 16.0.1.0.0 | | allows products uom to be modified after be used in a stock picking if the product uom is of the same category +[product_variant_attribute_name_manager](product_variant_attribute_name_manager/) | 16.0.1.1.0 | [![JordiMForgeFlow](https://github.com/JordiMForgeFlow.png?size=30px)](https://github.com/JordiMForgeFlow) | Manage how to display the attributes on the product variant name. +[sale_product_template_tags](sale_product_template_tags/) | 16.0.1.0.0 | [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Show product tags menu in Sale app +[stock_production_lot_expired_date](stock_production_lot_expired_date/) | 16.0.1.0.1 | | Stock production lot expired date +[uom_category_active](uom_category_active/) | 16.0.1.0.0 | | Add option to archive UoM categories + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/product-kitting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/product-kitting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/product-kitting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/product-kitting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/product-kitting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/product-kitting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/product-kitting) +[![Translation Status](https://translation.odoo-community.org/widgets/product-kitting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/product-kitting-16-0/?utm_source=widget) + + + +# product-kitting + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/product-variant&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/product-variant/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/product-variant/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/product-variant/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/product-variant/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/product-variant/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/product-variant) +[![Translation Status](https://translation.odoo-community.org/widgets/product-variant-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/product-variant-16-0/?utm_source=widget) + + + +# product-variant + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[product_variant_attribute_tax](product_variant_attribute_tax/) | 16.0.1.0.0 | | Set taxes on the product attribute values +[product_variant_configurator](product_variant_configurator/) | 16.0.1.0.2 | | Provides an abstract model for product variant configuration. +[product_variant_default_code](product_variant_default_code/) | 16.0.1.1.0 | [![Kev-Roche](https://github.com/Kev-Roche.png?size=30px)](https://github.com/Kev-Roche) | Product Variant Default Code +[product_variant_name](product_variant_name/) | 16.0.1.0.0 | | Product Variant Name +[product_variant_sale_price](product_variant_sale_price/) | 16.0.1.0.0 | | Allows to write fixed prices in product variants +[product_variant_specific_description](product_variant_specific_description/) | 16.0.1.0.1 | | Product Variant Specific Description +[sale_order_line_variant_description](sale_order_line_variant_description/) | 16.0.1.0.1 | | Sale order line variant description + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/product-pack&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/product-pack/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/product-pack/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/product-pack/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/product-pack/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/product-pack/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/product-pack) +[![Translation Status](https://translation.odoo-community.org/widgets/product-pack-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/product-pack-16-0/?utm_source=widget) + + + +# product-pack + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[product_pack](product_pack/) | 16.0.1.1.0 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | This module allows you to set a product as a Pack +[sale_product_pack](sale_product_pack/) | 16.0.1.0.0 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | This module allows you to sell product packs +[stock_product_pack](stock_product_pack/) | 16.0.1.0.0 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | This module allows you to get the right available quantities of the packs + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/project-reporting&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/project-reporting/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/project-reporting/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/project-reporting/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/project-reporting/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/project-reporting/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/project-reporting) +[![Translation Status](https://translation.odoo-community.org/widgets/project-reporting-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/project-reporting-16-0/?utm_source=widget) + + + +# project-reporting + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/project&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/project/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/project/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/project/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/project/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/project/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/project) +[![Translation Status](https://translation.odoo-community.org/widgets/project-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/project-16-0/?utm_source=widget) + + + +# project + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[project_administrator_restricted_visibility](project_administrator_restricted_visibility/) | 16.0.1.0.1 | [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) [![edlopen](https://github.com/edlopen.png?size=30px)](https://github.com/edlopen) | Adds a 'Project Administrator' access group with restricted visibility to 'Projects' +[project_department](project_department/) | 16.0.1.0.0 | | Project Department Categorization +[project_duplicate_subtask](project_duplicate_subtask/) | 16.0.1.0.0 | | The module adds an action to duplicate tasks with the child subtasks +[project_hr](project_hr/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Link HR with project +[project_list](project_list/) | 16.0.1.0.0 | | Projects list view +[project_parent](project_parent/) | 16.0.1.0.0 | | Project Parent +[project_parent_task_filter](project_parent_task_filter/) | 16.0.1.0.0 | | Add a filter to show the parent tasks +[project_purchase_link](project_purchase_link/) | 16.0.1.0.0 | | Project Purchase Link +[project_role](project_role/) | 16.0.1.0.3 | [![alexey-pelykh](https://github.com/alexey-pelykh.png?size=30px)](https://github.com/alexey-pelykh) | Project role-based roster +[project_sequence](project_sequence/) | 16.0.1.0.0 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) [![anddago78](https://github.com/anddago78.png?size=30px)](https://github.com/anddago78) | Add a sequence field to projects, filled automatically +[project_stage_extra_info](project_stage_extra_info/) | 16.0.1.0.0 | | Project Stage Extra Info +[project_stock](project_stock/) | 16.0.1.0.2 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Project Stock +[project_stock_analytic_tag](project_stock_analytic_tag/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Project Stock Analytic Tag +[project_stock_product_set](project_stock_product_set/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Project Stock Product Set +[project_task_add_very_high](project_task_add_very_high/) | 16.0.1.0.0 | [![astirpe](https://github.com/astirpe.png?size=30px)](https://github.com/astirpe) | Adds extra options 'High' and 'Very High' on tasks +[project_task_code](project_task_code/) | 16.0.1.0.2 | | Sequential Code for Tasks +[project_task_default_stage](project_task_default_stage/) | 16.0.1.0.1 | | Recovery default task stages for projects from v8 +[project_task_link](project_task_link/) | 16.0.1.0.1 | | Project Task Link +[project_task_material](project_task_material/) | 16.0.1.0.0 | | Record products spent in a Task +[project_task_note](project_task_note/) | 16.0.1.0.0 | [![carolina-fernandez](https://github.com/carolina-fernandez.png?size=30px)](https://github.com/carolina-fernandez) | Add notes in project tasks +[project_task_personal_stage_auto_fold](project_task_personal_stage_auto_fold/) | 16.0.1.0.0 | | Moves task to the first fold personal stage when done +[project_task_pull_request](project_task_pull_request/) | 16.0.1.0.0 | | Adds a field for a PR URI to project tasks +[project_task_pull_request_state](project_task_pull_request_state/) | 16.0.1.0.0 | | Track Pull Request state in tasks +[project_task_stage_mgmt](project_task_stage_mgmt/) | 16.0.1.0.0 | [![DavidJForgeFlow](https://github.com/DavidJForgeFlow.png?size=30px)](https://github.com/DavidJForgeFlow) | Allows to assign and create task stages on project creation wizard +[project_task_stage_state](project_task_stage_state/) | 16.0.1.0.0 | | Restore State attribute removed from Project Stages in 8.0 +[project_template](project_template/) | 16.0.1.0.0 | [![patrickrwilson](https://github.com/patrickrwilson.png?size=30px)](https://github.com/patrickrwilson) | Project Templates +[project_timeline](project_timeline/) | 16.0.1.2.0 | | Timeline view for projects +[project_timeline_hr_timesheet](project_timeline_hr_timesheet/) | 16.0.1.0.0 | | Shows the progress of tasks on the timeline view. +[project_timesheet_time_control](project_timesheet_time_control/) | 16.0.1.0.1 | [![ernestotejeda](https://github.com/ernestotejeda.png?size=30px)](https://github.com/ernestotejeda) | Project timesheet time control +[project_type](project_type/) | 16.0.1.0.0 | | Project Types +[project_update_visible](project_update_visible/) | 16.0.1.0.0 | | Visible project_id in project.update view form. +[sale_project_copy_tasks](sale_project_copy_tasks/) | 16.0.1.0.2 | [![shide](https://github.com/shide.png?size=30px)](https://github.com/shide) [![EmilioPascual](https://github.com/EmilioPascual.png?size=30px)](https://github.com/EmilioPascual) | Copy tasks into sale order's project + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/project-agile&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/project-agile/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/project-agile/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/project-agile/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/project-agile/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/project-agile/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/project-agile) +[![Translation Status](https://translation.odoo-community.org/widgets/project-agile-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/project-agile-16-0/?utm_source=widget) + + + +# project-agile + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/contract&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/contract/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/contract/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/contract/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/contract/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/contract/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/contract) +[![Translation Status](https://translation.odoo-community.org/widgets/contract-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/contract-16-0/?utm_source=widget) + + + +# contract + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[agreement_rebate_partner_company_group](agreement_rebate_partner_company_group/) | 16.0.1.0.0 | | Rebate agreements applied to all company group members +[contract](contract/) | 16.0.2.3.0 | | Recurring - Contracts Management +[contract_invoice_start_end_dates](contract_invoice_start_end_dates/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) | Contract Invoice Start End Dates +[contract_payment_mode](contract_payment_mode/) | 16.0.1.0.0 | | Payment mode in contracts and their invoices +[contract_sale](contract_sale/) | 16.0.1.2.0 | | Contract from Sale +[contract_sale_generation](contract_sale_generation/) | 16.0.1.0.0 | | Contracts Management - Recurring Sales +[contract_variable_quantity](contract_variable_quantity/) | 16.0.1.0.0 | | Variable quantity in contract recurrent invoicing +[subscription_oca](subscription_oca/) | 16.0.1.0.0 | | Generate recurring invoices. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/program&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/program/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/program/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/program/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/program/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/program/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/program) +[![Translation Status](https://translation.odoo-community.org/widgets/program-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/program-16-0/?utm_source=widget) + + + +# program + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/business-requirement&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/business-requirement/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/business-requirement/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/business-requirement/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/business-requirement/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/business-requirement/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/business-requirement) +[![Translation Status](https://translation.odoo-community.org/widgets/business-requirement-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/business-requirement-16-0/?utm_source=widget) + + + +# business-requirement + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[business_requirement](business_requirement/) | 16.0.1.0.0 | | Manage the Business Requirements (stories, scenarios, gaps and test cases) for your customers +[business_requirement_crm](business_requirement_crm/) | 16.0.1.0.0 | | Convert Leads to Business Requirement + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-redmine&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-redmine/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-redmine/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-redmine/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-redmine/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-redmine/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-redmine) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-redmine-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-redmine-16-0/?utm_source=widget) + + + +# connector-redmine + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-jira&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/connector-jira/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-jira/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/connector-jira/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/connector-jira/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/connector-jira/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-jira) +[![Translation Status](https://translation.odoo-community.org/widgets/connector-jira-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-jira-16-0/?utm_source=widget) + + + +# connector-jira + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/social/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/social/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/social/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/social/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/social/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/social) +[![Translation Status](https://translation.odoo-community.org/widgets/social-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/social-16-0/?utm_source=widget) + + + +# social + +{'TODO': 'add repo description.'} + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_search_mail_content](base_search_mail_content/) | 16.0.1.0.2 | | Base Search Mail Content +[email_template_qweb](email_template_qweb/) | 16.0.1.0.0 | | Use the QWeb templating mechanism for emails +[mail_activity_board](mail_activity_board/) | 16.0.1.1.1 | | Add Activity Boards +[mail_activity_done](mail_activity_done/) | 16.0.1.1.0 | | Mail Activity Done +[mail_activity_partner](mail_activity_partner/) | 16.0.1.0.0 | | Add Partner to Activities +[mail_activity_reminder](mail_activity_reminder/) | 16.0.1.0.0 | | Reminder notifications about planned activities +[mail_activity_team](mail_activity_team/) | 16.0.1.0.0 | | Add Teams to Activities +[mail_attach_existing_attachment](mail_attach_existing_attachment/) | 16.0.1.1.0 | | Adding attachment on the object by sending this one +[mail_autosubscribe](mail_autosubscribe/) | 16.0.1.0.0 | | Automatically subscribe partners to its company's business documents +[mail_composer_cc_bcc](mail_composer_cc_bcc/) | 16.0.2.0.0 | [![hailangvn2023](https://github.com/hailangvn2023.png?size=30px)](https://github.com/hailangvn2023) | This module enables sending mail to CC and BCC partners in mail composer form. +[mail_composer_cc_bcc_account](mail_composer_cc_bcc_account/) | 16.0.2.0.0 | [![hailangvn2023](https://github.com/hailangvn2023.png?size=30px)](https://github.com/hailangvn2023) | This module enables sending mail to CC and BCC partners for invoices. +[mail_debrand](mail_debrand/) | 16.0.1.0.2 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) [![joao-p-marques](https://github.com/joao-p-marques.png?size=30px)](https://github.com/joao-p-marques) | Remove Odoo branding in sent emails Removes anchor 20characters +[mail_improved_tracking_value](mail_improved_tracking_value/) | 16.0.1.0.0 | | Improves tracking changed values for certain type of fields.Adds a user-friendly view to consult them. +[mail_layout_preview](mail_layout_preview/) | 16.0.1.0.0 | | Preview email templates in the browser +[mail_optional_autofollow](mail_optional_autofollow/) | 16.0.1.0.0 | | Choose if you want to automatically add new recipients as followers on mail.compose.message +[mail_optional_follower_notification](mail_optional_follower_notification/) | 16.0.1.0.1 | | Choose to notify followers on mail.compose.message +[mail_outbound_static](mail_outbound_static/) | 16.0.1.0.2 | | Allows you to configure the from header for a mail server. +[mail_partner_opt_out](mail_partner_opt_out/) | 16.0.1.0.0 | | Add the partner's email to the blackmailed list +[mail_post_defer](mail_post_defer/) | 16.0.1.0.1 | [![Yajo](https://github.com/Yajo.png?size=30px)](https://github.com/Yajo) | Faster and cancellable outgoing messages +[mail_quoted_reply](mail_quoted_reply/) | 16.0.1.0.2 | | Make a reply using a message +[mail_restrict_follower_selection](mail_restrict_follower_selection/) | 16.0.1.0.0 | | Define a domain from which followers can be selected +[mail_send_confirmation](mail_send_confirmation/) | 16.0.1.0.0 | | Mail Send Confirmation +[mail_show_follower](mail_show_follower/) | 16.0.1.0.1 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Show CC document followers in mails. +[mail_template_substitute](mail_template_substitute/) | 16.0.1.0.0 | | This module allows to create substitution rules for mail templates. +[mail_tracking](mail_tracking/) | 16.0.1.0.3 | | Email tracking system for all mails sent +[mail_tracking_mailgun](mail_tracking_mailgun/) | 16.0.1.0.0 | | Mail tracking and Mailgun webhooks integration +[mail_tracking_mass_mailing](mail_tracking_mass_mailing/) | 16.0.1.0.0 | | Improve mass mailing email tracking +[mass_mailing_contact_active](mass_mailing_contact_active/) | 16.0.1.0.0 | | Adds active feature on mailing list contact and subscriptions +[mass_mailing_event_registration_exclude](mass_mailing_event_registration_exclude/) | 16.0.1.0.0 | | Link mass mailing with event for excluding recipients +[mass_mailing_list_dynamic](mass_mailing_list_dynamic/) | 16.0.1.0.0 | | Mass mailing lists that get autopopulated +[mass_mailing_partner](mass_mailing_partner/) | 16.0.1.0.0 | | Link partners with mass-mailing +[mass_mailing_resend](mass_mailing_resend/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Resend mass mailings +[mass_mailing_unique](mass_mailing_unique/) | 16.0.1.0.1 | | Avoids duplicate mailing lists and contacts + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/storage/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/storage/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/storage/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/storage/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/storage/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/storage) +[![Translation Status](https://translation.odoo-community.org/widgets/storage-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/storage-16-0/?utm_source=widget) + + + +# storage + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[fs_attachment](fs_attachment/) | 16.0.1.0.9 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Store attachments on external object store +[fs_base_multi_image](fs_base_multi_image/) | 16.0.1.1.0 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Mulitple Images from External File System +[fs_base_multi_media](fs_base_multi_media/) | 16.0.1.0.1 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Give the possibility to store media data in external filesystem from odoo +[fs_file](fs_file/) | 16.0.1.0.5 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Field to store files into filesystem storages +[fs_file_demo](fs_file_demo/) | 16.0.1.0.0 | | Demo addon for fs_file and fs_image +[fs_image](fs_image/) | 16.0.1.0.2 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Field to store images into filesystem storages +[fs_image_thumbnail](fs_image_thumbnail/) | 16.0.1.0.2 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Generate and store thumbnail for images +[fs_product_brand_multi_image](fs_product_brand_multi_image/) | 16.0.1.0.0 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Link images to product brands +[fs_product_multi_image](fs_product_multi_image/) | 16.0.1.1.1 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Manage multi images from extenal file system on product +[fs_product_multi_media](fs_product_multi_media/) | 16.0.1.0.2 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Link media to products and categories +[fs_storage](fs_storage/) | 16.0.1.2.3 | | Implement the concept of Storage with amazon S3, sftp... +[image_tag](image_tag/) | 16.0.1.0.1 | | Image tag model +[storage_backend](storage_backend/) | 16.0.1.0.1 | | Implement the concept of Storage with amazon S3, sftp... +[storage_backend_sftp](storage_backend_sftp/) | 16.0.1.0.0 | | Implement SFTP Storage +[storage_file](storage_file/) | 16.0.1.0.0 | | Storage file in storage backend + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/search-engine&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/search-engine/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/search-engine/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/search-engine/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/search-engine/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/search-engine/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/search-engine) +[![Translation Status](https://translation.odoo-community.org/widgets/search-engine-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/search-engine-16-0/?utm_source=widget) + + + +# search-engine + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[connector_elasticsearch](connector_elasticsearch/) | 16.0.0.0.3 | | Connector For Elasticsearch Search Engine +[connector_search_engine](connector_search_engine/) | 16.0.0.1.9 | | Connector Search Engine +[connector_search_engine_serializer_ir_export](connector_search_engine_serializer_ir_export/) | 16.0.1.0.2 | | Use Exporter (ir.exports) as serializer for index +[search_engine_image_thumbnail](search_engine_image_thumbnail/) | 16.0.1.0.3 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Generate thumbnails for binded record +[search_engine_serializer_pydantic](search_engine_serializer_pydantic/) | 16.0.1.0.0 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Defines base class for pydantic baser serializer + + +Unported addons +--------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[connector_algolia](connector_algolia/) | 14.0.2.2.0 (unported) | | Connector For Algolia Search Engine + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/reporting-engine/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/reporting-engine/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/reporting-engine/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/reporting-engine/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/reporting-engine/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/reporting-engine) +[![Translation Status](https://translation.odoo-community.org/widgets/reporting-engine-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/reporting-engine-16-0/?utm_source=widget) + + + +# reporting-engine + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_comment_template](base_comment_template/) | 16.0.2.2.1 | | Add conditional mako template to any reporton models that inherits comment.template. +[bi_sql_editor](bi_sql_editor/) | 16.0.1.1.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | BI Views builder, based on Materialized or Normal SQL Views +[bi_view_editor](bi_view_editor/) | 16.0.1.1.0 | | Graphical BI views builder for Odoo +[bi_view_editor_spreadsheet_dashboard](bi_view_editor_spreadsheet_dashboard/) | 16.0.1.0.0 | | Glue module for BI View Editor and Spreadsheet Dashboard +[report_async](report_async/) | 16.0.1.0.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Central place to run reports live or async +[report_company_details_translatable](report_company_details_translatable/) | 16.0.1.0.0 | | Report Company Details Translatable +[report_context](report_context/) | 16.0.1.0.0 | | Adding context to reports +[report_csv](report_csv/) | 16.0.2.0.0 | | Base module to create csv report +[report_label](report_label/) | 16.0.1.0.1 | [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Print configurable self-adhesive labels reports +[report_py3o](report_py3o/) | 16.0.1.0.1 | | Reporting engine based on Libreoffice (ODT -> ODT, ODT -> PDF, ODT -> DOC, ODT -> DOCX, ODS -> ODS, etc.) +[report_py3o_fusion_server](report_py3o_fusion_server/) | 16.0.1.0.0 | | Let the fusion server handle format conversion. +[report_qweb_decimal_place](report_qweb_decimal_place/) | 16.0.1.0.0 | | Report Qweb Decimal Place +[report_qweb_element_page_visibility](report_qweb_element_page_visibility/) | 16.0.1.0.0 | | Report Qweb Element Page Visibility +[report_qweb_encrypt](report_qweb_encrypt/) | 16.0.1.0.2 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Allow to encrypt qweb pdfs +[report_qweb_parameter](report_qweb_parameter/) | 16.0.1.0.0 | | Add new parameters for qweb templates in order to reduce field length and check minimal length +[report_qweb_pdf_watermark](report_qweb_pdf_watermark/) | 16.0.1.0.0 | | Add watermarks to your QWEB PDF reports +[report_substitute](report_substitute/) | 16.0.1.0.1 | [![sbejaoui](https://github.com/sbejaoui.png?size=30px)](https://github.com/sbejaoui) | This module allows to create substitution rules for report actions. +[report_wkhtmltopdf_param](report_wkhtmltopdf_param/) | 16.0.1.0.0 | | Add new parameters for a paper format to be used by wkhtmltopdf command as arguments. +[report_xlsx](report_xlsx/) | 16.0.2.0.0 | | Base module to create xlsx report +[report_xlsx_helper](report_xlsx_helper/) | 16.0.1.0.0 | | Report xlsx helpers +[report_xml](report_xml/) | 16.0.1.1.1 | | Allow to generate XML reports +[sql_export](sql_export/) | 16.0.2.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Export data in csv file with SQL requests +[sql_export_excel](sql_export_excel/) | 16.0.1.0.1 | | Allow to export a sql query to an excel file. +[sql_export_mail](sql_export_mail/) | 16.0.2.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Send csv file generated by sql query by mail. +[sql_request_abstract](sql_request_abstract/) | 16.0.1.0.0 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Abstract Model to manage SQL Requests + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/report-print-send&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/report-print-send/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/report-print-send/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/report-print-send/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/report-print-send/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/report-print-send/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/report-print-send) +[![Translation Status](https://translation.odoo-community.org/widgets/report-print-send-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/report-print-send-16-0/?utm_source=widget) + + + +# report-print-send + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_report_to_printer](base_report_to_printer/) | 16.0.1.1.6 | | Report to printer +[base_report_to_printer_mail](base_report_to_printer_mail/) | 16.0.1.0.0 | | Report to printer - Mail extension +[pingen](pingen/) | 16.0.1.0.0 | [![ajaniszewska-dev](https://github.com/ajaniszewska-dev.png?size=30px)](https://github.com/ajaniszewska-dev) [![grindtildeath](https://github.com/grindtildeath.png?size=30px)](https://github.com/grindtildeath) | pingen.com integration +[printer_zpl2](printer_zpl2/) | 16.0.1.0.0 | | Add a ZPL II label printing feature +[printing_simple_configuration](printing_simple_configuration/) | 16.0.1.0.1 | | Allow to set printing configuration in company or in warehouse + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/webkit-tools&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/webkit-tools/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/webkit-tools/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/webkit-tools/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/webkit-tools/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/webkit-tools/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/webkit-tools) +[![Translation Status](https://translation.odoo-community.org/widgets/webkit-tools-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/webkit-tools-16-0/?utm_source=widget) + + + +# webkit-tools + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/server-tools/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-tools/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/server-tools/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-tools/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/server-tools/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/server-tools) +[![Translation Status](https://translation.odoo-community.org/widgets/server-tools-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/server-tools-16-0/?utm_source=widget) + + + +# server-tools + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[attachment_queue](attachment_queue/) | 16.0.1.2.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) [![sebastienbeau](https://github.com/sebastienbeau.png?size=30px)](https://github.com/sebastienbeau) | Base module adding the concept of queue for processing files +[attachment_synchronize](attachment_synchronize/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) [![sebastienbeau](https://github.com/sebastienbeau.png?size=30px)](https://github.com/sebastienbeau) [![GSLabIt](https://github.com/GSLabIt.png?size=30px)](https://github.com/GSLabIt) [![bealdav](https://github.com/bealdav.png?size=30px)](https://github.com/bealdav) | Attachment Synchronize +[attachment_unindex_content](attachment_unindex_content/) | 16.0.1.0.0 | [![moylop260](https://github.com/moylop260.png?size=30px)](https://github.com/moylop260) [![ebirbe](https://github.com/ebirbe.png?size=30px)](https://github.com/ebirbe) [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) | Disable indexing of attachments +[auditlog](auditlog/) | 16.0.2.1.0 | | Audit Log +[auto_backup](auto_backup/) | 16.0.1.0.0 | | Backups database +[autovacuum_message_attachment](autovacuum_message_attachment/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) | Automatically delete old mail messages and attachments +[base_cron_exclusion](base_cron_exclusion/) | 16.0.1.0.0 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) [![ChrisOForgeFlow](https://github.com/ChrisOForgeFlow.png?size=30px)](https://github.com/ChrisOForgeFlow) | Allow you to select scheduled actions that should not run simultaneously. +[base_domain_inverse_function](base_domain_inverse_function/) | 16.0.1.0.0 | [![grindtildeath](https://github.com/grindtildeath.png?size=30px)](https://github.com/grindtildeath) | Provide function to inverse domain into parts +[base_exception](base_exception/) | 16.0.2.0.0 | [![hparfr](https://github.com/hparfr.png?size=30px)](https://github.com/hparfr) [![sebastienbeau](https://github.com/sebastienbeau.png?size=30px)](https://github.com/sebastienbeau) | This module provide an abstract model to manage customizable exceptions to be applied on different models (sale order, invoice, ...) +[base_fontawesome](base_fontawesome/) | 16.0.6.6.1 | | Up to date Fontawesome resources. +[base_m2m_custom_field](base_m2m_custom_field/) | 16.0.1.0.0 | | Customizations of Many2many +[base_name_search_improved](base_name_search_improved/) | 16.0.1.0.0 | | Friendlier search when typing in relation fields +[base_partition](base_partition/) | 16.0.1.0.0 | | Base module that provide the partition method on all models +[base_search_fuzzy](base_search_fuzzy/) | 16.0.1.0.0 | | Fuzzy search with the PostgreSQL trigram extension +[base_sequence_default](base_sequence_default/) | 16.0.1.0.2 | [![Shide](https://github.com/Shide.png?size=30px)](https://github.com/Shide) [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) | Use sequences for default values of fields when creating a new record +[base_sequence_option](base_sequence_option/) | 16.0.1.0.1 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Alternative sequence options for specific models +[base_sparse_field_list_support](base_sparse_field_list_support/) | 16.0.1.0.0 | | add list support to convert_to_cache() +[base_technical_user](base_technical_user/) | 16.0.1.0.0 | | Add a technical user parameter on the company +[base_time_window](base_time_window/) | 16.0.1.0.0 | | Base model to handle time windows +[base_view_inheritance_extension](base_view_inheritance_extension/) | 16.0.1.2.0 | | Adds more operators for view inheritance +[cron_daylight_saving_time_resistant](cron_daylight_saving_time_resistant/) | 16.0.1.0.0 | [![florian-dacosta](https://github.com/florian-dacosta.png?size=30px)](https://github.com/florian-dacosta) | Run cron on fixed hours +[database_cleanup](database_cleanup/) | 16.0.1.0.2 | | Database cleanup +[dbfilter_from_header](dbfilter_from_header/) | 16.0.1.0.1 | | Filter databases with HTTP headers +[excel_import_export](excel_import_export/) | 16.0.1.1.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Base module for developing Excel import/export/report +[excel_import_export_demo](excel_import_export_demo/) | 16.0.1.0.1 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Excel Import/Export/Report Demo +[excel_import_export_unidecode](excel_import_export_unidecode/) | 16.0.1.0.1 | | Add unidecode option to excel import/export/report +[html_text](html_text/) | 16.0.1.0.0 | | Generate excerpts from any HTML field +[iap_alternative_provider](iap_alternative_provider/) | 16.0.1.0.0 | [![sebastienbeau](https://github.com/sebastienbeau.png?size=30px)](https://github.com/sebastienbeau) | Base module for providing alternative provider for iap apps +[jsonifier](jsonifier/) | 16.0.0.0.1 | | JSON-ify data for all models +[module_analysis](module_analysis/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add analysis tools regarding installed modules to know which installed modules comes from Odoo Core, OCA, or are custom modules +[module_auto_update](module_auto_update/) | 16.0.1.0.2 | | Automatically update Odoo modules +[module_change_auto_install](module_change_auto_install/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Customize auto installables modules by configuration +[onchange_helper](onchange_helper/) | 16.0.1.0.0 | | Technical module that ease execution of onchange in Python code +[rpc_helper](rpc_helper/) | 16.0.1.0.0 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) | Helpers for disabling RPC calls +[scheduler_error_mailer](scheduler_error_mailer/) | 16.0.1.0.0 | | Scheduler Error Mailer +[sentry](sentry/) | 16.0.3.0.1 | [![barsi](https://github.com/barsi.png?size=30px)](https://github.com/barsi) [![naglis](https://github.com/naglis.png?size=30px)](https://github.com/naglis) [![versada](https://github.com/versada.png?size=30px)](https://github.com/versada) [![moylop260](https://github.com/moylop260.png?size=30px)](https://github.com/moylop260) [![fernandahf](https://github.com/fernandahf.png?size=30px)](https://github.com/fernandahf) | Report Odoo errors to Sentry +[session_db](session_db/) | 16.0.1.0.5 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | Store sessions in DB +[tracking_manager](tracking_manager/) | 16.0.1.0.2 | [![Kev-Roche](https://github.com/Kev-Roche.png?size=30px)](https://github.com/Kev-Roche) [![sebastienbeau](https://github.com/sebastienbeau.png?size=30px)](https://github.com/sebastienbeau) | This module tracks all fields of a model, including one2many and many2many ones. +[upgrade_analysis](upgrade_analysis/) | 16.0.1.0.2 | [![StefanRijnhart](https://github.com/StefanRijnhart.png?size=30px)](https://github.com/StefanRijnhart) [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Performs a difference analysis between modules installed on two different Odoo instances +[url_attachment_search_fuzzy](url_attachment_search_fuzzy/) | 16.0.1.0.0 | [![mariadforgelow](https://github.com/mariadforgelow.png?size=30px)](https://github.com/mariadforgelow) | Fuzzy Search of URL in Attachments + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/server-auth&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/server-auth/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-auth/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/server-auth/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-auth/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/server-auth/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/server-auth) +[![Translation Status](https://translation.odoo-community.org/widgets/server-auth-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/server-auth-16-0/?utm_source=widget) + + + +# Server Authentication + +Modules for handling various authentication schemes + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[auth_admin_passkey](auth_admin_passkey/) | 16.0.1.0.0 | | Allows system administrator to authenticate with any account +[auth_api_key](auth_api_key/) | 16.0.1.0.0 | | Authenticate http requests from an API key +[auth_api_key_server_env](auth_api_key_server_env/) | 16.0.1.0.0 | | Configure api keys via server env. This can be very useful to avoid mixing your keys between your various environments when restoring databases. All you have to do is to add a new section to your configuration file according to the following convention: +[auth_jwt](auth_jwt/) | 16.0.1.1.0 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | JWT bearer token authentication. +[auth_jwt_demo](auth_jwt_demo/) | 16.0.1.1.1 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | Test/demo module for auth_jwt. +[auth_jwt_server_env](auth_jwt_server_env/) | 16.0.1.0.0 | | This addon adds auth.jwt.validator fields to server env +[auth_ldaps](auth_ldaps/) | 16.0.1.0.0 | | Allows to use LDAP over SSL authentication +[auth_oauth_ropc](auth_oauth_ropc/) | 16.0.1.0.0 | | Allow to login with OAuth Resource Owner Password Credentials Grant +[auth_oidc](auth_oidc/) | 16.0.1.0.2 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | Allow users to login through OpenID Connect Provider +[auth_oidc_environment](auth_oidc_environment/) | 16.0.1.0.0 | | This module allows to use server env for OIDC configuration +[auth_saml](auth_saml/) | 16.0.1.0.4 | [![vincent-hatakeyama](https://github.com/vincent-hatakeyama.png?size=30px)](https://github.com/vincent-hatakeyama) | SAML2 Authentication +[auth_session_timeout](auth_session_timeout/) | 16.0.1.0.0 | | This module disable all inactive sessions since a given delay +[auth_signup_verify_email](auth_signup_verify_email/) | 16.0.1.0.0 | | Force uninvited users to use a good email for signup +[auth_user_case_insensitive](auth_user_case_insensitive/) | 16.0.1.0.0 | | Makes the user login field case insensitive +[base_user_show_email](base_user_show_email/) | 16.0.1.0.0 | | Untangle user login and email +[password_security](password_security/) | 16.0.1.0.0 | | Allow admin to set password security requirements. +[user_log_view](user_log_view/) | 16.0.1.0.0 | [![trojikman](https://github.com/trojikman.png?size=30px)](https://github.com/trojikman) | Allow to see user's actions log +[users_ldap_groups](users_ldap_groups/) | 16.0.1.0.0 | | Adds user accounts to groups based on rules defined by the administrator. +[users_ldap_mail](users_ldap_mail/) | 16.0.1.0.0 | [![joao-p-marques](https://github.com/joao-p-marques.png?size=30px)](https://github.com/joao-p-marques) | LDAP mapping for user name and e-mail +[users_ldap_populate](users_ldap_populate/) | 16.0.1.0.0 | [![joao-p-marques](https://github.com/joao-p-marques.png?size=30px)](https://github.com/joao-p-marques) | LDAP Populate + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/server-env&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/server-env/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-env/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/server-env/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-env/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/server-env/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/server-env) +[![Translation Status](https://translation.odoo-community.org/widgets/server-env-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/server-env-16-0/?utm_source=widget) + + + +# server-env + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[data_encryption](data_encryption/) | 16.0.1.0.1 | | Store accounts and credentials encrypted by environment +[mail_environment](mail_environment/) | 16.0.1.0.1 | | Configure mail servers with server_environment_files +[server_environment](server_environment/) | 16.0.1.0.3 | | move some configurations out of the database +[server_environment_data_encryption](server_environment_data_encryption/) | 16.0.1.0.0 | | Server Environment Data Encryption +[server_environment_ir_config_parameter](server_environment_ir_config_parameter/) | 16.0.1.1.0 | | Override System Parameters from server environment file + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/server-backend&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/server-backend/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-backend/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/server-backend/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-backend/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/server-backend/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/server-backend) +[![Translation Status](https://translation.odoo-community.org/widgets/server-backend-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/server-backend-16-0/?utm_source=widget) + + + +# server-backend + +Mainly base modules used by others + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_external_dbsource](base_external_dbsource/) | 16.0.1.0.1 | | External Database Sources +[base_external_dbsource_mssql](base_external_dbsource_mssql/) | 16.0.1.0.1 | [![anddago78](https://github.com/anddago78.png?size=30px)](https://github.com/anddago78) | External Database Source - MSSQL +[base_external_dbsource_sqlite](base_external_dbsource_sqlite/) | 16.0.1.0.1 | [![anddago78](https://github.com/anddago78.png?size=30px)](https://github.com/anddago78) | External Database Source - SQLite +[base_external_system](base_external_system/) | 16.0.1.0.0 | | Data models allowing for connection to external systems. +[base_global_discount](base_global_discount/) | 16.0.1.0.0 | | Base Global Discount +[base_import_match](base_import_match/) | 16.0.1.0.0 | | Try to avoid duplicates before importing +[base_portal_type](base_portal_type/) | 16.0.1.0.0 | [![hbrunn](https://github.com/hbrunn.png?size=30px)](https://github.com/hbrunn) | Base module to allow different types of portals +[base_user_role](base_user_role/) | 16.0.1.2.2 | [![sebalix](https://github.com/sebalix.png?size=30px)](https://github.com/sebalix) [![jcdrubay](https://github.com/jcdrubay.png?size=30px)](https://github.com/jcdrubay) [![novawish](https://github.com/novawish.png?size=30px)](https://github.com/novawish) | User roles +[base_user_role_company](base_user_role_company/) | 16.0.1.1.0 | | User roles by company +[base_user_role_history](base_user_role_history/) | 16.0.1.0.0 | [![ThomasBinsfeld](https://github.com/ThomasBinsfeld.png?size=30px)](https://github.com/ThomasBinsfeld) | This module allows to track the changes on users roles. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/server-brand&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/server-brand/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-brand/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/server-brand/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-brand/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/server-brand/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/server-brand) +[![Translation Status](https://translation.odoo-community.org/widgets/server-brand-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/server-brand-16-0/?utm_source=widget) + + + +# Tools for removing Odoo branding + +Modules to help remove Odoo branding and advertising. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[disable_odoo_online](disable_odoo_online/) | 16.0.1.0.0 | | Remove odoo.com Bindings +[hr_expense_remove_mobile_link](hr_expense_remove_mobile_link/) | 16.0.1.0.0 | | Remove Odoo Enterprise mobile app download links +[portal_odoo_debranding](portal_odoo_debranding/) | 16.0.1.0.0 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Remove Odoo Branding from Website +[remove_odoo_enterprise](remove_odoo_enterprise/) | 16.0.2.0.1 | | Remove enterprise modules and setting items + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/server-ux&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/server-ux/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-ux/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/server-ux/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/server-ux/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/server-ux/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/server-ux) +[![Translation Status](https://translation.odoo-community.org/widgets/server-ux-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/server-ux-16-0/?utm_source=widget) + + + +# server-ux + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[barcode_action](barcode_action/) | 16.0.1.0.0 | | Allows to use barcodes as a launcher +[base_archive_security](base_archive_security/) | 16.0.1.0.1 | [![imlopes](https://github.com/imlopes.png?size=30px)](https://github.com/imlopes) [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Controls who can archive or unarchive records +[base_binary_url_import](base_binary_url_import/) | 16.0.1.0.0 | | Wizard to import binary files from URL on existing records +[base_cancel_confirm](base_cancel_confirm/) | 16.0.1.0.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Base Cancel Confirm +[base_custom_filter](base_custom_filter/) | 16.0.1.1.0 | [![AshishHirapara](https://github.com/AshishHirapara.png?size=30px)](https://github.com/AshishHirapara) [![ForgeFlow](https://github.com/ForgeFlow.png?size=30px)](https://github.com/ForgeFlow) | Add custom filters in standard filters and group by dropdowns +[base_export_manager](base_export_manager/) | 16.0.1.0.0 | | Manage model export profiles +[base_import_security_group](base_import_security_group/) | 16.0.1.0.0 | | Group-based permissions for importing CSV files +[base_menu_visibility_restriction](base_menu_visibility_restriction/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Restrict (with groups) menu visibilty +[base_optional_quick_create](base_optional_quick_create/) | 16.0.1.0.0 | | Avoid "quick create" on m2o fields, on a "by model" basis +[base_revision](base_revision/) | 16.0.1.0.2 | | Keep track of revised document +[base_search_custom_field_filter](base_search_custom_field_filter/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Add custom filters for fields via UI +[base_substate](base_substate/) | 16.0.1.0.0 | | Base Sub State +[base_technical_features](base_technical_features/) | 16.0.1.0.0 | | Access to technical features without activating debug mode +[base_tier_validation](base_tier_validation/) | 16.0.1.4.1 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Implement a validation process based on tiers. +[base_tier_validation_definition_server_action](base_tier_validation_definition_server_action/) | 16.0.1.0.0 | | Server action for Base tier validation +[base_tier_validation_formula](base_tier_validation_formula/) | 16.0.1.0.2 | | Formulas for Base tier validation +[base_tier_validation_forward](base_tier_validation_forward/) | 16.0.1.1.2 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Forward option for base tiers +[base_tier_validation_server_action](base_tier_validation_server_action/) | 16.0.1.0.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Add option to call server action when a tier is validated +[base_tier_validation_waiting](base_tier_validation_waiting/) | 16.0.1.0.0 | | Base Tier Validation Extension to add waiting status +[base_user_locale](base_user_locale/) | 16.0.1.1.0 | | User Locale Settings +[date_range](date_range/) | 16.0.1.0.9 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Manage all kind of date range +[date_range_account](date_range_account/) | 16.0.1.0.1 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Add Date Range menu entry in Invoicing app +[filter_multi_user](filter_multi_user/) | 16.0.1.0.1 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | Allows to share user-defined filters filters among several users. +[multi_step_wizard](multi_step_wizard/) | 16.0.1.0.0 | | Multi-Steps Wizards +[sequence_reset_period](sequence_reset_period/) | 16.0.1.0.0 | | Auto-generate yearly/monthly/weekly/daily sequence period ranges +[server_action_mass_edit](server_action_mass_edit/) | 16.0.2.0.3 | | Mass Editing +[test_base_binary_url_import](test_base_binary_url_import/) | 16.0.1.0.1 | | Unittests for Base Binary URL Import module +[user_all_groups](user_all_groups/) | 16.0.1.0.1 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Automatically add admin user to all the groups + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/community-data-files&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/community-data-files/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/community-data-files/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/community-data-files/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/community-data-files/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/community-data-files/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/community-data-files) +[![Translation Status](https://translation.odoo-community.org/widgets/community-data-files-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/community-data-files-16-0/?utm_source=widget) + + + +# community-data-files + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[account_payment_unece](account_payment_unece/) | 16.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | UNECE nomenclature for the payment methods +[account_tax_unece](account_tax_unece/) | 16.0.1.3.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | UNECE nomenclature for taxes +[base_bank_from_iban](base_bank_from_iban/) | 16.0.2.0.0 | | Bank from IBAN +[base_currency_iso_4217](base_currency_iso_4217/) | 16.0.1.0.0 | | Adds numeric code and full name to currencies, following the ISO 4217 specification +[base_iso3166](base_iso3166/) | 16.0.1.0.0 | | ISO 3166 +[base_unece](base_unece/) | 16.0.1.1.0 | [![astirpe](https://github.com/astirpe.png?size=30px)](https://github.com/astirpe) [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Base module for UNECE code lists +[company_sanitary_registry](company_sanitary_registry/) | 16.0.1.0.0 | | Sanitary Registry +[product_fao_fishing](product_fao_fishing/) | 16.0.1.0.1 | | Set fishing areas and capture technology +[uom_unece](uom_unece/) | 16.0.1.1.0 | [![astirpe](https://github.com/astirpe.png?size=30px)](https://github.com/astirpe) [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | UNECE nomenclature for the units of measure + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/webhook&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/webhook/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/webhook/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/webhook/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/webhook/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/webhook/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/webhook) +[![Translation Status](https://translation.odoo-community.org/widgets/webhook-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/webhook-16-0/?utm_source=widget) + + + +# webhook + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/interface-github&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/interface-github/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/interface-github/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/interface-github/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/interface-github/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/interface-github/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/interface-github) +[![Translation Status](https://translation.odoo-community.org/widgets/interface-github-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/interface-github-16-0/?utm_source=widget) + + + +# interface-github + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/iot&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/iot/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/iot/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/iot/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/iot/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/iot/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/iot) +[![Translation Status](https://translation.odoo-community.org/widgets/iot-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/iot-16-0/?utm_source=widget) + + + +# OCA IOT modules + +This project aims to deal with modules related to IOT + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[iot_input_oca](iot_input_oca/) | 16.0.1.0.0 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | IoT Input module +[iot_oca](iot_oca/) | 16.0.1.0.0 | | IoT base module +[iot_output_oca](iot_output_oca/) | 16.0.1.0.0 | | IoT allow multiple outputs +[iot_template_oca](iot_template_oca/) | 16.0.1.0.0 | | IoT module for managing templates + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/rest-framework&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/rest-framework/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/rest-framework/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/rest-framework/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/rest-framework/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/rest-framework/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/rest-framework) +[![Translation Status](https://translation.odoo-community.org/widgets/rest-framework-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/rest-framework-16-0/?utm_source=widget) + + + +# Rest Frameworks + +This repository has nice modules to interact with Odoo using JSON and HTTP requests. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_rest](base_rest/) | 16.0.1.0.2 | | Develop your own high level REST APIs for Odoo thanks to this addon. +[base_rest_auth_api_key](base_rest_auth_api_key/) | 16.0.1.0.0 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Base Rest: Add support for the auth_api_key security policy into the openapi documentation +[base_rest_datamodel](base_rest_datamodel/) | 16.0.1.0.0 | | Datamodel binding for base_rest +[base_rest_demo](base_rest_demo/) | 16.0.2.0.2 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Demo addon for Base REST +[base_rest_pydantic](base_rest_pydantic/) | 16.0.2.0.1 | | Pydantic binding for base_rest +[datamodel](datamodel/) | 16.0.1.0.1 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | This addon allows you to define simple data models supporting serialization/deserialization +[extendable](extendable/) | 16.0.1.0.1 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Extendable classes registry loader for Odoo +[extendable_fastapi](extendable_fastapi/) | 16.0.2.1.1 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Allows the use of extendable into fastapi apps +[fastapi](fastapi/) | 16.0.1.2.6 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Odoo FastAPI endpoint +[fastapi_auth_jwt](fastapi_auth_jwt/) | 16.0.1.0.3 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | JWT bearer token authentication for FastAPI. +[fastapi_auth_jwt_demo](fastapi_auth_jwt_demo/) | 16.0.2.0.1 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | Test/demo module for fastapi_auth_jwt. +[graphql_base](graphql_base/) | 16.0.1.0.1 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | Base GraphQL/GraphiQL controller +[graphql_demo](graphql_demo/) | 16.0.1.0.1 | [![sbidoul](https://github.com/sbidoul.png?size=30px)](https://github.com/sbidoul) | GraphQL Demo +[pydantic](pydantic/) | 16.0.1.0.0 | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Utility addon to ease mapping between Pydantic and Odoo models +[rest_log](rest_log/) | 16.0.1.0.1 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) | Track REST API calls into DB + + +Unported addons +--------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[base_rest_auth_jwt](base_rest_auth_jwt/) | 15.0.1.1.0 (unported) | [![lmignon](https://github.com/lmignon.png?size=30px)](https://github.com/lmignon) | Base Rest: Add support for the auth_jwt security policy into the openapi documentation +[base_rest_auth_user_service](base_rest_auth_user_service/) | 15.0.1.0.1 (unported) | | Login/logout from session using a REST call +[model_serializer](model_serializer/) | 15.0.1.2.0 (unported) | [![fdegrave](https://github.com/fdegrave.png?size=30px)](https://github.com/fdegrave) | Automatically translate Odoo models into Datamodels for (de)serialization + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/role-policy&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/role-policy/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/role-policy/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/role-policy/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/role-policy/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/role-policy/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/role-policy) +[![Translation Status](https://translation.odoo-community.org/widgets/role-policy-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/role-policy-16-0/?utm_source=widget) + + + +# role-policy + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-association&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-association/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-association/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-association/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-association/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-association/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-association) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-association-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-association-16-0/?utm_source=widget) + + + +# vertical-association + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[contract_membership_delegated_partner](contract_membership_delegated_partner/) | 16.0.1.0.1 | | Set delegate membership on the contract +[membership_delegated_partner](membership_delegated_partner/) | 16.0.1.0.0 | | Delegate membership on a specific partner +[membership_extension](membership_extension/) | 16.0.2.1.0 | | Improves user experience of membership addon +[membership_variable_period](membership_variable_period/) | 16.0.1.0.1 | | Variable period for memberships +[membership_withdrawal](membership_withdrawal/) | 16.0.1.0.0 | | Log membership withdrawal reason and date of request +[website_membership_gamification](website_membership_gamification/) | 16.0.1.0.0 | | Show badges assigned to users on website +[website_membership_random_order](website_membership_random_order/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Online Members Directory - Random order + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-hotel&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-hotel/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-hotel/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-hotel/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-hotel/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-hotel/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-hotel) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-hotel-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-hotel-16-0/?utm_source=widget) + + + +# vertical-hotel + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-isp&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-isp/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-isp/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-isp/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-isp/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-isp/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-isp) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-isp-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-isp-16-0/?utm_source=widget) + + + +# vertical-isp + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-edition&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-edition/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-edition/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-edition/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-edition/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-edition/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-edition) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-edition-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-edition-16-0/?utm_source=widget) + + + +# vertical-edition + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-education&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-education/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-education/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-education/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-education/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-education/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-education) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-education-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-education-16-0/?utm_source=widget) + + + +# vertical-education + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-medical&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-medical/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-medical/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-medical/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-medical/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-medical/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-medical) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-medical-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-medical-16-0/?utm_source=widget) + + + +# vertical-medical + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-ngo&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-ngo/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-ngo/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-ngo/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-ngo/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-ngo/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-ngo) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-ngo-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-ngo-16-0/?utm_source=widget) + + + +# vertical-ngo + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-construction&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-construction/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-construction/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-construction/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-construction/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-construction/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-construction) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-construction-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-construction-16-0/?utm_source=widget) + + + +# vertical-construction + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-realestate&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-realestate/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-realestate/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-realestate/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-realestate/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-realestate/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-realestate) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-realestate-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-realestate-16-0/?utm_source=widget) + + + +# vertical-realestate + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-rental&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-rental/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-rental/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-rental/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-rental/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-rental/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-rental) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-rental-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-rental-16-0/?utm_source=widget) + + + +# vertical-rental + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/vertical-travel&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/vertical-travel/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-travel/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/vertical-travel/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/vertical-travel/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/vertical-travel/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/vertical-travel) +[![Translation Status](https://translation.odoo-community.org/widgets/vertical-travel-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/vertical-travel-16-0/?utm_source=widget) + + + +# vertical-travel + +TODO: add repo description. + + + + + +[//]: # (addons) + +This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/web/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/web/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/web/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/web/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/web/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/web) +[![Translation Status](https://translation.odoo-community.org/widgets/web-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/web-16-0/?utm_source=widget) + + + +# web + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[web_action_conditionable](web_action_conditionable/) | 16.0.1.0.0 | | web_action_conditionable +[web_advanced_search](web_advanced_search/) | 16.0.1.0.4 | [![ivantodorovich](https://github.com/ivantodorovich.png?size=30px)](https://github.com/ivantodorovich) | Easier and more powerful searching tools +[web_apply_field_style](web_apply_field_style/) | 16.0.1.0.1 | | Apply css class style to fields from a dict parameters +[web_calendar_slot_duration](web_calendar_slot_duration/) | 16.0.1.0.1 | [![Yajo](https://github.com/Yajo.png?size=30px)](https://github.com/Yajo) | Customizable calendar slot durations +[web_chatter_position](web_chatter_position/) | 16.0.1.0.2 | | Add an option to change the chatter position +[web_company_color](web_company_color/) | 16.0.1.2.0 | | Web Company Color +[web_dark_mode](web_dark_mode/) | 16.0.1.0.2 | | Enabled Dark Mode for the Odoo Backend +[web_dashboard_tile](web_dashboard_tile/) | 16.0.1.0.2 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Add Overview Dashboards with Tiles +[web_dialog_size](web_dialog_size/) | 16.0.1.0.0 | | A module that lets the user expand a dialog box to the full screen width. +[web_domain_field](web_domain_field/) | 16.0.1.0.1 | | Use computed field as domain +[web_environment_ribbon](web_environment_ribbon/) | 16.0.1.0.0 | | Web Environment Ribbon +[web_field_numeric_formatting](web_field_numeric_formatting/) | 16.0.1.0.0 | | Allow to render float and integer fields without thousands separator +[web_group_expand](web_group_expand/) | 16.0.1.0.0 | | Group Expand Buttons +[web_help](web_help/) | 16.0.2.0.0 | | Help Framework +[web_ir_actions_act_multi](web_ir_actions_act_multi/) | 16.0.1.0.0 | | Enables triggering of more than one action on ActionManager +[web_ir_actions_act_window_message](web_ir_actions_act_window_message/) | 16.0.1.0.1 | | Show a message box to users +[web_ir_actions_act_window_page](web_ir_actions_act_window_page/) | 16.0.1.0.0 | | Allows a developer to trigger a pager to show the previous or next next record in the form view +[web_listview_range_select](web_listview_range_select/) | 16.0.1.0.0 | | Enables selecting a range of records using the shift key +[web_m2x_options](web_m2x_options/) | 16.0.1.1.2 | | web_m2x_options +[web_no_bubble](web_no_bubble/) | 16.0.1.0.0 | | Remove the bubbles from the web interface +[web_notify](web_notify/) | 16.0.1.0.1 | | Send notification messages to user +[web_notify_channel_message](web_notify_channel_message/) | 16.0.1.0.0 | | Send an instant notification to channel users when a new message is posted +[web_refresher](web_refresher/) | 16.0.2.0.1 | | Web Refresher +[web_remember_tree_column_width](web_remember_tree_column_width/) | 16.0.1.0.1 | [![frahikLV](https://github.com/frahikLV.png?size=30px)](https://github.com/frahikLV) [![luisg123v](https://github.com/luisg123v.png?size=30px)](https://github.com/luisg123v) [![cuongnmtm](https://github.com/cuongnmtm.png?size=30px)](https://github.com/cuongnmtm) | Remember the tree columns' widths across sessions. +[web_responsive](web_responsive/) | 16.0.1.2.4 | [![Tardo](https://github.com/Tardo.png?size=30px)](https://github.com/Tardo) [![SplashS](https://github.com/SplashS.png?size=30px)](https://github.com/SplashS) | Responsive web client, community-supported +[web_save_discard_button](web_save_discard_button/) | 16.0.1.0.2 | [![synconics](https://github.com/synconics.png?size=30px)](https://github.com/synconics) | Save & Discard Buttons +[web_search_with_and](web_search_with_and/) | 16.0.1.0.0 | | Use AND conditions on omnibar search +[web_select_all_companies](web_select_all_companies/) | 16.0.1.0.1 | | Allows you to select all companies in one click. +[web_sheet_full_width](web_sheet_full_width/) | 16.0.1.0.0 | | Use the whole available screen width when displaying sheets +[web_theme_classic](web_theme_classic/) | 16.0.1.0.2 | [![legalsylvain](https://github.com/legalsylvain.png?size=30px)](https://github.com/legalsylvain) | Contrasted style on fields to improve the UI. +[web_timeline](web_timeline/) | 16.0.1.0.3 | [![tarteo](https://github.com/tarteo.png?size=30px)](https://github.com/tarteo) | Interactive visualization chart to show events in time +[web_touchscreen](web_touchscreen/) | 16.0.1.0.1 | [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) | UX improvements for touch screens +[web_tree_duplicate](web_tree_duplicate/) | 16.0.1.0.0 | [![tarteo](https://github.com/tarteo.png?size=30px)](https://github.com/tarteo) | Duplicate records directly from the tree view. +[web_tree_many2one_clickable](web_tree_many2one_clickable/) | 16.0.1.0.0 | | Open the linked resource when clicking on their name +[web_widget_bokeh_chart](web_widget_bokeh_chart/) | 16.0.1.1.0 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) [![ChrisOForgeFlow](https://github.com/ChrisOForgeFlow.png?size=30px)](https://github.com/ChrisOForgeFlow) | This widget allows to display charts using Bokeh library. +[web_widget_datepicker_fulloptions](web_widget_datepicker_fulloptions/) | 16.0.1.0.0 | | Web Widget DatePicker Full Options +[web_widget_dropdown_dynamic](web_widget_dropdown_dynamic/) | 16.0.1.0.0 | | This module adds support for dynamic dropdown widget +[web_widget_mpld3_chart](web_widget_mpld3_chart/) | 16.0.1.0.0 | [![JordiBForgeFlow](https://github.com/JordiBForgeFlow.png?size=30px)](https://github.com/JordiBForgeFlow) [![ChrisOForgeFlow](https://github.com/ChrisOForgeFlow.png?size=30px)](https://github.com/ChrisOForgeFlow) | This widget allows to display charts using MPLD3 library. +[web_widget_numeric_step](web_widget_numeric_step/) | 16.0.1.1.3 | [![rafaelbn](https://github.com/rafaelbn.png?size=30px)](https://github.com/rafaelbn) [![yajo](https://github.com/yajo.png?size=30px)](https://github.com/yajo) | Web Widget Numeric Step +[web_widget_open_tab](web_widget_open_tab/) | 16.0.2.0.0 | | Allow to open record from trees on new tab from tree views +[web_widget_plotly_chart](web_widget_plotly_chart/) | 16.0.1.0.0 | [![robyf70](https://github.com/robyf70.png?size=30px)](https://github.com/robyf70) | Allow to draw plotly charts. +[web_widget_x2many_2d_matrix](web_widget_x2many_2d_matrix/) | 16.0.1.1.3 | [![ChrisOForgeFlow](https://github.com/ChrisOForgeFlow.png?size=30px)](https://github.com/ChrisOForgeFlow) | Show list fields as a matrix + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/website&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/website/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/website/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/website/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/website/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/website/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/website) +[![Translation Status](https://translation.odoo-community.org/widgets/website-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/website-16-0/?utm_source=widget) + + + +# website + +TODO: add repo description. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[website_cookiebot](website_cookiebot/) | 16.0.1.0.0 | | Ask for cookies consent connecting with Cookiebot +[website_cookiefirst](website_cookiefirst/) | 16.0.1.0.0 | | Cookiefirst integration +[website_crm_privacy_policy](website_crm_privacy_policy/) | 16.0.2.0.0 | | Website CRM privacy policy +[website_crm_quick_answer](website_crm_quick_answer/) | 16.0.1.0.0 | | Add an automatic answer for contacts asking for info +[website_form_require_legal](website_form_require_legal/) | 16.0.1.1.0 | | Add possibility to require confirm legal terms. +[website_forum_subscription](website_forum_subscription/) | 16.0.1.0.0 | | Adds a button to allow subscription from the website +[website_google_tag_manager](website_google_tag_manager/) | 16.0.1.0.0 | | Add support for Google Tag Manager +[website_legal_page](website_legal_page/) | 16.0.1.1.0 | | Website Legal Page +[website_odoo_debranding](website_odoo_debranding/) | 16.0.1.0.0 | | Remove Odoo Branding from Website +[website_require_login](website_require_login/) | 16.0.1.0.0 | | Website Login Required +[website_whatsapp](website_whatsapp/) | 16.0.1.0.0 | [![ioans73](https://github.com/ioans73.png?size=30px)](https://github.com/ioans73) | Whatsapp integration + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/website-cms&target_branch=16.0) +[![Pre-commit Status](https://github.com/OCA/website-cms/actions/workflows/pre-commit.yml/badge.svg?branch=16.0)](https://github.com/OCA/website-cms/actions/workflows/pre-commit.yml?query=branch%3A16.0) +[![Build Status](https://github.com/OCA/website-cms/actions/workflows/test.yml/badge.svg?branch=16.0)](https://github.com/OCA/website-cms/actions/workflows/test.yml?query=branch%3A16.0) +[![codecov](https://codecov.io/gh/OCA/website-cms/branch/16.0/graph/badge.svg)](https://codecov.io/gh/OCA/website-cms) +[![Translation Status](https://translation.odoo-community.org/widgets/website-cms-16-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/website-cms-16-0/?utm_source=widget) + + + +# website-cms + +CMS features for Odoo portal and websites. Ease creation of forms, status message, actions and more. + + + + + +[//]: # (addons) + +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[cms_form](cms_form/) | 16.0.1.1.0 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) | Basic content type form +[cms_info](cms_info/) | 16.0.1.2.0 | | A set of basic information needed to expose any kind of record in your CMS. +[cms_status_message](cms_status_message/) | 16.0.1.0.1 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) | Basic status messages for your CMS system + + +Unported addons +--------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[cms_form_example](cms_form_example/) | 13.0.1.0.1 (unported) | | Basic content type form example + +[//]: # (end addons) + + + +## Licenses + +This repository is licensed under [AGPL-3.0](LICENSE). + +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) +policy. Consult each module's `__manifest__.py` file, which contains a `license` key +that explains its license. + +---- +OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit +organization whose mission is to support the collaborative development of Odoo features +and promote its widespread use. + +---- +---- + diff --git a/README-merged.tmp b/README-merged.tmp index b371e0bb89..88b40e714d 100644 --- a/README-merged.tmp +++ b/README-merged.tmp @@ -5384,3 +5384,166 @@ # From [https://github.com/OCA/web.git](https://github.com/OCA/web.git) # From [https://github.com/OCA/website.git](https://github.com/OCA/website.git) # From [https://github.com/OCA/website-cms.git](https://github.com/OCA/website-cms.git) +# From [https://github.com/OCA/account-analytic.git](https://github.com/OCA/account-analytic.git) +# From [https://github.com/OCA/account-budgeting.git](https://github.com/OCA/account-budgeting.git) +# From [https://github.com/OCA/account-closing.git](https://github.com/OCA/account-closing.git) +# From [https://github.com/OCA/account-consolidation.git](https://github.com/OCA/account-consolidation.git) +# From [https://github.com/OCA/account-financial-tools.git](https://github.com/OCA/account-financial-tools.git) +# From [https://github.com/OCA/account-financial-reporting.git](https://github.com/OCA/account-financial-reporting.git) +# From [https://github.com/OCA/account-invoice-reporting.git](https://github.com/OCA/account-invoice-reporting.git) +# From [https://github.com/OCA/account-invoicing.git](https://github.com/OCA/account-invoicing.git) +# From [https://github.com/OCA/account-fiscal-rule.git](https://github.com/OCA/account-fiscal-rule.git) +# From [https://github.com/OCA/operating-unit.git](https://github.com/OCA/operating-unit.git) +# From [https://github.com/OCA/intrastat.git](https://github.com/OCA/intrastat.git) +# From [https://github.com/OCA/mis-builder.git](https://github.com/OCA/mis-builder.git) +# From [https://github.com/OCA/currency.git](https://github.com/OCA/currency.git) +# From [https://github.com/OCA/credit-control.git](https://github.com/OCA/credit-control.git) +# From [https://github.com/OCA/data-protection.git](https://github.com/OCA/data-protection.git) +# From [https://github.com/OCA/bank-payment.git](https://github.com/OCA/bank-payment.git) +# From [https://github.com/OCA/account-reconcile.git](https://github.com/OCA/account-reconcile.git) +# From [https://github.com/OCA/bank-statement-import.git](https://github.com/OCA/bank-statement-import.git) +# From [https://github.com/OCA/account-payment.git](https://github.com/OCA/account-payment.git) +# From [https://github.com/OCA/connector.git](https://github.com/OCA/connector.git) +# From [https://github.com/OCA/connector-ecommerce.git](https://github.com/OCA/connector-ecommerce.git) +# From [https://github.com/OCA/queue.git](https://github.com/OCA/queue.git) +# From [https://github.com/OCA/connector-accountedge.git](https://github.com/OCA/connector-accountedge.git) +# From [https://github.com/OCA/connector-cmis.git](https://github.com/OCA/connector-cmis.git) +# From [https://github.com/OCA/connector-infor.git](https://github.com/OCA/connector-infor.git) +# From [https://github.com/OCA/connector-lengow.git](https://github.com/OCA/connector-lengow.git) +# From [https://github.com/OCA/connector-lims.git](https://github.com/OCA/connector-lims.git) +# From [https://github.com/OCA/connector-magento.git](https://github.com/OCA/connector-magento.git) +# From [https://github.com/OCA/connector-prestashop.git](https://github.com/OCA/connector-prestashop.git) +# From [https://github.com/OCA/connector-sage.git](https://github.com/OCA/connector-sage.git) +# From [https://github.com/OCA/connector-salesforce.git](https://github.com/OCA/connector-salesforce.git) +# From [https://github.com/OCA/connector-spscommerce.git](https://github.com/OCA/connector-spscommerce.git) +# From [https://github.com/OCA/connector-woocommerce.git](https://github.com/OCA/connector-woocommerce.git) +# From [https://github.com/OCA/sale-workflow.git](https://github.com/OCA/sale-workflow.git) +# From [https://github.com/OCA/crm.git](https://github.com/OCA/crm.git) +# From [https://github.com/OCA/partner-contact.git](https://github.com/OCA/partner-contact.git) +# From [https://github.com/OCA/sale-financial.git](https://github.com/OCA/sale-financial.git) +# From [https://github.com/OCA/sale-promotion.git](https://github.com/OCA/sale-promotion.git) +# From [https://github.com/OCA/sale-reporting.git](https://github.com/OCA/sale-reporting.git) +# From [https://github.com/OCA/commission.git](https://github.com/OCA/commission.git) +# From [https://github.com/OCA/event.git](https://github.com/OCA/event.git) +# From [https://github.com/OCA/survey.git](https://github.com/OCA/survey.git) +# From [https://github.com/OCA/knowledge.git](https://github.com/OCA/knowledge.git) +# From [https://github.com/OCA/dms.git](https://github.com/OCA/dms.git) +# From [https://github.com/OCA/e-commerce.git](https://github.com/OCA/e-commerce.git) +# From [https://github.com/OCA/edi.git](https://github.com/OCA/edi.git) +# From [https://github.com/OCA/field-service.git](https://github.com/OCA/field-service.git) +# From [https://github.com/OCA/margin-analysis.git](https://github.com/OCA/margin-analysis.git) +# From [https://github.com/OCA/fleet.git](https://github.com/OCA/fleet.git) +# From [https://github.com/OCA/infrastructure-dns.git](https://github.com/OCA/infrastructure-dns.git) +# From [https://github.com/OCA/geospatial.git](https://github.com/OCA/geospatial.git) +# From [https://github.com/OCA/timesheet.git](https://github.com/OCA/timesheet.git) +# From [https://github.com/OCA/hr.git](https://github.com/OCA/hr.git) +# From [https://github.com/OCA/hr-attendance.git](https://github.com/OCA/hr-attendance.git) +# From [https://github.com/OCA/hr-expense.git](https://github.com/OCA/hr-expense.git) +# From [https://github.com/OCA/hr-holidays.git](https://github.com/OCA/hr-holidays.git) +# From [https://github.com/OCA/department.git](https://github.com/OCA/department.git) +# From [https://github.com/OCA/connector-odoo2odoo.git](https://github.com/OCA/connector-odoo2odoo.git) +# From [https://github.com/OCA/multi-company.git](https://github.com/OCA/multi-company.git) +# From [https://github.com/OCA/l10n-argentina.git](https://github.com/OCA/l10n-argentina.git) +# From [https://github.com/OCA/l10n-austria.git](https://github.com/OCA/l10n-austria.git) +# From [https://github.com/OCA/l10n-belarus.git](https://github.com/OCA/l10n-belarus.git) +# From [https://github.com/OCA/l10n-belgium.git](https://github.com/OCA/l10n-belgium.git) +# From [https://github.com/OCA/l10n-cambodia.git](https://github.com/OCA/l10n-cambodia.git) +# From [https://github.com/OCA/l10n-canada.git](https://github.com/OCA/l10n-canada.git) +# From [https://github.com/OCA/l10n-chile.git](https://github.com/OCA/l10n-chile.git) +# From [https://github.com/OCA/l10n-china.git](https://github.com/OCA/l10n-china.git) +# From [https://github.com/OCA/l10n-colombia.git](https://github.com/OCA/l10n-colombia.git) +# From [https://github.com/OCA/l10n-costa-rica.git](https://github.com/OCA/l10n-costa-rica.git) +# From [https://github.com/OCA/l10n-croatia.git](https://github.com/OCA/l10n-croatia.git) +# From [https://github.com/OCA/l10n-ecuador.git](https://github.com/OCA/l10n-ecuador.git) +# From [https://github.com/OCA/l10n-estonia.git](https://github.com/OCA/l10n-estonia.git) +# From [https://github.com/OCA/l10n-ethiopia.git](https://github.com/OCA/l10n-ethiopia.git) +# From [https://github.com/OCA/l10n-finland.git](https://github.com/OCA/l10n-finland.git) +# From [https://github.com/OCA/l10n-france.git](https://github.com/OCA/l10n-france.git) +# From [https://github.com/OCA/l10n-germany.git](https://github.com/OCA/l10n-germany.git) +# From [https://github.com/OCA/l10n-greece.git](https://github.com/OCA/l10n-greece.git) +# From [https://github.com/OCA/l10n-india.git](https://github.com/OCA/l10n-india.git) +# From [https://github.com/OCA/l10n-indonesia.git](https://github.com/OCA/l10n-indonesia.git) +# From [https://github.com/OCA/l10n-iran.git](https://github.com/OCA/l10n-iran.git) +# From [https://github.com/OCA/l10n-ireland.git](https://github.com/OCA/l10n-ireland.git) +# From [https://github.com/OCA/l10n-italy.git](https://github.com/OCA/l10n-italy.git) +# From [https://github.com/OCA/l10n-japan.git](https://github.com/OCA/l10n-japan.git) +# From [https://github.com/OCA/l10n-luxemburg.git](https://github.com/OCA/l10n-luxemburg.git) +# From [https://github.com/OCA/l10n-macedonia.git](https://github.com/OCA/l10n-macedonia.git) +# From [https://github.com/OCA/l10n-mexico.git](https://github.com/OCA/l10n-mexico.git) +# From [https://github.com/OCA/l10n-morocco.git](https://github.com/OCA/l10n-morocco.git) +# From [https://github.com/OCA/l10n-netherlands.git](https://github.com/OCA/l10n-netherlands.git) +# From [https://github.com/OCA/l10n-norway.git](https://github.com/OCA/l10n-norway.git) +# From [https://github.com/OCA/l10n-peru.git](https://github.com/OCA/l10n-peru.git) +# From [https://github.com/OCA/l10n-poland.git](https://github.com/OCA/l10n-poland.git) +# From [https://github.com/OCA/l10n-romania.git](https://github.com/OCA/l10n-romania.git) +# From [https://github.com/OCA/l10n-russia.git](https://github.com/OCA/l10n-russia.git) +# From [https://github.com/OCA/l10n-slovenia.git](https://github.com/OCA/l10n-slovenia.git) +# From [https://github.com/OCA/l10n-spain.git](https://github.com/OCA/l10n-spain.git) +# From [https://github.com/OCA/l10n-switzerland.git](https://github.com/OCA/l10n-switzerland.git) +# From [https://github.com/OCA/l10n-taiwan.git](https://github.com/OCA/l10n-taiwan.git) +# From [https://github.com/OCA/l10n-thailand.git](https://github.com/OCA/l10n-thailand.git) +# From [https://github.com/OCA/l10n-turkey.git](https://github.com/OCA/l10n-turkey.git) +# From [https://github.com/OCA/l10n-united-kingdom.git](https://github.com/OCA/l10n-united-kingdom.git) +# From [https://github.com/OCA/l10n-uruguay.git](https://github.com/OCA/l10n-uruguay.git) +# From [https://github.com/OCA/l10n-usa.git](https://github.com/OCA/l10n-usa.git) +# From [https://github.com/OCA/l10n-venezuela.git](https://github.com/OCA/l10n-venezuela.git) +# From [https://github.com/OCA/l10n-vietnam.git](https://github.com/OCA/l10n-vietnam.git) +# From [https://github.com/OCA/carrier-delivery.git](https://github.com/OCA/carrier-delivery.git) +# From [https://github.com/OCA/stock-logistics-barcode.git](https://github.com/OCA/stock-logistics-barcode.git) +# From [https://github.com/OCA/stock-logistics-workflow.git](https://github.com/OCA/stock-logistics-workflow.git) +# From [https://github.com/OCA/stock-logistics-tracking.git](https://github.com/OCA/stock-logistics-tracking.git) +# From [https://github.com/OCA/stock-logistics-warehouse.git](https://github.com/OCA/stock-logistics-warehouse.git) +# From [https://github.com/OCA/stock-logistics-reporting.git](https://github.com/OCA/stock-logistics-reporting.git) +# From [https://github.com/OCA/rma.git](https://github.com/OCA/rma.git) +# From [https://github.com/OCA/ddmrp.git](https://github.com/OCA/ddmrp.git) +# From [https://github.com/OCA/wms.git](https://github.com/OCA/wms.git) +# From [https://github.com/OCA/manufacture.git](https://github.com/OCA/manufacture.git) +# From [https://github.com/OCA/manufacture-reporting.git](https://github.com/OCA/manufacture-reporting.git) +# From [https://github.com/OCA/management-system.git](https://github.com/OCA/management-system.git) +# From [https://github.com/OCA/pms.git](https://github.com/OCA/pms.git) +# From [https://github.com/OCA/purchase-workflow.git](https://github.com/OCA/purchase-workflow.git) +# From [https://github.com/OCA/purchase-reporting.git](https://github.com/OCA/purchase-reporting.git) +# From [https://github.com/OCA/product-attribute.git](https://github.com/OCA/product-attribute.git) +# From [https://github.com/OCA/product-kitting.git](https://github.com/OCA/product-kitting.git) +# From [https://github.com/OCA/product-variant.git](https://github.com/OCA/product-variant.git) +# From [https://github.com/OCA/product-pack.git](https://github.com/OCA/product-pack.git) +# From [https://github.com/OCA/project-reporting.git](https://github.com/OCA/project-reporting.git) +# From [https://github.com/OCA/project-service.git](https://github.com/OCA/project-service.git) +# From [https://github.com/OCA/project-agile.git](https://github.com/OCA/project-agile.git) +# From [https://github.com/OCA/contract.git](https://github.com/OCA/contract.git) +# From [https://github.com/OCA/program.git](https://github.com/OCA/program.git) +# From [https://github.com/OCA/business-requirement.git](https://github.com/OCA/business-requirement.git) +# From [https://github.com/OCA/connector-redmine.git](https://github.com/OCA/connector-redmine.git) +# From [https://github.com/OCA/connector-jira.git](https://github.com/OCA/connector-jira.git) +# From [https://github.com/OCA/social.git](https://github.com/OCA/social.git) +# From [https://github.com/OCA/storage.git](https://github.com/OCA/storage.git) +# From [https://github.com/OCA/search-engine.git](https://github.com/OCA/search-engine.git) +# From [https://github.com/OCA/reporting-engine.git](https://github.com/OCA/reporting-engine.git) +# From [https://github.com/OCA/report-print-send.git](https://github.com/OCA/report-print-send.git) +# From [https://github.com/OCA/webkit-tools.git](https://github.com/OCA/webkit-tools.git) +# From [https://github.com/OCA/server-tools.git](https://github.com/OCA/server-tools.git) +# From [https://github.com/OCA/server-auth.git](https://github.com/OCA/server-auth.git) +# From [https://github.com/OCA/server-env.git](https://github.com/OCA/server-env.git) +# From [https://github.com/OCA/server-backend.git](https://github.com/OCA/server-backend.git) +# From [https://github.com/OCA/server-brand.git](https://github.com/OCA/server-brand.git) +# From [https://github.com/OCA/server-ux.git](https://github.com/OCA/server-ux.git) +# From [https://github.com/OCA/community-data-files.git](https://github.com/OCA/community-data-files.git) +# From [https://github.com/OCA/webhook.git](https://github.com/OCA/webhook.git) +# From [https://github.com/OCA/interface-github.git](https://github.com/OCA/interface-github.git) +# From [https://github.com/OCA/iot.git](https://github.com/OCA/iot.git) +# From [https://github.com/OCA/rest-framework.git](https://github.com/OCA/rest-framework.git) +# From [https://github.com/OCA/role-policy.git](https://github.com/OCA/role-policy.git) +# From [https://github.com/OCA/vertical-association.git](https://github.com/OCA/vertical-association.git) +# From [https://github.com/OCA/vertical-hotel.git](https://github.com/OCA/vertical-hotel.git) +# From [https://github.com/OCA/vertical-isp.git](https://github.com/OCA/vertical-isp.git) +# From [https://github.com/OCA/vertical-edition.git](https://github.com/OCA/vertical-edition.git) +# From [https://github.com/OCA/vertical-education.git](https://github.com/OCA/vertical-education.git) +# From [https://github.com/OCA/vertical-medical.git](https://github.com/OCA/vertical-medical.git) +# From [https://github.com/OCA/vertical-ngo.git](https://github.com/OCA/vertical-ngo.git) +# From [https://github.com/OCA/vertical-construction.git](https://github.com/OCA/vertical-construction.git) +# From [https://github.com/OCA/vertical-realestate.git](https://github.com/OCA/vertical-realestate.git) +# From [https://github.com/OCA/vertical-rental.git](https://github.com/OCA/vertical-rental.git) +# From [https://github.com/OCA/vertical-travel.git](https://github.com/OCA/vertical-travel.git) +# From [https://github.com/OCA/web.git](https://github.com/OCA/web.git) +# From [https://github.com/OCA/website.git](https://github.com/OCA/website.git) +# From [https://github.com/OCA/website-cms.git](https://github.com/OCA/website-cms.git) diff --git a/README.md b/README.md index 831859c923..11316fc980 100644 --- a/README.md +++ b/README.md @@ -46,16 +46,11 @@ Date: Sun Dec 24 16:34:39 2023 +0000 ## account-closing From [https://github.com/OCA/account-closing.git](https://github.com/OCA/account-closing.git) -commit d90720075d946af2fed56eb9e1c8fc7b2f25cd2c +commit 909328b1090a5d1165a28b42c37f316b7985e348 Author: mymage -Date: Tue Feb 6 13:38:45 2024 +0000 +Date: Wed Feb 21 08:32:21 2024 +0000 - Translated using Weblate (Italian) - - Currently translated at 85.0% (114 of 134 strings) - - Translation: account-closing-16.0/account-closing-16.0-account_cutoff_base - Translate-URL: https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_base/it/ + Added translation using Weblate (Italian) ## account-consolidation @@ -111,18 +106,23 @@ Date: Thu Feb 8 08:12:44 2024 +0000 ## account-invoicing From [https://github.com/OCA/account-invoicing.git](https://github.com/OCA/account-invoicing.git) -commit 1dd767c82d89cfe4235f99e1b75905949fc9a5ba -Author: OCA-git-bot -Date: Sat Feb 17 17:47:09 2024 +0000 +commit 239f5bb9a4f8d02d4b59f1f13de812b22ea59778 +Author: mymage +Date: Wed Feb 21 15:27:45 2024 +0000 - [BOT] post-merge updates + Translated using Weblate (Italian) + + Currently translated at 100.0% (1 of 1 strings) + + Translation: account-invoicing-16.0/account-invoicing-16.0-account_invoice_payment_term_date_due + Translate-URL: https://translation.odoo-community.org/projects/account-invoicing-16-0/account-invoicing-16-0-account_invoice_payment_term_date_due/it/ ## account-fiscal-rule From [https://github.com/OCA/account-fiscal-rule.git](https://github.com/OCA/account-fiscal-rule.git) -commit 5e36f5017808365a05b880994f8d08cbeaad47a5 +commit 90b6061f021b41db43e335045a1c45cfdfe16f0d Author: OCA-git-bot -Date: Thu Dec 28 21:18:59 2023 +0000 +Date: Tue Feb 20 13:42:59 2024 +0000 [BOT] post-merge updates @@ -157,11 +157,16 @@ Date: Thu Feb 15 13:24:40 2024 +0000 ## mis-builder From [https://github.com/OCA/mis-builder.git](https://github.com/OCA/mis-builder.git) -commit 3aea4235697bac0f74d446e610e2b934b0994e06 -Author: OCA-git-bot -Date: Fri Feb 9 12:24:30 2024 +0000 +commit d97a025fcfc5aebc8d65b7754bd3642c21e69d9f +Author: mymage +Date: Mon Feb 19 07:54:09 2024 +0000 - [BOT] post-merge updates + Translated using Weblate (Italian) + + Currently translated at 100.0% (24 of 24 strings) + + Translation: mis-builder-16.0/mis-builder-16.0-mis_builder_demo + Translate-URL: https://translation.odoo-community.org/projects/mis-builder-16-0/mis-builder-16-0-mis_builder_demo/it/ ## currency @@ -180,11 +185,16 @@ Date: Tue Feb 13 11:22:00 2024 +0000 ## credit-control From [https://github.com/OCA/credit-control.git](https://github.com/OCA/credit-control.git) -commit 2249293898d663a449d3a9de09c78f0aac006735 -Author: OCA-git-bot -Date: Sat Jan 27 19:53:27 2024 +0000 +commit 28365672d0e1c75baa1d991f43107cc80c0cf897 +Author: Weblate +Date: Wed Feb 21 00:19:19 2024 +0000 - [BOT] post-merge updates + Update translation files + + Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. + + Translation: credit-control-16.0/credit-control-16.0-partner_risk_insurance + Translate-URL: https://translation.odoo-community.org/projects/credit-control-16-0/credit-control-16-0-partner_risk_insurance/ ## data-protection @@ -203,30 +213,30 @@ Date: Mon Jan 22 10:34:46 2024 +0000 ## bank-payment From [https://github.com/OCA/bank-payment.git](https://github.com/OCA/bank-payment.git) -commit 8c177860a490dae3a01075b224c970ba460d388c -Author: mymage -Date: Fri Feb 16 15:42:14 2024 +0000 +commit ab584e0765b0ef1d7f10d76b9cae88cb1310c6f7 +Author: Weblate +Date: Sun Feb 18 14:01:21 2024 +0000 - Translated using Weblate (Italian) + Update translation files - Currently translated at 30.8% (54 of 175 strings) + Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. - Translation: bank-payment-16.0/bank-payment-16.0-account_banking_pain_base - Translate-URL: https://translation.odoo-community.org/projects/bank-payment-16-0/bank-payment-16-0-account_banking_pain_base/it/ + Translation: bank-payment-16.0/bank-payment-16.0-account_payment_order + Translate-URL: https://translation.odoo-community.org/projects/bank-payment-16-0/bank-payment-16-0-account_payment_order/ ## account-reconcile From [https://github.com/OCA/account-reconcile.git](https://github.com/OCA/account-reconcile.git) -commit 4eb5c7a92b59d6dc856e25d3cf90450c569f12f0 -Author: Ivorra78 -Date: Thu Feb 8 17:53:48 2024 +0000 +commit 224446f1af2a5846a4f4b7528676261df9e5c488 +Author: mymage +Date: Wed Feb 21 15:00:32 2024 +0000 - Translated using Weblate (Spanish) + Translated using Weblate (Italian) - Currently translated at 100.0% (101 of 101 strings) + Currently translated at 100.0% (12 of 12 strings) - Translation: account-reconcile-16.0/account-reconcile-16.0-account_reconcile_oca - Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-16-0/account-reconcile-16-0-account_reconcile_oca/es/ + Translation: account-reconcile-16.0/account-reconcile-16.0-account_statement_base + Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-16-0/account-reconcile-16-0-account_statement_base/it/ ## bank-statement-import @@ -245,11 +255,16 @@ Date: Thu Feb 8 17:56:05 2024 +0000 ## account-payment From [https://github.com/OCA/account-payment.git](https://github.com/OCA/account-payment.git) -commit 0fe5098688166a85a19afa5c1399c7e610dcc294 -Author: OCA-git-bot -Date: Fri Dec 1 06:49:07 2023 +0000 +commit 6dfcaa6543c551e2ec479a09a23e0df2c40d8080 +Author: mymage +Date: Wed Feb 21 14:55:53 2024 +0000 - [BOT] post-merge updates + Translated using Weblate (Italian) + + Currently translated at 100.0% (6 of 6 strings) + + Translation: account-payment-16.0/account-payment-16.0-account_payment_promissory_note + Translate-URL: https://translation.odoo-community.org/projects/account-payment-16-0/account-payment-16-0-account_payment_promissory_note/it/ ## connector @@ -277,9 +292,9 @@ Date: Fri Oct 27 23:01:40 2023 +0200 ## queue From [https://github.com/OCA/queue.git](https://github.com/OCA/queue.git) -commit 94d75096098b7d589a10d104294c28a0dccadb4b +commit 916e02e05408f5eeec4609a17441290cdcf3b6fe Author: mymage -Date: Fri Feb 16 16:33:13 2024 +0000 +Date: Mon Feb 19 12:32:07 2024 +0000 Translated using Weblate (Italian) @@ -390,30 +405,25 @@ Date: Fri Oct 27 23:25:57 2023 +0200 ## sale-workflow From [https://github.com/OCA/sale-workflow.git](https://github.com/OCA/sale-workflow.git) -commit be5281b5af2ef2549cdbf0232dd4351f7e5ccfea -Author: mymage -Date: Fri Feb 16 14:06:58 2024 +0000 +commit 2ddc76b58ebe4a932615a4c892276d99f5d66f3e +Author: OCA-git-bot +Date: Mon Feb 19 10:58:29 2024 +0000 - Translated using Weblate (Italian) - - Currently translated at 100.0% (7 of 7 strings) - - Translation: sale-workflow-16.0/sale-workflow-16.0-sale_shipping_info_helper - Translate-URL: https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_shipping_info_helper/it/ + [BOT] post-merge updates ## crm From [https://github.com/OCA/crm.git](https://github.com/OCA/crm.git) -commit 39e303e54912fd7c835354c944e906460e514781 +commit a06160ea70e3e7a252424ce5315e76c75c395234 Author: mymage -Date: Fri Feb 16 13:52:34 2024 +0000 +Date: Tue Feb 20 13:43:49 2024 +0000 Translated using Weblate (Italian) - Currently translated at 100.0% (27 of 27 strings) + Currently translated at 100.0% (154 of 154 strings) - Translation: crm-16.0/crm-16.0-crm_project_task - Translate-URL: https://translation.odoo-community.org/projects/crm-16-0/crm-16-0-crm_project_task/it/ + Translation: crm-16.0/crm-16.0-crm_phonecall + Translate-URL: https://translation.odoo-community.org/projects/crm-16-0/crm-16-0-crm_phonecall/it/ ## partner-contact @@ -450,30 +460,20 @@ Date: Fri Feb 16 14:31:07 2024 +0000 ## sale-reporting From [https://github.com/OCA/sale-reporting.git](https://github.com/OCA/sale-reporting.git) -commit 8bbc9bd7dfb7da6a8b1ceac24e39d1cbb42589e0 -Author: Jairo Llopis -Date: Thu Feb 15 11:53:01 2024 +0000 +commit 2bd1f8fb0d53d41182097354dce231a9402ce932 +Author: OCA-git-bot +Date: Mon Feb 19 10:57:39 2024 +0000 - Translated using Weblate (Spanish) - - Currently translated at 100.0% (6 of 6 strings) - - Translation: sale-reporting-16.0/sale-reporting-16.0-sale_order_product_recommendation_product_sold_by_delivery_week - Translate-URL: https://translation.odoo-community.org/projects/sale-reporting-16-0/sale-reporting-16-0-sale_order_product_recommendation_product_sold_by_delivery_week/es/ + [BOT] post-merge updates ## commission From [https://github.com/OCA/commission.git](https://github.com/OCA/commission.git) -commit ab5876a1bf85a98cafcfeb62416ba52f1ba1d29f -Author: Dept. Técnico -Date: Tue Feb 13 17:40:31 2024 +0000 +commit c60b8ee962437d17086ce24e2823e3f0e3220429 +Author: OCA-git-bot +Date: Mon Feb 19 08:52:53 2024 +0000 - Translated using Weblate (Catalan) - - Currently translated at 100.0% (15 of 15 strings) - - Translation: commission-16.0/commission-16.0-commission_formula - Translate-URL: https://translation.odoo-community.org/projects/commission-16-0/commission-16-0-commission_formula/ca/ + [BOT] post-merge updates ## event @@ -506,30 +506,20 @@ Date: Thu Oct 26 18:27:02 2023 +0000 ## knowledge From [https://github.com/OCA/knowledge.git](https://github.com/OCA/knowledge.git) -commit cf04e15ee764193df15b66ac78c95690567cc330 -Author: mymage -Date: Thu Feb 8 07:35:33 2024 +0000 +commit 81b6f14d104a7d30b15bb92140bc12e990103667 +Author: OCA-git-bot +Date: Sun Feb 18 23:38:24 2024 +0000 - Translated using Weblate (Italian) - - Currently translated at 100.0% (17 of 17 strings) - - Translation: knowledge-16.0/knowledge-16.0-document_url_google_drive - Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_url_google_drive/it/ + [BOT] post-merge updates ## dms From [https://github.com/OCA/dms.git](https://github.com/OCA/dms.git) -commit 33526b2a6b8fb30a1a0207020690e23e745c863d -Author: mymage -Date: Fri Feb 16 14:47:13 2024 +0000 +commit 05821cf2ed3343fade54e900f86898b57f9750f8 +Author: OCA-git-bot +Date: Sun Feb 18 14:06:22 2024 +0000 - Translated using Weblate (Italian) - - Currently translated at 100.0% (340 of 340 strings) - - Translation: dms-16.0/dms-16.0-dms - Translate-URL: https://translation.odoo-community.org/projects/dms-16-0/dms-16-0-dms/it/ + [BOT] post-merge updates ## e-commerce @@ -562,9 +552,9 @@ Date: Thu Feb 15 19:03:49 2024 +0000 ## field-service From [https://github.com/OCA/field-service.git](https://github.com/OCA/field-service.git) -commit 20c0d153d5f815c79655663b97d17df6e5cf8665 +commit dcf924f823c5e77a3c0b0c6c29f33d856a628e87 Author: mymage -Date: Fri Feb 16 15:43:25 2024 +0000 +Date: Tue Feb 20 13:30:55 2024 +0000 Translated using Weblate (Italian) @@ -678,16 +668,16 @@ Date: Wed Feb 14 13:49:02 2024 +0000 ## hr-holidays From [https://github.com/OCA/hr-holidays.git](https://github.com/OCA/hr-holidays.git) -commit d5bec6ba53acc77393324e0936a783e3e5ebbd22 -Author: Ivorra78 -Date: Thu Feb 1 09:29:30 2024 +0000 +commit f7875e9792815b3333f61c6399ece1d6fe90fc62 +Author: mymage +Date: Tue Feb 20 14:55:34 2024 +0000 - Translated using Weblate (Spanish) + Translated using Weblate (Italian) Currently translated at 100.0% (3 of 3 strings) Translation: hr-holidays-16.0/hr-holidays-16.0-hr_leave_type_code - Translate-URL: https://translation.odoo-community.org/projects/hr-holidays-16-0/hr-holidays-16-0-hr_leave_type_code/es/ + Translate-URL: https://translation.odoo-community.org/projects/hr-holidays-16-0/hr-holidays-16-0-hr_leave_type_code/it/ ## department @@ -710,16 +700,16 @@ Date: Fri Oct 27 23:26:47 2023 +0200 ## multi-company From [https://github.com/OCA/multi-company.git](https://github.com/OCA/multi-company.git) -commit 827b4f47069d23631be5bf188ce5bd6174e46fd5 -Author: mymage -Date: Fri Feb 16 14:49:03 2024 +0000 +commit b2c04abc5614cc98d0e95a7875ecc812b3540c28 +Author: Weblate +Date: Tue Feb 20 16:11:44 2024 +0000 - Translated using Weblate (Italian) + Update translation files - Currently translated at 100.0% (56 of 56 strings) + Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. - Translation: multi-company-16.0/multi-company-16.0-account_multicompany_easy_creation - Translate-URL: https://translation.odoo-community.org/projects/multi-company-16-0/multi-company-16-0-account_multicompany_easy_creation/it/ + Translation: multi-company-16.0/multi-company-16.0-product_category_company_favorite + Translate-URL: https://translation.odoo-community.org/projects/multi-company-16-0/multi-company-16-0-product_category_company_favorite/ ## l10n-argentina @@ -968,11 +958,11 @@ Date: Fri Oct 27 23:56:54 2023 +0200 ## l10n-mexico From [https://github.com/OCA/l10n-mexico.git](https://github.com/OCA/l10n-mexico.git) -commit 8efbb705667804f02093f9df6bb8ed552150d2ec -Author: oca-git-bot -Date: Fri Oct 27 23:10:09 2023 +0200 +commit 62f43751a86826debd97a25e89e43b59f684a5e4 +Author: OCA-git-bot +Date: Mon Feb 19 21:57:17 2024 +0000 - [IMP] update dotfiles + [BOT] post-merge updates ## l10n-morocco @@ -1027,9 +1017,9 @@ Date: Wed Jan 31 14:30:26 2024 +0000 ## l10n-romania From [https://github.com/OCA/l10n-romania.git](https://github.com/OCA/l10n-romania.git) -commit 88ebdcdd03eb4a6a3c0b41e3f60de6f439715a36 +commit c75e33d2962a80cb5c022e92e784f22ef69ea1f7 Author: OCA-git-bot -Date: Wed Feb 14 17:01:43 2024 +0000 +Date: Tue Feb 20 10:45:36 2024 +0000 [BOT] post-merge updates @@ -1054,11 +1044,16 @@ Date: Fri Oct 27 23:29:36 2023 +0200 ## l10n-spain From [https://github.com/OCA/l10n-spain.git](https://github.com/OCA/l10n-spain.git) -commit ad5109c446f878b4b96d128176036e6aab4a1dd5 -Author: OCA-git-bot -Date: Mon Feb 12 15:16:52 2024 +0000 +commit e583f0ac667a1ecc37e7cfc5d174cd47af1df7ec +Author: Weblate +Date: Tue Feb 20 16:11:29 2024 +0000 - [BOT] post-merge updates + Update translation files + + Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. + + Translation: l10n-spain-16.0/l10n-spain-16.0-l10n_es_sigaus_account + Translate-URL: https://translation.odoo-community.org/projects/l10n-spain-16-0/l10n-spain-16-0-l10n_es_sigaus_account/ ## l10n-switzerland @@ -1167,16 +1162,11 @@ Date: Fri Jan 26 08:17:22 2024 +0000 ## stock-logistics-workflow From [https://github.com/OCA/stock-logistics-workflow.git](https://github.com/OCA/stock-logistics-workflow.git) -commit 46ffb3d86f8778f26377af2570254a23ca89c379 -Author: mymage -Date: Fri Feb 16 14:09:38 2024 +0000 +commit 0d5202718da9fd24807d4d8601ef1ea52d23d9e3 +Author: OCA-git-bot +Date: Mon Feb 19 20:37:45 2024 +0000 - Translated using Weblate (Italian) - - Currently translated at 100.0% (22 of 22 strings) - - Translation: stock-logistics-workflow-16.0/stock-logistics-workflow-16.0-stock_picking_partner_note - Translate-URL: https://translation.odoo-community.org/projects/stock-logistics-workflow-16-0/stock-logistics-workflow-16-0-stock_picking_partner_note/it/ + [BOT] post-merge updates ## stock-logistics-tracking @@ -1250,25 +1240,20 @@ Date: Fri Feb 9 13:21:11 2024 +0000 ## manufacture From [https://github.com/OCA/manufacture.git](https://github.com/OCA/manufacture.git) -commit 5dc6f0ec782abe40f29b3f3482338fb8881194b6 +commit ff96929308fc4599cad29b8c9e247e9fe3a6ec23 Author: OCA-git-bot -Date: Wed Feb 14 08:14:25 2024 +0000 +Date: Wed Feb 21 08:48:09 2024 +0000 [BOT] post-merge updates ## manufacture-reporting From [https://github.com/OCA/manufacture-reporting.git](https://github.com/OCA/manufacture-reporting.git) -commit 7755322eee7b5272dfffa0f03dcfb596461fb802 -Author: mymage -Date: Sun Nov 12 15:20:45 2023 +0000 +commit f5d71a9ca13dc1e2b3292e9b8617af6a2fb90754 +Author: OCA-git-bot +Date: Wed Feb 21 10:24:45 2024 +0000 - Translated using Weblate (Italian) - - Currently translated at 100.0% (8 of 8 strings) - - Translation: manufacture-reporting-16.0/manufacture-reporting-16.0-mrp_flattened_bom_xlsx_direct_materials_cost - Translate-URL: https://translation.odoo-community.org/projects/manufacture-reporting-16-0/manufacture-reporting-16-0-mrp_flattened_bom_xlsx_direct_materials_cost/it/ + [BOT] post-merge updates ## management-system @@ -1377,11 +1362,16 @@ Date: Fri Oct 27 22:44:35 2023 +0200 ## project-service From [https://github.com/OCA/project-service.git](https://github.com/OCA/project-service.git) -commit a163a200552402ee054da03bb29406b336c66253 -Author: OCA-git-bot -Date: Fri Feb 16 16:51:50 2024 +0000 +commit ac1a22a69044d4a216d3d1373e5872acd345abba +Author: mymage +Date: Mon Feb 19 07:51:08 2024 +0000 - [BOT] post-merge updates + Translated using Weblate (Italian) + + Currently translated at 100.0% (2 of 2 strings) + + Translation: project-16.0/project-16.0-project_task_note + Translate-URL: https://translation.odoo-community.org/projects/project-16-0/project-16-0-project_task_note/it/ ## project-agile @@ -1395,9 +1385,9 @@ Date: Fri Oct 27 23:42:42 2023 +0200 ## contract From [https://github.com/OCA/contract.git](https://github.com/OCA/contract.git) -commit 8436099ca3c3276bb2c5bb02225c078a0429e28a +commit e6be7d538e67bf963dd5c3f2db218e95dde843bb Author: OCA-git-bot -Date: Thu Feb 15 18:37:51 2024 +0000 +Date: Tue Feb 20 19:04:49 2024 +0000 [BOT] post-merge updates @@ -1459,16 +1449,11 @@ Date: Mon Feb 12 12:13:54 2024 +0000 ## storage From [https://github.com/OCA/storage.git](https://github.com/OCA/storage.git) -commit bd3c1307e7d09d3913bbcbdc8eed7f09d4276e49 -Author: mymage -Date: Fri Feb 16 14:12:47 2024 +0000 +commit fa950792584d1d7bec2b3ac788090f315eeb5477 +Author: OCA-git-bot +Date: Wed Feb 21 11:49:36 2024 +0000 - Translated using Weblate (Italian) - - Currently translated at 100.0% (13 of 13 strings) - - Translation: storage-16.0/storage-16.0-storage_backend_sftp - Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-storage_backend_sftp/it/ + [BOT] post-merge updates ## search-engine @@ -1482,16 +1467,16 @@ Date: Thu Feb 1 08:49:42 2024 +0000 ## reporting-engine From [https://github.com/OCA/reporting-engine.git](https://github.com/OCA/reporting-engine.git) -commit 4e5247ae92c6d0821c7e63b0a3f16ec8a3ce0ae0 +commit b892776fff60ae53ca31a7b9354319e343849a4c Author: mymage -Date: Mon Feb 12 09:11:28 2024 +0000 +Date: Mon Feb 19 12:49:08 2024 +0000 Translated using Weblate (Italian) - Currently translated at 100.0% (11 of 11 strings) + Currently translated at 100.0% (139 of 139 strings) - Translation: reporting-engine-16.0/reporting-engine-16.0-report_xlsx_helper - Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-16-0/reporting-engine-16-0-report_xlsx_helper/it/ + Translation: reporting-engine-16.0/reporting-engine-16.0-bi_sql_editor + Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-16-0/reporting-engine-16-0-bi_sql_editor/it/ ## report-print-send @@ -1519,16 +1504,11 @@ Date: Fri Oct 27 22:47:22 2023 +0200 ## server-tools From [https://github.com/OCA/server-tools.git](https://github.com/OCA/server-tools.git) -commit b7045fed28440849ae111aef8acca1ccabce2ae4 -Author: Ivorra78 -Date: Wed Feb 14 17:20:45 2024 +0000 +commit 78874f95f36504b7baf6dc969a4f3437546b6e88 +Author: OCA-git-bot +Date: Tue Feb 20 07:58:31 2024 +0000 - Translated using Weblate (Spanish) - - Currently translated at 100.0% (1 of 1 strings) - - Translation: server-tools-16.0/server-tools-16.0-base_sequence_default - Translate-URL: https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-base_sequence_default/es/ + [BOT] post-merge updates ## server-auth @@ -1629,16 +1609,11 @@ Date: Fri Jan 19 14:48:33 2024 +0000 ## rest-framework From [https://github.com/OCA/rest-framework.git](https://github.com/OCA/rest-framework.git) -commit 443b800c7ac33dbb0e1ff08b4a012708e690859b -Author: mymage -Date: Thu Jan 18 07:00:06 2024 +0000 +commit 4d79ee0c2243939955f83ee7ccfd429af21209bd +Author: OCA-git-bot +Date: Tue Feb 20 14:52:26 2024 +0000 - Translated using Weblate (Italian) - - Currently translated at 100.0% (41 of 41 strings) - - Translation: rest-framework-16.0/rest-framework-16.0-rest_log - Translate-URL: https://translation.odoo-community.org/projects/rest-framework-16-0/rest-framework-16-0-rest_log/it/ + [BOT] post-merge updates ## role-policy @@ -1756,25 +1731,25 @@ Date: Fri Oct 27 22:49:35 2023 +0200 ## web From [https://github.com/OCA/web.git](https://github.com/OCA/web.git) -commit 82407a75fd4766eff397d981a3af6156539a058e -Author: OCA-git-bot -Date: Wed Feb 14 07:53:39 2024 +0000 +commit f041b16a38018eb8ab4aeddd8deba098b3985d54 +Author: mymage +Date: Tue Feb 20 14:26:08 2024 +0000 - [BOT] post-merge updates + Added translation using Weblate (Italian) ## website From [https://github.com/OCA/website.git](https://github.com/OCA/website.git) -commit 35f0bcb6bce1b6832ce3fe7c6f254d00e3bd54f8 -Author: Ivorra78 -Date: Tue Jan 2 19:12:21 2024 +0000 +commit 8b35700557bfcfd7ad2d70bcb4f1a5e9f748e56c +Author: jappi00 +Date: Mon Feb 19 07:31:27 2024 +0000 - Translated using Weblate (Spanish) + Translated using Weblate (German) - Currently translated at 100.0% (10 of 10 strings) + Currently translated at 61.5% (8 of 13 strings) - Translation: website-16.0/website-16.0-website_whatsapp - Translate-URL: https://translation.odoo-community.org/projects/website-16-0/website-16-0-website_whatsapp/es/ + Translation: website-16.0/website-16.0-website_require_login + Translate-URL: https://translation.odoo-community.org/projects/website-16-0/website-16-0-website_require_login/de/ ## website-cms diff --git a/account_cutoff_accrual_subscription/i18n/it.po b/account_cutoff_accrual_subscription/i18n/it.po new file mode 100644 index 0000000000..f7f0e300fd --- /dev/null +++ b/account_cutoff_accrual_subscription/i18n/it.po @@ -0,0 +1,340 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_cutoff_accrual_subscription +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "" +"%(start)s → %(end)s%(prorata)s: %(sub_type)s %(amount)s over min. amount ⇒ " +"no provisionning" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "" +"%(start)s → %(end)s%(prorata)s: %(sub_type)s %(amount)s under min. amount " +"⇒provisionning %(cutoff_amount)s" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "" +"

No provision for subscription %(name)s:

" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__account_id +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_search +msgid "Account" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model,name:account_cutoff_accrual_subscription.model_account_cutoff +msgid "Account Cut-off" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model,name:account_cutoff_accrual_subscription.model_account_cutoff_line +msgid "Account Cut-off Line" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__active +msgid "Active" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__analytic_distribution +msgid "Analytic" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__analytic_distribution_search +msgid "Analytic Distribution Search" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__analytic_precision +msgid "Analytic Precision" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__partner_type__any +msgid "Any Partner" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_search +msgid "Archived" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "" +"CONFIG: %(periodicity)s periodicity, start date %(start_date)s, min. expense" +" amount %(min_amount)s, default provision amount %(provision_amount)s" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__company_id +msgid "Company" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__company_currency_id +msgid "Company Currency" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "Computing cut-offs from %d subscriptions." +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__create_uid +msgid "Created by" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__create_date +msgid "Created on" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__provision_amount +msgid "Default Provision Amount" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__display_name +msgid "Display Name" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__subscription_type__expense +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_search +#, python-format +msgid "Expense" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__id +msgid "ID" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__min_amount +msgid "Minimum Amount" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,help:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__min_amount +msgid "Minimum amount without taxes over the period" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff_accrual_subscription.py:0 +#, python-format +msgid "Missing partner on subscription '%s'." +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "Missing source journals." +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__periodicity__month +msgid "Monthly" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__name +msgid "Name" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__partner_type__none +msgid "No Partner" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "Odoo cannot compute the fiscal year start date." +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff_accrual_subscription.py:0 +#, python-format +msgid "On subscription %s, the start date is not the first day of a month." +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "PERIODS:" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "" +"PRORATED min. amount %(min_amount)s, default provisionning amount " +"%(provision_amount)s" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__partner_id +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_search +msgid "Partner" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__partner_type +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_search +msgid "Partner Type" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__periodicity +msgid "Periodicity" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__periodicity__quarter +msgid "Quarterly" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__subscription_type__revenue +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_search +#, python-format +msgid "Revenue" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__periodicity__semester +msgid "Semesterly" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__partner_type__one +msgid "Specific Partner" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__start_date +msgid "Start Date" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_line__subscription_id +msgid "Subscription" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_form +msgid "Subscription Name" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.actions.act_window,name:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_action +#: model:ir.ui.menu,name:account_cutoff_accrual_subscription.account_cutoff_accrual_subscription_menu +msgid "Subscriptions" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model,name:account_cutoff_accrual_subscription.model_account_cutoff_accrual_subscription +msgid "Subscriptions to compute accrual cutoffs" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__tax_ids +msgid "Taxes" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#. odoo-python +#: code:addons/account_cutoff_accrual_subscription/models/account_cutoff.py:0 +#, python-format +msgid "" +"The cutoffs with subscription only work when the cutoff date (%s) is the " +"last day of a month." +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.constraint,message:account_cutoff_accrual_subscription.constraint_account_cutoff_accrual_subscription_provision_amount_positive +msgid "The default provision amount must be positive." +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.constraint,message:account_cutoff_accrual_subscription.constraint_account_cutoff_accrual_subscription_min_amount_positive +msgid "The minimum amount must be positive." +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__subscription_type +msgid "Type" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields,field_description:account_cutoff_accrual_subscription.field_account_cutoff_accrual_subscription__type_tax_use +msgid "Type Tax Use" +msgstr "" + +#. module: account_cutoff_accrual_subscription +#: model:ir.model.fields.selection,name:account_cutoff_accrual_subscription.selection__account_cutoff_accrual_subscription__periodicity__year +msgid "Yearly" +msgstr "" diff --git a/account_due_list_aging_comment/i18n/it.po b/account_due_list_aging_comment/i18n/it.po index f72d9d7228..3d4bc5480a 100644 --- a/account_due_list_aging_comment/i18n/it.po +++ b/account_due_list_aging_comment/i18n/it.po @@ -9,22 +9,22 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-07-29 12:02+0000\n" -"PO-Revision-Date: 2016-07-29 12:02+0000\n" -"Last-Translator: OCA Transbot , 2016\n" +"PO-Revision-Date: 2024-02-21 17:34+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: account_due_list_aging_comment #: model:ir.model.fields,field_description:account_due_list_aging_comment.field_account_move_line__aging_comments msgid "Aging Comments" -msgstr "" +msgstr "Commenti sullo scaduto" #. module: account_due_list_aging_comment #: model:ir.model,name:account_due_list_aging_comment.model_account_move_line -#, fuzzy msgid "Journal Item" -msgstr "Voci sezionale" +msgstr "Movimento contabile" diff --git a/account_fiscal_position_autodetect_optional_vies/README.rst b/account_fiscal_position_autodetect_optional_vies/README.rst new file mode 100644 index 0000000000..2aea0100d1 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/README.rst @@ -0,0 +1,107 @@ +================================================ +Account Fiscal Position Autodetect optional VIES +================================================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:25428c027fef68dfaad112878e297a9f6575d431084b53de8075ff322d1eb2ec + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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--fiscal--rule-lightgray.png?logo=github + :target: https://github.com/OCA/account-fiscal-rule/tree/16.0/account_fiscal_position_autodetect_optional_vies + :alt: OCA/account-fiscal-rule +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-fiscal-rule-16-0/account-fiscal-rule-16-0-account_fiscal_position_autodetect_optional_vies + :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-fiscal-rule&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds vat VIES validation to fiscal positions auto detection system. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +- Create a new partner and define some country. + +- Create a new Fiscal Position, with the following configuration: + + * 'Detect Automatically' -> checked. + * 'Vat required' -> checked. + * 'Vat VIES required' -> checked. + +Usage +===== + +Create a new Sale/Invoice and select the partner. Remember that the system recalculates the fiscal position according to the shipping address. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Pedro M. Baeza + * Víctor Martínez + +* `FactorLibre `_: + + * Alejandro Ji Cheung + +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-victoralmau| image:: https://github.com/victoralmau.png?size=40px + :target: https://github.com/victoralmau + :alt: victoralmau + +Current `maintainer `__: + +|maintainer-victoralmau| + +This module is part of the `OCA/account-fiscal-rule `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_fiscal_position_autodetect_optional_vies/__init__.py b/account_fiscal_position_autodetect_optional_vies/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/account_fiscal_position_autodetect_optional_vies/__manifest__.py b/account_fiscal_position_autodetect_optional_vies/__manifest__.py new file mode 100644 index 0000000000..8be5acd35c --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2021 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Account Fiscal Position Autodetect optional VIES", + "version": "16.0.1.0.0", + "category": "Accounting & Finance", + "license": "AGPL-3", + "author": "Tecnativa, Odoo Community Association (OCA)", + "maintainers": ["victoralmau"], + "website": "https://github.com/OCA/account-fiscal-rule", + "depends": ["base_vat_optional_vies"], + "data": ["views/account_fiscal_position_view.xml"], + "external_dependencies": {"python": ["mock"]}, + "application": True, +} diff --git a/account_fiscal_position_autodetect_optional_vies/i18n/account_fiscal_position_autodetect_optional_vies.pot b/account_fiscal_position_autodetect_optional_vies/i18n/account_fiscal_position_autodetect_optional_vies.pot new file mode 100644 index 0000000000..e7307c05c5 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/i18n/account_fiscal_position_autodetect_optional_vies.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_fiscal_position_autodetect_optional_vies +# +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_fiscal_position_autodetect_optional_vies +#: model:ir.model.fields,help:account_fiscal_position_autodetect_optional_vies.field_account_fiscal_position__vat_vies_required +msgid "Apply only if VAT passed VIES validation." +msgstr "" + +#. module: account_fiscal_position_autodetect_optional_vies +#: model:ir.model,name:account_fiscal_position_autodetect_optional_vies.model_account_fiscal_position +msgid "Fiscal Position" +msgstr "" + +#. module: account_fiscal_position_autodetect_optional_vies +#: model:ir.model.fields,field_description:account_fiscal_position_autodetect_optional_vies.field_account_fiscal_position__vat_vies_required +msgid "Vat was VIES validated" +msgstr "" diff --git a/account_fiscal_position_autodetect_optional_vies/models/__init__.py b/account_fiscal_position_autodetect_optional_vies/models/__init__.py new file mode 100644 index 0000000000..2637a06155 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/models/__init__.py @@ -0,0 +1 @@ +from . import account_fiscal_position diff --git a/account_fiscal_position_autodetect_optional_vies/models/account_fiscal_position.py b/account_fiscal_position_autodetect_optional_vies/models/account_fiscal_position.py new file mode 100644 index 0000000000..77dd517611 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/models/account_fiscal_position.py @@ -0,0 +1,45 @@ +# Copyright 2021 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models +from odoo.osv import expression + + +class AccountFiscalPosition(models.Model): + _inherit = "account.fiscal.position" + + vat_vies_required = fields.Boolean( + string="Vat was VIES validated", + help="Apply only if VAT passed VIES validation.", + ) + + @api.model + def search(self, domain, offset=0, limit=None, order=None, count=False): + if "vat_vies_required" in self.env.context: + domain = expression.AND( + ( + domain, + [ + ( + "vat_vies_required", + "=", + self.env.context["vat_vies_required"], + ) + ], + ) + ) + return super().search( + domain, offset=offset, limit=limit, order=order, count=count + ) + + @api.model + def _get_fiscal_position(self, partner, delivery=None): + _self = self + if delivery or partner: + partner_vat_vies = delivery or partner + _self = self.with_context( + vat_vies_required=partner_vat_vies.commercial_partner_id.vies_passed + ) + return super(AccountFiscalPosition, _self)._get_fiscal_position( + partner, delivery=delivery + ) diff --git a/account_fiscal_position_autodetect_optional_vies/readme/CONFIGURE.rst b/account_fiscal_position_autodetect_optional_vies/readme/CONFIGURE.rst new file mode 100644 index 0000000000..af5f399500 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/readme/CONFIGURE.rst @@ -0,0 +1,7 @@ +- Create a new partner and define some country. + +- Create a new Fiscal Position, with the following configuration: + + * 'Detect Automatically' -> checked. + * 'Vat required' -> checked. + * 'Vat VIES required' -> checked. diff --git a/account_fiscal_position_autodetect_optional_vies/readme/CONTRIBUTORS.rst b/account_fiscal_position_autodetect_optional_vies/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..834c4ac266 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/readme/CONTRIBUTORS.rst @@ -0,0 +1,8 @@ +* `Tecnativa `_: + + * Pedro M. Baeza + * Víctor Martínez + +* `FactorLibre `_: + + * Alejandro Ji Cheung diff --git a/account_fiscal_position_autodetect_optional_vies/readme/DESCRIPTION.rst b/account_fiscal_position_autodetect_optional_vies/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..a8a5a6dad3 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module adds vat VIES validation to fiscal positions auto detection system. diff --git a/account_fiscal_position_autodetect_optional_vies/readme/USAGE.rst b/account_fiscal_position_autodetect_optional_vies/readme/USAGE.rst new file mode 100644 index 0000000000..edd6e43bc6 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/readme/USAGE.rst @@ -0,0 +1 @@ +Create a new Sale/Invoice and select the partner. Remember that the system recalculates the fiscal position according to the shipping address. diff --git a/account_fiscal_position_autodetect_optional_vies/static/description/icon.png b/account_fiscal_position_autodetect_optional_vies/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/account_fiscal_position_autodetect_optional_vies/static/description/index.html b/account_fiscal_position_autodetect_optional_vies/static/description/index.html new file mode 100644 index 0000000000..8b6f8fb2ed --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/static/description/index.html @@ -0,0 +1,449 @@ + + + + + + +Account Fiscal Position Autodetect optional VIES + + + +
+

Account Fiscal Position Autodetect optional VIES

+ + +

Beta License: AGPL-3 OCA/account-fiscal-rule Translate me on Weblate Try me on Runboat

+

This module adds vat VIES validation to fiscal positions auto detection system.

+

Table of contents

+ +
+

Configuration

+
    +
  • Create a new partner and define some country.
  • +
  • Create a new Fiscal Position, with the following configuration:
      +
    • ‘Detect Automatically’ -> checked.
    • +
    • ‘Vat required’ -> checked.
    • +
    • ‘Vat VIES required’ -> checked.
    • +
    +
  • +
+
+
+

Usage

+

Create a new Sale/Invoice and select the partner. Remember that the system recalculates the fiscal position according to the shipping address.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

Current maintainer:

+

victoralmau

+

This module is part of the OCA/account-fiscal-rule project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/account_fiscal_position_autodetect_optional_vies/tests/__init__.py b/account_fiscal_position_autodetect_optional_vies/tests/__init__.py new file mode 100644 index 0000000000..3cfd704a20 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_account_fiscal_position_vies diff --git a/account_fiscal_position_autodetect_optional_vies/tests/test_account_fiscal_position_vies.py b/account_fiscal_position_autodetect_optional_vies/tests/test_account_fiscal_position_vies.py new file mode 100644 index 0000000000..a4ff51c011 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/tests/test_account_fiscal_position_vies.py @@ -0,0 +1,63 @@ +# Copyright 2021 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +import mock + +from odoo.tests import Form, common + + +class TestAccountFiscalPositionVies(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.company = cls.env.ref("base.main_company") + # We make sure that there is no previous record + fp_model = cls.env["account.fiscal.position"] + fp_model.search([("auto_apply", "=", True)]).write({"auto_apply": False}) + cls.fp_vat = fp_model.create( + {"name": "Test vat required", "auto_apply": True, "vat_required": True} + ) + cls.fp_vat_vies = fp_model.create( + { + "name": "Test vat VIES required", + "auto_apply": True, + "vat_required": True, + "vat_vies_required": True, + } + ) + cls.partner = cls.env["res.partner"].create( + { + "name": "Mr Odoo", + "vat": "VAT", + "country_id": cls.env.ref("base.es").id, + "company_type": "company", + } + ) + cls.child_partner = cls.env["res.partner"].create( + {"name": "Mr Odoo children", "parent_id": cls.partner.id} + ) + cls.vatnumber_path = "odoo.addons.base_vat.models.res_partner.check_vies" + + def _create_invoice(self, partner): + move_form = Form( + self.env["account.move"].with_context(default_move_type="out_invoice") + ) + move_form.partner_id = partner + return move_form.save() + + def test_invoice_fiscal_position_without_vies(self): + invoice = self._create_invoice(self.partner) + self.assertEqual(invoice.fiscal_position_id, self.fp_vat) + invoice2 = self._create_invoice(self.child_partner) + self.assertEqual(invoice2.fiscal_position_id, self.fp_vat) + + def test_invoice_fiscal_position_with_vies(self): + # We need to use mock to be sure vies_passed set True + with mock.patch(self.vatnumber_path) as mock_vatnumber: + self.company.vat_check_vies = True + mock_vatnumber.check_vies.return_value = True + self.partner.vat = "ESB87530432" + invoice = self._create_invoice(self.partner) + self.assertEqual(invoice.fiscal_position_id, self.fp_vat_vies) + invoice2 = self._create_invoice(self.child_partner) + self.assertEqual(invoice2.fiscal_position_id, self.fp_vat_vies) diff --git a/account_fiscal_position_autodetect_optional_vies/views/account_fiscal_position_view.xml b/account_fiscal_position_autodetect_optional_vies/views/account_fiscal_position_view.xml new file mode 100644 index 0000000000..69e92b20d7 --- /dev/null +++ b/account_fiscal_position_autodetect_optional_vies/views/account_fiscal_position_view.xml @@ -0,0 +1,16 @@ + + + + account.fiscal.position.form + account.fiscal.position + + + + + + + + diff --git a/account_invoice_check_total/i18n/it.po b/account_invoice_check_total/i18n/it.po index 816a2ef197..46d303bb82 100644 --- a/account_invoice_check_total/i18n/it.po +++ b/account_invoice_check_total/i18n/it.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-28 02:40+0000\n" -"PO-Revision-Date: 2023-12-24 18:33+0000\n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" "Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "Language: it\n" @@ -50,7 +50,7 @@ msgstr "" #. module: account_invoice_check_total #: model:ir.model,name:account_invoice_check_total.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Registrazione contabile" #. module: account_invoice_check_total #. odoo-python diff --git a/account_invoice_fiscal_position_update/i18n/it.po b/account_invoice_fiscal_position_update/i18n/it.po index b320360670..dda7247b05 100644 --- a/account_invoice_fiscal_position_update/i18n/it.po +++ b/account_invoice_fiscal_position_update/i18n/it.po @@ -9,21 +9,22 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-04-29 02:39+0000\n" -"PO-Revision-Date: 2017-04-29 02:39+0000\n" -"Last-Translator: OCA Transbot , 2017\n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: account_invoice_fiscal_position_update #: model:ir.model.fields,field_description:account_invoice_fiscal_position_update.field_account_bank_statement_line__fiscal_position_id #: model:ir.model.fields,field_description:account_invoice_fiscal_position_update.field_account_move__fiscal_position_id #: model:ir.model.fields,field_description:account_invoice_fiscal_position_update.field_account_payment__fiscal_position_id msgid "Fiscal Position" -msgstr "" +msgstr "Posizione fiscale" #. module: account_invoice_fiscal_position_update #: model:ir.model.fields,help:account_invoice_fiscal_position_update.field_account_bank_statement_line__fiscal_position_id @@ -34,11 +35,14 @@ msgid "" "customers or sales orders/invoices. The default value comes from the " "customer." msgstr "" +"Le posizioni fiscali vengono usate per adattare imposte e conti per clienti " +"particolari o ordine/fatture di vendita. Il valore predefinito deriva dal " +"cliente." #. module: account_invoice_fiscal_position_update #: model:ir.model,name:account_invoice_fiscal_position_update.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Registrazione contabile" #. module: account_invoice_fiscal_position_update #. odoo-python @@ -50,6 +54,10 @@ msgid "" " - %s\n" "You should update the Account and the Taxes of these invoice lines manually." msgstr "" +"Le seguenti righe fattura non sono state aggiornate alla nuova posizione " +"fiscale perché non hanno un prodotto:\n" +" - %s\n" +"Bisogna aggiornare il conto e le imposte di queste righe fattura manualmente." #. module: account_invoice_fiscal_position_update #. odoo-python @@ -60,13 +68,16 @@ msgid "" "don't have products. You should update the Account and the Taxes of each " "invoice line manually." msgstr "" +"Le righe fattura non sono state aggiornate alla nuova posizione fiscale " +"perché non hanno un prodotto. Bisogna aggiornare il conto e le imposte di " +"ogni righa fattura manualmente." #. module: account_invoice_fiscal_position_update #. odoo-python #: code:addons/account_invoice_fiscal_position_update/models/account_move.py:0 #, python-format msgid "Warning" -msgstr "" +msgstr "Attenzione" #~ msgid "Invoice" #~ msgstr "Fattura" diff --git a/account_invoice_force_number/i18n/it.po b/account_invoice_force_number/i18n/it.po index 6023c578e7..48a7c4ed04 100644 --- a/account_invoice_force_number/i18n/it.po +++ b/account_invoice_force_number/i18n/it.po @@ -9,15 +9,15 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-05-16 02:37+0000\n" -"PO-Revision-Date: 2019-01-16 17:33+0000\n" -"Last-Translator: Sergio Zanchetta \n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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 3.3\n" +"X-Generator: Weblate 4.17\n" #. module: account_invoice_force_number #: model:res.groups,name:account_invoice_force_number.group_allow_invoice_force_number @@ -35,18 +35,17 @@ msgstr "Numero da forzare" #: model:ir.model.fields,help:account_invoice_force_number.field_account_bank_statement_line__move_name #: model:ir.model.fields,help:account_invoice_force_number.field_account_move__move_name #: model:ir.model.fields,help:account_invoice_force_number.field_account_payment__move_name -#, fuzzy msgid "" "Force invoice number. Use this field if\n" " you don't want to use the default numbering." msgstr "" -"Forza il numero della fattura. Utilizzare questo campo per non usare la " -"numerazione predefinita" +"Forza il numero della fattura. Utilizzare questo campo se\n" +" non si vuole usare la numerazione predefinita." #. module: account_invoice_force_number #: model:ir.model,name:account_invoice_force_number.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Registrazione contabile" #. module: account_invoice_force_number #. odoo-python @@ -57,3 +56,6 @@ msgid "" "number). You can set it back to \"Draft\"state and modify its content, then " "re-confirm it." msgstr "" +"Non si può cancellare una fattura dopo che è stata validata (e ha ricevuto " +"un numero). Bisogna riportarla a stato \"Bozza\" e modificarne il contenuto, " +"quindi riconfermarla." diff --git a/account_invoice_merge/i18n/it.po b/account_invoice_merge/i18n/it.po index 95a8131319..bab842019a 100644 --- a/account_invoice_merge/i18n/it.po +++ b/account_invoice_merge/i18n/it.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-23 13:51+0000\n" -"PO-Revision-Date: 2023-04-17 16:36+0000\n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" "Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "Language: it\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 4.17\n" #. module: account_invoice_merge #. odoo-python @@ -56,12 +56,12 @@ msgstr "Nome visualizzato" #: code:addons/account_invoice_merge/wizard/invoice_merge.py:0 #, python-format msgid "Draft" -msgstr "" +msgstr "Bozza" #. module: account_invoice_merge #: model:ir.model.fields,field_description:account_invoice_merge.field_invoice_merge__error_message msgid "Error Message" -msgstr "" +msgstr "Messaggio di errore" #. module: account_invoice_merge #: model:ir.model.fields,field_description:account_invoice_merge.field_invoice_merge__id @@ -76,7 +76,7 @@ msgstr "Data fattura" #. module: account_invoice_merge #: model:ir.model,name:account_invoice_merge.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Registrazione contabile" #. module: account_invoice_merge #: model:ir.model.fields,field_description:account_invoice_merge.field_invoice_merge__keep_references @@ -115,7 +115,7 @@ msgstr "Unisci fatture" #: code:addons/account_invoice_merge/wizard/invoice_merge.py:0 #, python-format msgid "Merge-able State (ex : %s)" -msgstr "" +msgstr "Stato unificabile (es : %s)" #. module: account_invoice_merge #: model_terms:ir.ui.view,arch_db:account_invoice_merge.view_invoice_merge diff --git a/account_invoice_payment_retention/i18n/it.po b/account_invoice_payment_retention/i18n/it.po new file mode 100644 index 0000000000..5d93e6a617 --- /dev/null +++ b/account_invoice_payment_retention/i18n/it.po @@ -0,0 +1,274 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_payment_retention +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: account_invoice_payment_retention +#: model_terms:ir.ui.view,arch_db:account_invoice_payment_retention.view_move_form +msgid "" +"\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_invoice_payment_term_date_due +#: model_terms:ir.ui.view,arch_db:account_invoice_payment_term_date_due.view_move_form +msgid "" +", 2017\n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: account_invoice_supplierinfo_update_discount #: model:ir.model.fields,field_description:account_invoice_supplierinfo_update_discount.field_wizard_update_invoice_supplierinfo_line__current_discount msgid "Current Discount" -msgstr "" +msgstr "Sconto attuale" #. module: account_invoice_supplierinfo_update_discount #: model:ir.model.fields,field_description:account_invoice_supplierinfo_update_discount.field_wizard_update_invoice_supplierinfo__display_discount msgid "Display Discount" -msgstr "" +msgstr "Visualizza sconto" #. module: account_invoice_supplierinfo_update_discount #: model:ir.model,name:account_invoice_supplierinfo_update_discount.model_account_move_line msgid "Journal Item" -msgstr "" +msgstr "Movimento contabile" #. module: account_invoice_supplierinfo_update_discount #: model:ir.model.fields,field_description:account_invoice_supplierinfo_update_discount.field_wizard_update_invoice_supplierinfo_line__new_discount msgid "New Discount" -msgstr "" +msgstr "Nuovo sconto" #. module: account_invoice_supplierinfo_update_discount #: model:ir.model,name:account_invoice_supplierinfo_update_discount.model_wizard_update_invoice_supplierinfo_line msgid "Wizard Line to update supplierinfo" -msgstr "" +msgstr "Riga procedura guidata per aggiornare i prezzi fornitore" #. module: account_invoice_supplierinfo_update_discount #: model:ir.model,name:account_invoice_supplierinfo_update_discount.model_wizard_update_invoice_supplierinfo msgid "Wizard to update supplierinfo" -msgstr "" +msgstr "Procedura guidata per aggiornare i prezzi fornitore" #~ msgid "Invoice Line" #~ msgstr "Riga fattura" diff --git a/account_invoice_tax_required/i18n/it.po b/account_invoice_tax_required/i18n/it.po index 07ccca601b..26ff521e7a 100644 --- a/account_invoice_tax_required/i18n/it.po +++ b/account_invoice_tax_required/i18n/it.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-02-05 07:17+0000\n" -"PO-Revision-Date: 2024-02-05 07:17+0000\n" -"Last-Translator: \n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" +"Last-Translator: mymage \n" "Language-Team: \n" -"Language: \n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: account_invoice_tax_required #. odoo-python @@ -24,29 +25,31 @@ msgid "" "Invoice %(invoice)s for customer %(customer)s has a line with product " "%(product)s with no taxes" msgstr "" +"La fattura %(invoice)s per il cliente %(customer)s ha una riga con prodotto " +"%(product)s senza imposte" #. module: account_invoice_tax_required #. odoo-python #: code:addons/account_invoice_tax_required/models/account_move.py:0 #, python-format msgid "Invoices with Missing Taxes" -msgstr "" +msgstr "Fatture con imposte assenti" #. module: account_invoice_tax_required #: model:ir.model,name:account_invoice_tax_required.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Registrazione contabile" #. module: account_invoice_tax_required #. odoo-python #: code:addons/account_invoice_tax_required/models/account_move.py:0 #, python-format msgid "No Taxes Defined!" -msgstr "" +msgstr "Imposte non definite!" #. module: account_invoice_tax_required #. odoo-python #: code:addons/account_invoice_tax_required/models/account_move.py:0 #, python-format msgid "Show invoices with lines without taxes" -msgstr "" +msgstr "Visualizza fatture con righe senza imposte" diff --git a/account_invoice_triple_discount/i18n/it.po b/account_invoice_triple_discount/i18n/it.po index a52a49fae7..19f8ea5d34 100644 --- a/account_invoice_triple_discount/i18n/it.po +++ b/account_invoice_triple_discount/i18n/it.po @@ -9,25 +9,25 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-08-09 02:45+0000\n" -"PO-Revision-Date: 2021-12-03 12:37+0000\n" -"Last-Translator: Francesco Foresti \n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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.3.2\n" +"X-Generator: Weblate 4.17\n" #. module: account_invoice_triple_discount #: model_terms:ir.ui.view,arch_db:account_invoice_triple_discount.report_invoice_document msgid "Disc.2 %" -msgstr "" +msgstr "Sconto 2 (%)" #. module: account_invoice_triple_discount #: model_terms:ir.ui.view,arch_db:account_invoice_triple_discount.report_invoice_document msgid "Disc.3 %" -msgstr "" +msgstr "Sconto 3 (%)" #. module: account_invoice_triple_discount #: model_terms:ir.ui.view,arch_db:account_invoice_triple_discount.invoice_triple_discount_form_view @@ -52,12 +52,12 @@ msgstr "Sconto 3 (%)" #. module: account_invoice_triple_discount #: model:ir.model,name:account_invoice_triple_discount.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Registrazione contabile" #. module: account_invoice_triple_discount #: model:ir.model,name:account_invoice_triple_discount.model_account_move_line msgid "Journal Item" -msgstr "" +msgstr "Movimento contabile" #~ msgid "Invoice" #~ msgstr "Fattura" diff --git a/account_mail_autosubscribe/i18n/it.po b/account_mail_autosubscribe/i18n/it.po new file mode 100644 index 0000000000..73388557f6 --- /dev/null +++ b/account_mail_autosubscribe/i18n/it.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" diff --git a/account_move_line_reconcile_manual/i18n/it.po b/account_move_line_reconcile_manual/i18n/it.po new file mode 100644 index 0000000000..f13f5d5229 --- /dev/null +++ b/account_move_line_reconcile_manual/i18n/it.po @@ -0,0 +1,368 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_move_line_reconcile_manual +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__count +msgid "# of Journal Items" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__account_id +msgid "Account" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "Account '%s' is not reconciliable." +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__writeoff_amount +msgid "Amount" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__writeoff_analytic_distribution +msgid "Analytic" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__analytic_precision +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__analytic_precision +msgid "Analytic Precision" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__expense_analytic_distribution +msgid "Analytic for Expense" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__income_analytic_distribution +msgid "Analytic for Income" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "Bad write-off account type" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.account_move_line_reconcile_manual_form +msgid "Cancel" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__company_id +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__company_id +msgid "Company" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__create_uid +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__create_uid +msgid "Created by" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__create_date +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__create_date +msgid "Created on" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__company_currency_id +msgid "Currency" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__writeoff_date +msgid "Date" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__display_name +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__display_name +msgid "Display Name" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields.selection,name:account_move_line_reconcile_manual.selection__account_move_line_reconcile_manual__writeoff_type__expense +msgid "Expense" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__expense_account_id +msgid "Expense Write-off Account" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.account_move_line_reconcile_manual_form +msgid "Full Reconcile" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "Full reconciliation failed. It should never happen!" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__id +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__id +msgid "ID" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields.selection,name:account_move_line_reconcile_manual.selection__account_move_line_reconcile_manual__writeoff_type__income +msgid "Income" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__income_account_id +msgid "Income Write-off Account" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__writeoff_journal_id +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.account_reconcile_manual_model_search +msgid "Journal" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual____last_update +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__write_uid +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__write_date +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "Line '%s' is already fully reconciled." +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model,name:account_move_line_reconcile_manual.model_account_move_line_reconcile_manual +msgid "Manual Reconciliation Wizard" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__writeoff_model_id +msgid "Model" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model,name:account_move_line_reconcile_manual.model_account_reconcile_manual_model +msgid "Models for Manual Reconcile Write-off" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__move_line_ids +msgid "Move Line" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields.selection,name:account_move_line_reconcile_manual.selection__account_move_line_reconcile_manual__writeoff_type__none +msgid "None" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.account_move_line_reconcile_manual_form +msgid "Partial Reconcile" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__partner_id +msgid "Partner" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__partner_count +msgid "Partner Count" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.actions.act_window,name:account_move_line_reconcile_manual.account_move_line_reconcile_manual_action +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.view_move_line_tree +msgid "Reconcile" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "Reconcile mark: %s" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.account_move_line_reconcile_manual_form +msgid "Reconcile with Write-off" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__writeoff_ref +msgid "Reference" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__sequence +msgid "Sequence" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields.selection,name:account_move_line_reconcile_manual.selection__account_move_line_reconcile_manual__state__start +msgid "Start" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__state +msgid "State" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "Successful reconciliation" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "" +"The Journal Items selected have different accounts: %(account1)s and " +"%(account2)s." +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "" +"This is a/an '%(writeoff_type)s' write-off, but you selected account " +"%(account_code)s which is a/an '%(account_type)s' account." +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.constraint,message:account_move_line_reconcile_manual.constraint_account_reconcile_manual_model_ref_company_uniq +msgid "This write-off model already exists in this company!" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__total_credit +msgid "Total Credit" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__total_debit +msgid "Total Debit" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__writeoff_type +msgid "Type" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#: model:ir.model.fields.selection,name:account_move_line_reconcile_manual.selection__account_move_line_reconcile_manual__state__writeoff +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.account_move_line_reconcile_manual_form +#, python-format +msgid "Write-off" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_move_line_reconcile_manual__writeoff_account_id +msgid "Write-off Account" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__journal_id +msgid "Write-off Journal" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.actions.act_window,name:account_move_line_reconcile_manual.account_reconcile_manual_model_action +#: model:ir.ui.menu,name:account_move_line_reconcile_manual.account_reconcile_manual_model_menu +msgid "Write-off Models" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model:ir.model.fields,field_description:account_move_line_reconcile_manual.field_account_reconcile_manual_model__ref +msgid "Write-off Reference" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "" +"Write-off journal entry: %(writeoff_move)s\n" +"Reconcile mark: %(full_rec)s" +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.account_move_line_reconcile_manual_form +msgid "You are trying to reconcile journal items from" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "You must select at least 2 journal items!" +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "You selected only credit journal items." +msgstr "" + +#. module: account_move_line_reconcile_manual +#. odoo-python +#: code:addons/account_move_line_reconcile_manual/wizards/account_move_line_reconcile_manual.py:0 +#, python-format +msgid "You selected only debit journal items." +msgstr "" + +#. module: account_move_line_reconcile_manual +#: model_terms:ir.ui.view,arch_db:account_move_line_reconcile_manual.account_move_line_reconcile_manual_form +msgid "different partners: make sure it is intented." +msgstr "" diff --git a/account_move_reconcile_forbid_cancel/i18n/it.po b/account_move_reconcile_forbid_cancel/i18n/it.po new file mode 100644 index 0000000000..f0a65e96e5 --- /dev/null +++ b/account_move_reconcile_forbid_cancel/i18n/it.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_move_reconcile_forbid_cancel +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-21 17:35+0000\n" +"Last-Translator: mymage \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_move_reconcile_forbid_cancel +#: model:ir.model,name:account_move_reconcile_forbid_cancel.model_account_move +msgid "Journal Entry" +msgstr "Registrazione contabile" + +#. module: account_move_reconcile_forbid_cancel +#. odoo-python +#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0 +#, python-format +msgid "You cannot cancel reconciled entries." +msgstr "Non si possono annullare le entrate riconciliate." + +#. module: account_move_reconcile_forbid_cancel +#. odoo-python +#: code:addons/account_move_reconcile_forbid_cancel/models/account_move.py:0 +#, python-format +msgid "You cannot reset to draft reconciled entries." +msgstr "Non si possono riportare a bozza le entrate riconciliate." diff --git a/account_payment_multi_deduction/i18n/it.po b/account_payment_multi_deduction/i18n/it.po new file mode 100644 index 0000000000..82017d3abf --- /dev/null +++ b/account_payment_multi_deduction/i18n/it.po @@ -0,0 +1,177 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_multi_deduction +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__account_id +msgid "Account" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__analytic_distribution +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_register__analytic_distribution +msgid "Analytic" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__analytic_distribution_search +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_register__analytic_distribution_search +msgid "Analytic Distribution Search" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__analytic_precision +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_register__analytic_precision +msgid "Analytic Precision" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__create_uid +msgid "Created by" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__create_date +msgid "Created on" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__currency_id +msgid "Currency" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_register__deduct_analytic_distribution +msgid "Deduct Analytic Distribution" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__amount +msgid "Deduction Amount" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_register__deduction_ids +msgid "Deductions" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__display_name +msgid "Display Name" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__id +msgid "ID" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment__is_multi_deduction +msgid "Is Multi Deduction" +msgstr "" + +#. module: account_payment_multi_deduction +#. odoo-python +#: code:addons/account_payment_multi_deduction/wizard/account_payment_deduction.py:0 +#, python-format +msgid "Keep open" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,help:account_payment_multi_deduction.field_account_payment_deduction__is_open +msgid "Keep this line open" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__name +msgid "Label" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields.selection,name:account_payment_multi_deduction.selection__account_payment_register__payment_difference_handling__reconcile_multi_deduct +msgid "Mark invoice as fully paid (multi deduct)" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__is_open +msgid "Open" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_deduction__payment_id +msgid "Payment" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model,name:account_payment_multi_deduction.model_account_payment_deduction +msgid "Payment Deduction" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_register__payment_difference_handling +msgid "Payment Difference Handling" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model,name:account_payment_multi_deduction.model_account_payment +msgid "Payments" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model,name:account_payment_multi_deduction.model_account_payment_register +msgid "Register Payment" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,field_description:account_payment_multi_deduction.field_account_payment_register__deduct_residual +msgid "Remainings" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,help:account_payment_multi_deduction.field_account_payment_register__deduction_ids +msgid "Sum of deduction amount(s) must equal to the payment difference" +msgstr "" + +#. module: account_payment_multi_deduction +#: model:ir.model.fields,help:account_payment_multi_deduction.field_account_payment_deduction__currency_id +msgid "The payment's currency." +msgstr "" + +#. module: account_payment_multi_deduction +#. odoo-python +#: code:addons/account_payment_multi_deduction/wizard/account_payment_register.py:0 +#, python-format +msgid "The total deduction should be %s" +msgstr "" + +#. module: account_payment_multi_deduction +#: model_terms:ir.ui.view,arch_db:account_payment_multi_deduction.view_account_payment_register_form +msgid "Total Deduction" +msgstr "" diff --git a/account_payment_notification/i18n/it.po b/account_payment_notification/i18n/it.po new file mode 100644 index 0000000000..c966aaf176 --- /dev/null +++ b/account_payment_notification/i18n/it.po @@ -0,0 +1,229 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_notification +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: account_payment_notification +#: model:mail.template,body_html:account_payment_notification.mail_template_notification +msgid "" +"

Dear Azure Interior,

\n" +"

\n" +" Your debit order was processed and sent to the bank.\n" +"

\n" +"

\n" +" Your payment order was processed and sent to the bank.\n" +"

\n" +"

\n" +" It includes the following invoices:\n" +"

\n" +"

\n" +" It includes the following credit notes:\n" +"

\n" +"
    \n" +" \n" +"
  • INV/2022/00001
  • \n" +"
    \n" +" \n" +"
  • INV/2022/00002
  • \n" +"
    \n" +"
\n" +"

Total amount:

\n" +"
\n" +"

Thanks for your cooperation!

\n" +"

--

\n" +"

\n" +" This is an automated notification. Replies will not be monitored nor answered. If you have questions, please contact us by the usual means.\n" +"

\n" +"
\n" +" " +msgstr "" + +#. module: account_payment_notification +#: model_terms:ir.ui.view,arch_db:account_payment_notification.res_config_settings_view_form +msgid "" +"" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields.selection,name:account_payment_notification.selection__res_company__account_payment_notification_method__sms_only +msgid "By SMS" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields.selection,name:account_payment_notification.selection__res_company__account_payment_notification_method__sms_or_email +msgid "By SMS if possible, by email otherwise" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields.selection,name:account_payment_notification.selection__res_company__account_payment_notification_method__all +msgid "By all possible notification means" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields.selection,name:account_payment_notification.selection__res_company__account_payment_notification_method__email_only +msgid "By email" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields.selection,name:account_payment_notification.selection__res_company__account_payment_notification_method__email_or_sms +msgid "By email if possible, by SMS otherwise" +msgstr "" + +#. module: account_payment_notification +#. odoo-python +#: code:addons/account_payment_notification/models/account_payment.py:0 +#, python-format +msgid "Cannot notify partners of these payments: %s" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields,help:account_payment_notification.field_res_company__account_payment_notification_automatic +#: model:ir.model.fields,help:account_payment_notification.field_res_config_settings__account_payment_notification_automatic +#: model_terms:ir.ui.view,arch_db:account_payment_notification.res_config_settings_view_form +msgid "Choose the automatism level when notifying sent payments." +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields,help:account_payment_notification.field_res_company__account_payment_notification_method +#: model:ir.model.fields,help:account_payment_notification.field_res_config_settings__account_payment_notification_method +#: model_terms:ir.ui.view,arch_db:account_payment_notification.res_config_settings_view_form +msgid "" +"Choose the method to notify payments automatically when marked as sent." +msgstr "" + +#. module: account_payment_notification +#: model:ir.model,name:account_payment_notification.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model,name:account_payment_notification.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_payment_notification +#: model:sms.template,body:account_payment_notification.sms_template_notification +msgid "" +"Dear {{ object.partner_id.name }}, the {{ 'debit' if object.payment_type == " +"'inbound' else 'payment' }} order of your {{ 'invoice(s)' if " +"object.reconciled_invoices_type == 'invoice' else 'credit note(s)' }} ({{ " +"\", \".join(object.reconciled_bill_ids.mapped(lambda rec: rec.ref or " +"rec.name) + object.reconciled_invoice_ids.mapped(\"name\")) }}) for the " +"total amount of {{ format_amount(object.amount, object.currency_id, " +"object.partner_id.lang) }} was processed and sent to the bank. Thanks for " +"your cooperation! -- {{ object.company_id.name }}" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields,help:account_payment_notification.field_res_company__account_payment_notification_required +#: model:ir.model.fields,help:account_payment_notification.field_res_config_settings__account_payment_notification_required +msgid "" +"Enable to forbid marking payments as sent if they cannot be notified using " +"the chosen method(s)." +msgstr "" + +#. module: account_payment_notification +#: model_terms:ir.ui.view,arch_db:account_payment_notification.res_config_settings_view_form +msgid "" +"Enable to forbid marking payments as sent if they cannot be notified using " +"the chosen method." +msgstr "" + +#. module: account_payment_notification +#: model_terms:ir.ui.view,arch_db:account_payment_notification.view_account_payment_search +msgid "Has email" +msgstr "" + +#. module: account_payment_notification +#: model_terms:ir.ui.view,arch_db:account_payment_notification.view_account_payment_search +msgid "Has mobile phone" +msgstr "" + +#. module: account_payment_notification +#: model_terms:ir.ui.view,arch_db:account_payment_notification.view_account_payment_search +msgid "Has no email" +msgstr "" + +#. module: account_payment_notification +#: model_terms:ir.ui.view,arch_db:account_payment_notification.view_account_payment_search +msgid "Has no mobile phone" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields,field_description:account_payment_notification.field_account_payment__mobile +msgid "Mobile" +msgstr "" + +#. module: account_payment_notification +#: model:ir.actions.act_window,name:account_payment_notification.action_notifiy_sms_single +msgid "Notifiy by SMS" +msgstr "" + +#. module: account_payment_notification +#: model:ir.actions.act_window,name:account_payment_notification.action_notifiy_mail_single +msgid "Notifiy by email" +msgstr "" + +#. module: account_payment_notification +#: model:ir.actions.server,name:account_payment_notification.action_notifiy_multi +msgid "Notifiy partners" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields.selection,name:account_payment_notification.selection__res_company__account_payment_notification_automatic__auto +msgid "Notify automatically" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields.selection,name:account_payment_notification.selection__res_company__account_payment_notification_automatic__manual +msgid "Notify manually" +msgstr "" + +#. module: account_payment_notification +#: model:mail.template,name:account_payment_notification.mail_template_notification +#: model:sms.template,name:account_payment_notification.sms_template_notification +msgid "Payment notification" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields,field_description:account_payment_notification.field_res_company__account_payment_notification_method +#: model:ir.model.fields,field_description:account_payment_notification.field_res_config_settings__account_payment_notification_method +msgid "Payment notification method" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields,field_description:account_payment_notification.field_res_company__account_payment_notification_automatic +#: model:ir.model.fields,field_description:account_payment_notification.field_res_config_settings__account_payment_notification_automatic +msgid "Payment notifications automatism" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model,name:account_payment_notification.model_account_payment +msgid "Payments" +msgstr "" + +#. module: account_payment_notification +#: model:ir.model.fields,field_description:account_payment_notification.field_res_company__account_payment_notification_required +#: model:ir.model.fields,field_description:account_payment_notification.field_res_config_settings__account_payment_notification_required +msgid "Require payment notifications" +msgstr "" + +#. module: account_payment_notification +#: model:mail.template,subject:account_payment_notification.mail_template_notification +msgid "" +"{{ object.company_id.name }} Payment Notification (Ref {{ object.name or " +"'n/a' }})" +msgstr "" diff --git a/account_payment_order/README.rst b/account_payment_order/README.rst index cbfc9dc98f..d2b13154d0 100644 --- a/account_payment_order/README.rst +++ b/account_payment_order/README.rst @@ -7,7 +7,7 @@ Account Payment Order !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:156f2c601182fed4b6ec859ce2f42939b53a6f73944c0836e6c828f7b8e594be + !! source digest: sha256:a95ab4ab71d9847c47779890f553ee70556cb249de2b0f17787626504a6816a2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png diff --git a/account_payment_order/__manifest__.py b/account_payment_order/__manifest__.py index 6645781119..6dc487268c 100644 --- a/account_payment_order/__manifest__.py +++ b/account_payment_order/__manifest__.py @@ -9,7 +9,7 @@ { "name": "Account Payment Order", - "version": "16.0.1.6.2", + "version": "16.0.1.6.3", "license": "AGPL-3", "author": "ACSONE SA/NV, " "Therp BV, " diff --git a/account_payment_order/i18n/account_payment_order.pot b/account_payment_order/i18n/account_payment_order.pot index eb5c048087..ec8296a293 100644 --- a/account_payment_order/i18n/account_payment_order.pot +++ b/account_payment_order/i18n/account_payment_order.pot @@ -750,15 +750,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/am.po b/account_payment_order/i18n/am.po index 19ce24dab1..892034379a 100644 --- a/account_payment_order/i18n/am.po +++ b/account_payment_order/i18n/am.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/ar.po b/account_payment_order/i18n/ar.po index 3045e6b02a..2ae1493641 100644 --- a/account_payment_order/i18n/ar.po +++ b/account_payment_order/i18n/ar.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/ca.po b/account_payment_order/i18n/ca.po index f48c3af79a..03172b7be3 100644 --- a/account_payment_order/i18n/ca.po +++ b/account_payment_order/i18n/ca.po @@ -785,17 +785,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "No hi ha cap mode de pagament a la factura %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" -"No s'ha trobat cap gestor per a aquest mètode de pagament. Potser no heu " -"instal·lat el mòdul Odoo relacionat." - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 @@ -1296,6 +1285,14 @@ msgstr "" "altrament, es crearan ordres de pagament noves (una per cada mode de " "pagament)." +#, python-format +#~ msgid "" +#~ "No handler for this payment method. Maybe you haven't installed the " +#~ "related Odoo module." +#~ msgstr "" +#~ "No s'ha trobat cap gestor per a aquest mètode de pagament. Potser no heu " +#~ "instal·lat el mòdul Odoo relacionat." + #~ msgid "SMS Delivery error" #~ msgstr "Error d'enviament de missatge" diff --git a/account_payment_order/i18n/ca_ES.po b/account_payment_order/i18n/ca_ES.po index e018ba8276..9a6736d9fe 100644 --- a/account_payment_order/i18n/ca_ES.po +++ b/account_payment_order/i18n/ca_ES.po @@ -753,15 +753,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/cs.po b/account_payment_order/i18n/cs.po index 0286915ee7..0a6937279d 100644 --- a/account_payment_order/i18n/cs.po +++ b/account_payment_order/i18n/cs.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/da_DK.po b/account_payment_order/i18n/da_DK.po index 748cd3ca35..aef8c8d778 100644 --- a/account_payment_order/i18n/da_DK.po +++ b/account_payment_order/i18n/da_DK.po @@ -760,15 +760,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/de.po b/account_payment_order/i18n/de.po index 09dbeb1fab..29b29a4308 100644 --- a/account_payment_order/i18n/de.po +++ b/account_payment_order/i18n/de.po @@ -762,15 +762,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "Kein Zahlungsmodus auf Rechnung %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/el_GR.po b/account_payment_order/i18n/el_GR.po index a984dc25d7..a78d65c88f 100644 --- a/account_payment_order/i18n/el_GR.po +++ b/account_payment_order/i18n/el_GR.po @@ -759,15 +759,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/es.po b/account_payment_order/i18n/es.po index 33ab0c10d4..a21eec64d0 100644 --- a/account_payment_order/i18n/es.po +++ b/account_payment_order/i18n/es.po @@ -795,17 +795,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "No hay modo de pago en la factura %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" -"Sin manejador para este método de pago. Tal vez no ha instalado el módulo de " -"Odoo relacionado." - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 @@ -1318,6 +1307,14 @@ msgid "otherwise, new payment orders will be created (one per payment mode)." msgstr "" "En caso contrario, se crearán nuevas órdenes (una por cada modo de pago)." +#, python-format +#~ msgid "" +#~ "No handler for this payment method. Maybe you haven't installed the " +#~ "related Odoo module." +#~ msgstr "" +#~ "Sin manejador para este método de pago. Tal vez no ha instalado el módulo " +#~ "de Odoo relacionado." + #~ msgid "SMS Delivery error" #~ msgstr "Error de entrega del SMS" diff --git a/account_payment_order/i18n/es_AR.po b/account_payment_order/i18n/es_AR.po index dab4df2918..06550e76b5 100644 --- a/account_payment_order/i18n/es_AR.po +++ b/account_payment_order/i18n/es_AR.po @@ -781,17 +781,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "No hay modo de pago en la factura %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" -"Sin manejador para este método de pago. Tal vez no ha instalado el módulo de " -"Odoo relacionado." - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 @@ -1290,6 +1279,14 @@ msgid "otherwise, new payment orders will be created (one per payment mode)." msgstr "" "En caso contrario, se crearán nuevas órdenes (una por cada modo de pago)." +#, python-format +#~ msgid "" +#~ "No handler for this payment method. Maybe you haven't installed the " +#~ "related Odoo module." +#~ msgstr "" +#~ "Sin manejador para este método de pago. Tal vez no ha instalado el módulo " +#~ "de Odoo relacionado." + #~ msgid "SMS Delivery error" #~ msgstr "Error de entrega de SMS" diff --git a/account_payment_order/i18n/es_CL.po b/account_payment_order/i18n/es_CL.po index 969c8aefc9..3e1b553553 100644 --- a/account_payment_order/i18n/es_CL.po +++ b/account_payment_order/i18n/es_CL.po @@ -782,17 +782,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "Sin modo de pago en la factura %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" -"No hay administrador para este método de pago. Tal vez no haya instalado el " -"módulo Odoo relacionado." - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 @@ -1290,6 +1279,14 @@ msgid "otherwise, new payment orders will be created (one per payment mode)." msgstr "" "de lo contrario, se crearán nuevos pagos de nómina (una por modo de pago)." +#, python-format +#~ msgid "" +#~ "No handler for this payment method. Maybe you haven't installed the " +#~ "related Odoo module." +#~ msgstr "" +#~ "No hay administrador para este método de pago. Tal vez no haya instalado " +#~ "el módulo Odoo relacionado." + #~ msgid "SMS Delivery error" #~ msgstr "Error de entrega de SMS" diff --git a/account_payment_order/i18n/es_CR.po b/account_payment_order/i18n/es_CR.po index 8069d9b865..55277f8750 100644 --- a/account_payment_order/i18n/es_CR.po +++ b/account_payment_order/i18n/es_CR.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/es_EC.po b/account_payment_order/i18n/es_EC.po index 011e9e2503..301dc5124f 100644 --- a/account_payment_order/i18n/es_EC.po +++ b/account_payment_order/i18n/es_EC.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/es_ES.po b/account_payment_order/i18n/es_ES.po index 851f3f983d..4057064f3a 100644 --- a/account_payment_order/i18n/es_ES.po +++ b/account_payment_order/i18n/es_ES.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/es_MX.po b/account_payment_order/i18n/es_MX.po index 313a3d4d3b..06064cc644 100644 --- a/account_payment_order/i18n/es_MX.po +++ b/account_payment_order/i18n/es_MX.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/es_VE.po b/account_payment_order/i18n/es_VE.po index 99ef5d7037..6accb30568 100644 --- a/account_payment_order/i18n/es_VE.po +++ b/account_payment_order/i18n/es_VE.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/et.po b/account_payment_order/i18n/et.po index 22fbe823dc..90e6f0c596 100644 --- a/account_payment_order/i18n/et.po +++ b/account_payment_order/i18n/et.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/fi.po b/account_payment_order/i18n/fi.po index ace59b5c77..1694d39e62 100644 --- a/account_payment_order/i18n/fi.po +++ b/account_payment_order/i18n/fi.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/fr.po b/account_payment_order/i18n/fr.po index 89fba910a4..f4743a8766 100644 --- a/account_payment_order/i18n/fr.po +++ b/account_payment_order/i18n/fr.po @@ -795,17 +795,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "Pas de mode de paiement sur la facture %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" -"Aucun gestionnaire pour ce mode de paiement. Vous n'avez peut-être pas " -"installé le module Odoo associé." - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 @@ -1317,6 +1306,14 @@ msgid "otherwise, new payment orders will be created (one per payment mode)." msgstr "" "Sinon, de nouveaux ordres de paiement seront créés (un par mode de paiement)." +#, python-format +#~ msgid "" +#~ "No handler for this payment method. Maybe you haven't installed the " +#~ "related Odoo module." +#~ msgstr "" +#~ "Aucun gestionnaire pour ce mode de paiement. Vous n'avez peut-être pas " +#~ "installé le module Odoo associé." + #~ msgid "SMS Delivery error" #~ msgstr "Erreur d'envoi SMS" diff --git a/account_payment_order/i18n/fr_FR.po b/account_payment_order/i18n/fr_FR.po index 2d6ea597fc..102121233d 100644 --- a/account_payment_order/i18n/fr_FR.po +++ b/account_payment_order/i18n/fr_FR.po @@ -784,17 +784,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "Pas de mode de paiement sur la facture %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" -"Aucun gestionnaire pour ce mode de paiement. Vous n'avez peut-être pas " -"installé le module Odoo associé." - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 @@ -1293,6 +1282,14 @@ msgid "otherwise, new payment orders will be created (one per payment mode)." msgstr "" "sinon, de nouveaux ordres de paiement seront créés (un par mode de paiement)." +#, python-format +#~ msgid "" +#~ "No handler for this payment method. Maybe you haven't installed the " +#~ "related Odoo module." +#~ msgstr "" +#~ "Aucun gestionnaire pour ce mode de paiement. Vous n'avez peut-être pas " +#~ "installé le module Odoo associé." + #, python-format #~ msgid "" #~ "No Payment Line created for invoice %s because it already exists or " diff --git a/account_payment_order/i18n/gl.po b/account_payment_order/i18n/gl.po index 69bc601fe8..18393ae656 100644 --- a/account_payment_order/i18n/gl.po +++ b/account_payment_order/i18n/gl.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/hr.po b/account_payment_order/i18n/hr.po index 156333ccf1..a118f4b19e 100644 --- a/account_payment_order/i18n/hr.po +++ b/account_payment_order/i18n/hr.po @@ -763,15 +763,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/it.po b/account_payment_order/i18n/it.po index 3e50467ba6..ea800c7781 100644 --- a/account_payment_order/i18n/it.po +++ b/account_payment_order/i18n/it.po @@ -759,15 +759,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/lt.po b/account_payment_order/i18n/lt.po index 6200276081..5530972483 100644 --- a/account_payment_order/i18n/lt.po +++ b/account_payment_order/i18n/lt.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/nb_NO.po b/account_payment_order/i18n/nb_NO.po index b1d325e740..aa2b40359b 100644 --- a/account_payment_order/i18n/nb_NO.po +++ b/account_payment_order/i18n/nb_NO.po @@ -767,15 +767,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/nl.po b/account_payment_order/i18n/nl.po index 5ee33c301d..ced9dd2618 100644 --- a/account_payment_order/i18n/nl.po +++ b/account_payment_order/i18n/nl.po @@ -783,15 +783,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "Geen betaalmode van factuur %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/nl_BE.po b/account_payment_order/i18n/nl_BE.po index 8eab07bc84..07647df0c3 100644 --- a/account_payment_order/i18n/nl_BE.po +++ b/account_payment_order/i18n/nl_BE.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/nl_NL.po b/account_payment_order/i18n/nl_NL.po index 51a06e2317..eee7fabbb0 100644 --- a/account_payment_order/i18n/nl_NL.po +++ b/account_payment_order/i18n/nl_NL.po @@ -759,15 +759,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/pl.po b/account_payment_order/i18n/pl.po index 723b86b276..d40411c0fc 100644 --- a/account_payment_order/i18n/pl.po +++ b/account_payment_order/i18n/pl.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/pt.po b/account_payment_order/i18n/pt.po index 988c050cea..e24725fe8e 100644 --- a/account_payment_order/i18n/pt.po +++ b/account_payment_order/i18n/pt.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/pt_BR.po b/account_payment_order/i18n/pt_BR.po index 95c2d41dec..2b1382ff0b 100644 --- a/account_payment_order/i18n/pt_BR.po +++ b/account_payment_order/i18n/pt_BR.po @@ -763,15 +763,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/pt_PT.po b/account_payment_order/i18n/pt_PT.po index f659146eb9..5f900b6290 100644 --- a/account_payment_order/i18n/pt_PT.po +++ b/account_payment_order/i18n/pt_PT.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/ro.po b/account_payment_order/i18n/ro.po index be65e8baae..a1d33a887f 100644 --- a/account_payment_order/i18n/ro.po +++ b/account_payment_order/i18n/ro.po @@ -758,15 +758,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/ru.po b/account_payment_order/i18n/ru.po index 2716940418..87f69b7c5d 100644 --- a/account_payment_order/i18n/ru.po +++ b/account_payment_order/i18n/ru.po @@ -759,15 +759,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/sl.po b/account_payment_order/i18n/sl.po index dc0d111eab..cd67b8f8e6 100644 --- a/account_payment_order/i18n/sl.po +++ b/account_payment_order/i18n/sl.po @@ -764,15 +764,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/sv.po b/account_payment_order/i18n/sv.po index c33c21efdb..b211a4c013 100644 --- a/account_payment_order/i18n/sv.po +++ b/account_payment_order/i18n/sv.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "Inget betalningssätt på faktura %s" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/th.po b/account_payment_order/i18n/th.po index 7077e978b0..d834e37e3e 100644 --- a/account_payment_order/i18n/th.po +++ b/account_payment_order/i18n/th.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/tr.po b/account_payment_order/i18n/tr.po index 1e265371b5..a9cb4a1adb 100644 --- a/account_payment_order/i18n/tr.po +++ b/account_payment_order/i18n/tr.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/i18n/vi.po b/account_payment_order/i18n/vi.po index 4303239b53..114ee2b492 100644 --- a/account_payment_order/i18n/vi.po +++ b/account_payment_order/i18n/vi.po @@ -757,15 +757,6 @@ msgstr "" msgid "No Payment Mode on invoice %s" msgstr "" -#. module: account_payment_order -#. odoo-python -#: code:addons/account_payment_order/models/account_payment_order.py:0 -#, python-format -msgid "" -"No handler for this payment method. Maybe you haven't installed the related " -"Odoo module." -msgstr "" - #. module: account_payment_order #. odoo-python #: code:addons/account_payment_order/models/account_move.py:0 diff --git a/account_payment_order/models/account_payment_order.py b/account_payment_order/models/account_payment_order.py index 76330fa92a..331954c711 100644 --- a/account_payment_order/models/account_payment_order.py +++ b/account_payment_order/models/account_payment_order.py @@ -376,17 +376,13 @@ def draft2open(self): return True def generate_payment_file(self): - """Returns (payment file as string, filename)""" + """Returns (payment file as string, filename). + + By default, any method not specifically intercepted by extra modules will do + nothing, including the existing manual one. + """ self.ensure_one() - if self.payment_method_id.code == "manual": - return (False, False) - else: - raise UserError( - _( - "No handler for this payment method. Maybe you haven't " - "installed the related Odoo module." - ) - ) + return (False, False) def open2generated(self): self.ensure_one() diff --git a/account_payment_order/static/description/index.html b/account_payment_order/static/description/index.html index 073d06e0a3..e80b77bba2 100644 --- a/account_payment_order/static/description/index.html +++ b/account_payment_order/static/description/index.html @@ -366,7 +366,7 @@

Account Payment Order

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:156f2c601182fed4b6ec859ce2f42939b53a6f73944c0836e6c828f7b8e594be +!! source digest: sha256:a95ab4ab71d9847c47779890f553ee70556cb249de2b0f17787626504a6816a2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Mature License: AGPL-3 OCA/bank-payment Translate me on Weblate Try me on Runboat

This module adds support for payment orders and debit orders.

diff --git a/account_payment_promissory_note/README.rst b/account_payment_promissory_note/README.rst index 32be2e50d4..907dff74c5 100644 --- a/account_payment_promissory_note/README.rst +++ b/account_payment_promissory_note/README.rst @@ -7,7 +7,7 @@ Account Payment Promissory Note !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2dbe385a70699263c8b8669892cf3210e173a8dcdc95a3f899be8da1328c4c1c + !! source digest: sha256:75ac9ad5c25acba585f2ab2391e886b2aca09fdcfe9e7b77e215a1dd00f0efa3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/account_payment_promissory_note/__manifest__.py b/account_payment_promissory_note/__manifest__.py index 26aa4f3afa..db5cf2e1b9 100644 --- a/account_payment_promissory_note/__manifest__.py +++ b/account_payment_promissory_note/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Account Payment Promissory Note", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "license": "AGPL-3", "author": "Tecnativa," "Odoo Community Association (OCA)", "category": "Invoicing Management", diff --git a/account_payment_promissory_note/i18n/it.po b/account_payment_promissory_note/i18n/it.po new file mode 100644 index 0000000000..3c31461cd1 --- /dev/null +++ b/account_payment_promissory_note/i18n/it.po @@ -0,0 +1,61 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_promissory_note +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-21 17:34+0000\n" +"Last-Translator: mymage \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_payment_promissory_note +#: model_terms:ir.ui.view,arch_db:account_payment_promissory_note.view_account_payment_form_multi +msgid "" +"" + +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment_register__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__date_due +msgid "Due Date" +msgstr "Data scadenza" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_payment +msgid "Payments" +msgstr "Pagamenti" + +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment_register__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__promissory_note +#: model_terms:ir.ui.view,arch_db:account_payment_promissory_note.view_account_payment_search +msgid "Promissory Note" +msgstr "Nota promissorio" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_promissory_note_mixin +msgid "Promissory Note Mixin" +msgstr "Mixin nota promissorio" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_payment_register +msgid "Register Payment" +msgstr "Registra pagamento" diff --git a/account_payment_promissory_note/static/description/index.html b/account_payment_promissory_note/static/description/index.html index 441e575716..95b29bdd8b 100644 --- a/account_payment_promissory_note/static/description/index.html +++ b/account_payment_promissory_note/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

Account Payment Promissory Note

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2dbe385a70699263c8b8669892cf3210e173a8dcdc95a3f899be8da1328c4c1c +!! source digest: sha256:75ac9ad5c25acba585f2ab2391e886b2aca09fdcfe9e7b77e215a1dd00f0efa3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runboat

This module allows you to set a date due in a payment, as promissory notes require.

diff --git a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py index 7b8dd9748e..b5777c8348 100644 --- a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py +++ b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py @@ -2,14 +2,21 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). import datetime -from odoo.tests import Form +from odoo.tests import Form, tagged from odoo.tests.common import TransactionCase +@tagged("-at_install", "post_install") class TestAccountPaymentPromissoryNote(TransactionCase): def setUp(self): super().setUp() - self.payment_method = self.env.ref("account.account_payment_method_manual_in") + self.company = self.env.user.company_id + self.default_journal_cash = self.env["account.journal"].search( + [("company_id", "=", self.company.id), ("type", "=", "cash")], limit=1 + ) + self.inbound_payment_method_line = ( + self.default_journal_cash.inbound_payment_method_line_ids[0] + ) self.company = self.env.ref("base.main_company") partner = self.env.ref("base.partner_demo") self.invoice_1 = self.env["account.move"].create( @@ -39,11 +46,9 @@ def test_1_onchange_promissory_note_without_invoices(self): payment = self.env["account.payment"].create( { "payment_type": "inbound", - "payment_method_line_id": self.payment_method.id, + "payment_method_line_id": self.inbound_payment_method_line.id, "amount": 50.00, - "journal_id": self.env["account.journal"] - .search([("type", "=", "sale")], limit=1) - .id, + "journal_id": self.default_journal_cash.id, } ) payment.date_due = "2020-09-21" diff --git a/account_payment_return_import_iso20022/i18n/it.po b/account_payment_return_import_iso20022/i18n/it.po new file mode 100644 index 0000000000..7c5fe07f91 --- /dev/null +++ b/account_payment_return_import_iso20022/i18n/it.po @@ -0,0 +1,1257 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_return_import_iso20022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC09 +msgid "Account currency is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC01 +msgid "Account number is invalid or missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC04 +msgid "" +"Account number specified has been closed on the bank of account's books." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC06 +msgid "" +"Account specified is blocked, prohibiting posting of transactions against " +"it." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC12 +msgid "Account type missing or invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG04 +msgid "Agent country code is missing or invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AGNT +msgid "Agent in the payment workflow is incorrect" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB07 +msgid "Agent of message is not online." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG10 +msgid "Agent of message is suspended from the Real Time Payment system." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS07 +msgid "" +"All actions concerning the order could be done by the EBICS bank server" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM12 +msgid "Amount is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM04 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM07 +msgid "" +"Amount of funds available to cover specified message amount is insufficient." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM09 +msgid "Amount received is not the amount agreed or expected" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS02 +msgid "An authorized user has cancelled the order" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DT05 +msgid "" +"Associated message, payment information block or transaction was received " +"after agreed processing cut-off date, i.e., date in the past." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_TM01 +msgid "" +"Associated message, payment information block, or transaction was received " +"after agreed processing cut-off time." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC05 +msgid "BIC identifier is invalid or missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_ED03 +msgid "Balance of payments complementary info is requested" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG02 +msgid "Bank Operation code specified in the message is not valid for receiver" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC01 +msgid "" +"Bank identifier code specified in the message has an incorrect format " +"(formerly IncorrectFormatForRoutingCode)." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC02 +msgid "Bank identifier is invalid or missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_SL12 +msgid "" +"Blacklisting service offered by the Debtor Agent, Debtor included the " +"Creditor on his “Blacklist”. In the Blacklist the Debtor may list all " +"Creditors not allowed to debit Debtor bank account" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC08 +msgid "Branch code is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CUST +msgid "Cancellation requested by the Debtor" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF06 +msgid "Category Purpose code is missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR10 +msgid "Character set supplied not valid for the country and payment type." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE19 +msgid "Charge bearer code for transaction type is invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF09 +msgid "Cheque number missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB02 +msgid "Clearing process aborted due to a fatal error.   " +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB01 +msgid "Clearing process aborted due to timeout." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF11 +msgid "Clearing request rejected due it being subject to an abort operation." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC08 +msgid "ClearingSystemMemberidentifier is invalid or missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RCON +msgid "Conflict with R-Message" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE18 +msgid "Contact details missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH15 +msgid "" +"Content Remittance Information/Structured includes more than 140 characters" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH16 +msgid "Content is incorrect" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM16 +msgid "Control Sum at the Group level is invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM17 +msgid "Control Sum at the Payment Information level is invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_ED01 +msgid "Correspondent bank not possible." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE09 +msgid "Country code is missing or Invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE14 +msgid "Country code of creditor's residence is missing or Invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE13 +msgid "Country code of debtor's residence is missing or Invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE12 +msgid "Country code of residence is missing or Invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CERI +msgid "" +"Credit transfer is not tagged as an Extended Remittance Information (ERI) " +"transaction but contains ERI." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_NERI +msgid "" +"Credit transfer is tagged as an Extended Remittance Information (ERI) " +"transaction but does not contain ERI." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB08 +msgid "Creditor Agent is not online." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG11 +msgid "" +"Creditor Agent of message is suspended from the Real Time Payment system." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC07 +msgid "Creditor BIC identifier is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC10 +msgid "Creditor ClearingSystemMember identifier is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH12 +msgid "Creditor Identifier is ambiguous at Transaction Level" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC12 +msgid "Creditor Scheme Id is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC11 +msgid "Creditor account currency is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC07 +msgid "Creditor account number closed" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC03 +msgid "Creditor account number invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC14 +msgid "Creditor account type missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG06 +msgid "Creditor agent country code is missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC04 +msgid "Creditor bank identifier is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CNOR +msgid "Creditor bank is not registered under this BIC in the CSM" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE11 +msgid "Creditor country code is missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE22 +msgid "Creditor name is missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE17 +msgid "Creditor or Ultimate Creditor identification code missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_MD05 +msgid "" +"Creditor or creditor's agent should not have collected the direct debit" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CURR +msgid "Currency of the payment is incorrect" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0B +msgid "Data signature for the format is not available or invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0A +msgid "Data signature is required." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC06 +msgid "Debtor BIC identifier is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC09 +msgid "Debtor ClearingSystemMember identifier is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG07 +msgid "Debtor account cannot be debited for a generic reason." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC10 +msgid "Debtor account currency is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC05 +msgid "Debtor account number closed" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC02 +msgid "Debtor account number invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC13 +msgid "Debtor account type missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG05 +msgid "Debtor agent country code is missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC03 +msgid "Debtor bank identifier is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DNOR +msgid "Debtor bank is not registered under this BIC in the CSM" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE10 +msgid "Debtor country code is missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE08 +msgid "Debtor name is missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE16 +msgid "Debtor or Ultimate Debtor identification code missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_SL14 +msgid "" +"Due to Maximum allowed Direct Debit Transaction amount service offered by " +"the Debtor Agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_SL13 +msgid "" +"Due to Maximum allowed Direct Debit Transactions per period service offered " +"by the Debtor Agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_SL02 +msgid "Due to specific service offered by the Creditor Agent" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_SL01 +msgid "Due to specific service offered by the Debtor Agent" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM05 +msgid "Duplication" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH17 +msgid "Element is not allowed" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH07 +msgid "Element is not to be used at B- and C-Level" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DU04 +msgid "End To End ID is not unique." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_MD07 +msgid "End customer is deceased." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE06 +msgid "" +"End customer specified is not known at associated Sort/National Bank Code or" +" does no longer exist in the books" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF08 +msgid "End to End Id missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DT06 +msgid "" +"Execution Date has been modified in order for transaction to be processed" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_ERIN +msgid "Extended Remittance Information (ERI) option is not supported." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF01 +msgid "File Format incomplete or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS18 +msgid "" +"File cannot be tested, the complete order has to be repeated. This code is " +"returned in the event of a malfunction during the signature check, e.g. not " +"enough storage space." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF10 +msgid "" +"File or transaction cannot be processed due to technical issues at the bank " +"side" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DT04 +msgid "Future date not supported" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE15 +msgid "Identification code missing or invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE01 +msgid "" +"Identification of end customer is not consistent with associated account " +"number. (formerly CreditorConsistency)." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:ir.model,name:account_payment_return_import_iso20022.model_payment_return_import +msgid "Import Payment Return" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_G003 +msgid "" +"In a FIToFI Customer Credit Transfer: Credit to creditor’s account is " +"pending receipt of required documents. The Status Originator has requested " +"creditor to provide additional documentation. Update will follow from the " +"Status Originator." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_G004 +msgid "" +"In a FIToFI Customer Credit Transfer: Credit to the creditor’s account is " +"pending, status Originator is waiting for funds provided via a cover. Update" +" will follow from the Status Originator." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_G001 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_G002 +msgid "" +"In a FIToFI Customer Credit Transfer: Credit to the creditor’s account may " +"not be confirmed same day. Update will follow from the Status Originator." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_G000 +msgid "" +"In a FIToFI Customer Credit Transfer: The Status Originator transferred the " +"payment to the next Agent or to a Market Infrastructure. The payment " +"transfer is not tracked. No further updates will follow from the Status " +"Originator." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH10 +msgid "Information on mandate changes are missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DU05 +msgid "Instruction ID is not unique." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_ED06 +msgid "Interbank settlement system not available." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RC11 +msgid "Intermediary Agent is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DT02 +msgid "Invalid creation date and time in Group Header (eg, historic date)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DT01 +msgid "Invalid date (eg, wrong or missing settlement date)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DT03 +msgid "Invalid non bank processing date (eg, weekend or local public holiday)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR11 +msgid "Invalid or missing identification of a bank proprietary service." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR12 +msgid "" +"Invalid or missing identification required within a particular country or " +"payment type." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF05 +msgid "Local Instrument code is missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH09 +msgid "Mandate changes are not allowed" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_MD02 +msgid "Mandate related information data required by the scheme is missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH21 +msgid "Mandatory element is missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DU01 +msgid "Message Identification is not unique." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE20 +msgid "Name length exceeds local rules for payment type." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE21 +msgid "" +"Name missing or invalid. Generic usage if cannot specifically identify " +"debtor or creditor." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_MD01 +msgid "No Mandate" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH20 +msgid "Number of decimal points not compatible with the currency" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM19 +msgid "Number of transactions at the Group level is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM20 +msgid "Number of transactions at the Payment Information level is invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM18 +msgid "Number of transactions is invalid or missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS17 +msgid "Order data and signatures don’t match" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH13 +msgid "Original Debtor Account is not to be used" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH14 +msgid "Original Debtor Agent is not to be used" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG09 +msgid "Original payment never received." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE05 +msgid "Party who initiated the message is not recognised by the end customer" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DU02 +msgid "Payment Information Block is not unique." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF03 +msgid "Payment Type Information is missing or invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_G005 +msgid "Payment has been delivered to creditor agent with service level." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_G006 +msgid "Payment has been delivered to creditor agent without service level." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DUPL +msgid "Payment is a duplicate of another payment" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:ir.model,name:account_payment_return_import_iso20022.model_payment_return_line +msgid "Payment return lines" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF07 +msgid "Purpose is missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_MS03 +msgid "Reason has not been specified by agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_MS02 +msgid "Reason has not been specified by end customer" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_NARR +msgid "" +"Reason is provided as narrative information in the additional reason " +"information." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR04 +msgid "Regulatory Reason" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR05 +msgid "" +"Regulatory or Central Bank Reporting information missing, incomplete or " +"invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR07 +msgid "" +"Remittance information structure does not comply with rules for payment " +"type." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR08 +msgid "" +"Remittance information truncated to comply with rules for payment type." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_S004 +msgid "" +"Request for Cancellation has been acknowledged as delivered to payment " +"processing/last payment processing agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_S003 +msgid "" +"Request for Cancellation has been forwarded to the payment processing/last " +"payment processing agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_S000 +msgid "Request for Cancellation is acknowledged following validation." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_MD06 +msgid "Return of funds requested by end customer" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH22 +msgid "SDD CORE and B2B not permitted within one message" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF04 +msgid "Service Level code is missing or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB03 +msgid "Settlement aborted due to timeout.   " +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_ED05 +msgid "Settlement of the transaction has failed." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB04 +msgid "Settlement process aborted due to a fatal error.   " +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_ID01 +msgid "" +"Signature file was sent to the bank but the corresponding original file has " +"not been sent yet." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0H +msgid "Signer is not allowed to sign for this account." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0G +msgid "Signer is not allowed to sign this operation type." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM02 +msgid "Specific transaction/message amount is greater than allowed maximum" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE04 +msgid "" +"Specification of creditor's address, which is required for payment, is " +"missing/not correct (formerly IncorrectCreditorAddress)." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_BE07 +msgid "" +"Specification of debtor's address, which is required for payment, is " +"missing/not correct." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR03 +msgid "" +"Specification of the creditor’s name and/or address needed for regulatory " +"requirements is insufficient or missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR01 +msgid "" +"Specification of the debtor’s account or unique identification needed for " +"reasons of regulatory requirements is insufficient or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR02 +msgid "" +"Specification of the debtor’s name and/or address needed for regulatory " +"requirements is insufficient or missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM03 +msgid "" +"Specified message amount is an non processable currency outside of existing " +"agreement" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM01 +msgid "Specified message amount is equal to zero" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM06 +msgid "Specified transaction amount is less than agreed minimum." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR09 +msgid "Structured creditor reference invalid or missing." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM10 +msgid "Sum of instructed amounts does not equal the control sum." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_FF02 +msgid "" +"Syntax error reason is provided as narrative information in the additional " +"reason information." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RR06 +msgid "Tax information missing, incomplete or invalid." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_TS01 +msgid "The (technical) transmission of the file was successful." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AC15 +msgid "The account details for the counterparty have changed." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS13 +msgid "" +"The authority of signer certification sending the certificate is unknown for" +" the first signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS23 +msgid "" +"The authority of signer certification sending the certificate is unknown for" +" the second signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0F +msgid "" +"The authority of the signer certification sending the certificate is " +"unknown." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS12 +msgid "The certificate is not present for the first signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS22 +msgid "The certificate is not present for the second signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS11 +msgid "" +"The certificate is not valid (revoked or not active) for the first signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS21 +msgid "" +"The certificate is not valid (revoked or not active) for the second signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS10 +msgid "The certificate is revoked for the first signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS20 +msgid "The certificate is revoked for the second signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS08 +msgid "The decompression of the file was not successful" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS09 +msgid "The decryption of the file was not successful" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS01 +msgid "The electronic signature(s) is/are correct" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_TD02 +msgid "The file cannot be read (e.g. unknown format)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_TD03 +msgid "The file format is incomplete or invalid" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0K +msgid "The number of transaction is over the number allowed for this signer." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS25 +msgid "The order file was deleted by the bank server" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS05 +msgid "The order was correct and could be forwarded for postprocessing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS04 +msgid "" +"The order was rejected by the bank side (for reasons concerning content)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS06 +msgid "The order was transferred to VEU" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_TS04 +msgid "The order was transferred to pass by accompanying note signed by hand" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS16 +msgid "" +"The public key version is not correct. This code is returned when a customer" +" sends signature files to the financial institution after conversion from an" +" older program version (old ES format) to a new program version (new ES " +"format) without having carried out re-initialisation with regard to a public" +" key change." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS15 +msgid "The same signature has already been sent to the bank" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS26 +msgid "The same user has signed multiple times" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0E +msgid "The signer certificate is not present." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0D +msgid "The signer certificate is not valid (revoked or not active)." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS0C +msgid "The signer certificate is revoked." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_TA01 +msgid "" +"The transmission of the file was not successful – it had to be aborted (for " +"technical reasons)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS27 +msgid "The user is not yet activated (technically)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS14 +msgid "The user is unknown on the server" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS03 +msgid "The user’s attempt to cancel the order was not successful" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS19 +msgid "" +"The user’s rights (concerning his signature) are insufficient to execute the" +" order" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_TD01 +msgid "There is no data available (for download)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM15 +msgid "Transaction amount below minimum set by clearing system" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM14 +msgid "Transaction amount exceeds limits agreed between bank and client" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM21 +msgid "Transaction amount exceeds limits agreed between bank and client." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM13 +msgid "Transaction amount exceeds limits set by clearing system" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM23 +msgid "Transaction amount exceeds settlement limit." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM11 +msgid "Transaction currency is invalid or missing" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG08 +msgid "Transaction failed due to invalid or missing user or access right" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG01 +msgid "Transaction forbidden on this type of account (formerly NoAgreement)" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DU03 +msgid "Transaction is not unique." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_RF01 +msgid "Transaction reference is not unique within the message." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB09 +msgid "Transaction stopped due to error at the Creditor Agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB10 +msgid "Transaction stopped due to error at the Instructed Agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB05 +msgid "Transaction stopped due to timeout at the Creditor Agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AB06 +msgid "Transaction stopped due to timeout at the Instructed Agent." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AG03 +msgid "Transaction type not supported/authorized on this account" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_AM22 +msgid "" +"Unable to apply zero amount to designated account. For example, where the " +"rules of a service allow the use of zero amount payments, however the back-" +"office system is unable to apply the funds to the account. If the rules of a" +" service prohibit the use of zero amount payments, then code AM01 is used to" +" report the error condition." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_S001 +msgid "" +"Unique End-to-end Transaction Reference (UETR) relating to a payment has " +"been identified as being associated with a Request for Cancellation." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_S002 +msgid "" +"Unique End-to-end Transaction Reference (UETR) relating to a payment has " +"been prevent from traveling across a messaging network." +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH11 +msgid "Value in Creditor Identifier is incorrect" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH03 +msgid "" +"Value in Requested Execution Date or Requested Collection Date is too far in" +" the future" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH04 +msgid "" +"Value in Requested Execution Date or Requested Collection Date is too far in" +" the past" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_CH19 +msgid "" +"Values in Interbank Settlement Date or Requested Collection Date will be set" +" to the next TARGET day" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_DS24 +msgid "Waiting time expired due to incomplete order" +msgstr "" + +#. module: account_payment_return_import_iso20022 +#: model:payment.return.reason,name:account_payment_return_import_iso20022.unpaid_reason_SL11 +msgid "" +"Whitelisting service offered by the Debtor Agent, Debtor has not included " +"the Creditor on its “Whitelist” (yet). In the Whitelist the Debtor may list " +"all allowed Creditors to debit Debtor bank account" +msgstr "" diff --git a/account_payment_term_extension/i18n/it.po b/account_payment_term_extension/i18n/it.po index 9686f7dc40..81260f2b53 100644 --- a/account_payment_term_extension/i18n/it.po +++ b/account_payment_term_extension/i18n/it.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-30 02:46+0000\n" -"PO-Revision-Date: 2023-09-20 20:29+0000\n" -"Last-Translator: Francesco Foresti \n" +"PO-Revision-Date: 2024-02-21 17:34+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "Language: it\n" "MIME-Version: 1.0\n" @@ -152,6 +152,8 @@ msgstr "Percentuale (Importo non tassato)" #, python-format msgid "Percentage of amount untaxed can't be used with foreign currencies" msgstr "" +"La percentuale del valore non tassato non può essere usata con valuta " +"straniera" #. module: account_payment_term_extension #. odoo-python @@ -187,12 +189,12 @@ msgstr "" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term__sequential_lines msgid "Sequential Lines" -msgstr "" +msgstr "Righe sequenziali" #. module: account_payment_term_extension #: model:ir.model.fields,help:account_payment_term_extension.field_account_payment_term_line__amount_round msgid "Sets the amount so that it is a multiple of this value." -msgstr "" +msgstr "Impostare un valore multiplo di questo valore." #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_line__value @@ -202,7 +204,7 @@ msgstr "Tipo" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_line__weeks msgid "Weeks" -msgstr "" +msgstr "Settimane" #. module: account_payment_term_extension #: model_terms:ir.ui.view,arch_db:account_payment_term_extension.view_payment_term_form diff --git a/account_payment_term_extension/i18n/sv.po b/account_payment_term_extension/i18n/sv.po index 7ff80e0897..af5341b915 100644 --- a/account_payment_term_extension/i18n/sv.po +++ b/account_payment_term_extension/i18n/sv.po @@ -9,35 +9,36 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-30 02:46+0000\n" -"PO-Revision-Date: 2018-03-30 02:46+0000\n" -"Last-Translator: OCA Transbot , 2018\n" +"PO-Revision-Date: 2024-02-21 10:36+0000\n" +"Last-Translator: jakobkrabbe \n" "Language-Team: Swedish (https://www.transifex.com/oca/teams/23907/sv/)\n" "Language: sv\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: account_payment_term_extension #: model:account.payment.term,name:account_payment_term_extension.amount_untaxed_lines msgid "10% + 40% + Balance" -msgstr "" +msgstr "10% + 40% + Saldo" #. module: account_payment_term_extension #: model:account.payment.term,name:account_payment_term_extension.sixty_days_end_of_month #: model_terms:account.payment.term,note:account_payment_term_extension.sixty_days_end_of_month msgid "60 Days End of Month" -msgstr "" +msgstr "60 dagar månadens slut" #. module: account_payment_term_extension #: model:ir.model.fields,help:account_payment_term_extension.field_account_payment_term__sequential_lines msgid "Allows to apply a chronological order on lines." -msgstr "" +msgstr "Gör det möjligt att tillämpa en kronologisk ordning på rader." #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_line__amount_round msgid "Amount Rounding" -msgstr "" +msgstr "Avrundning av belopp" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_holiday__create_uid @@ -54,37 +55,37 @@ msgstr "Skapad den" #: code:addons/account_payment_term_extension/models/account_payment_term.py:0 #, python-format msgid "Date %s cannot is both a holiday and a Postponed date" -msgstr "" +msgstr "Datumet %s kan inte vara både en helgdag och ett uppskjutet datum" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_holiday__display_name msgid "Display Name" -msgstr "Visa namn" +msgstr "Visningsnamn" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_holiday__holiday msgid "Holiday" -msgstr "" +msgstr "Semester" #. module: account_payment_term_extension #. odoo-python #: code:addons/account_payment_term_extension/models/account_payment_term.py:0 #, python-format msgid "Holiday %s can only be postponed into the future" -msgstr "" +msgstr "Semester %s kan bara skjutas på framtiden" #. module: account_payment_term_extension #. odoo-python #: code:addons/account_payment_term_extension/models/account_payment_term.py:0 #, python-format msgid "Holiday %s is duplicated in current payment term" -msgstr "" +msgstr "Semester %s är dubblerad i aktuell betalningsperiod" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term__holiday_ids #: model_terms:ir.ui.view,arch_db:account_payment_term_extension.view_payment_term_form msgid "Holidays" -msgstr "" +msgstr "Semester" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_holiday__id @@ -109,39 +110,39 @@ msgstr "Senast uppdaterad" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_holiday__payment_id msgid "Payment" -msgstr "" +msgstr "Betalning" #. module: account_payment_term_extension #: model:ir.model,name:account_payment_term_extension.model_account_payment_term_holiday msgid "Payment Term Holidays" -msgstr "" +msgstr "Betalningsperiod Semester" #. module: account_payment_term_extension #: model:ir.model,name:account_payment_term_extension.model_account_payment_term msgid "Payment Terms" -msgstr "" +msgstr "Betalningsvillkor" #. module: account_payment_term_extension #: model:ir.model,name:account_payment_term_extension.model_account_payment_term_line msgid "Payment Terms Line" -msgstr "" +msgstr "Betalningsvillkor Line" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_line__payment_days msgid "Payment day(s)" -msgstr "" +msgstr "Betalningsdag(ar)" #. module: account_payment_term_extension #. odoo-python #: code:addons/account_payment_term_extension/models/account_payment_term.py:0 #, python-format msgid "Payment days field format is not valid." -msgstr "" +msgstr "Betalningsdagars fältformat är inte giltigt." #. module: account_payment_term_extension #: model:ir.model.fields.selection,name:account_payment_term_extension.selection__account_payment_term_line__value__percent_amount_untaxed msgid "Percent (Untaxed amount)" -msgstr "" +msgstr "Procent (obeskattat belopp)" #. module: account_payment_term_extension #. odoo-python @@ -149,18 +150,19 @@ msgstr "" #, python-format msgid "Percentage of amount untaxed can't be used with foreign currencies" msgstr "" +"Procentandel av obeskattat belopp kan inte användas med utländska valutor" #. module: account_payment_term_extension #. odoo-python #: code:addons/account_payment_term_extension/models/account_payment_term.py:0 #, python-format msgid "Percentages on the Payment Terms lines must be between 0 and 100." -msgstr "" +msgstr "Procenttalen på raden Betalningsvillkor måste vara mellan 0 och 100." #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_holiday__date_postponed msgid "Postponed date" -msgstr "" +msgstr "Uppskjutet datum" #. module: account_payment_term_extension #: model:ir.model.fields,help:account_payment_term_extension.field_account_payment_term_line__payment_days @@ -168,31 +170,36 @@ msgid "" "Put here the day or days when the partner makes the payment. Separate each " "possible payment day with dashes (-), commas (,) or spaces ( )." msgstr "" +"Ange här den dag eller de dagar då partnern gör betalningen. Separera varje " +"möjlig betalningsdag med bindestreck (-), kommatecken (,) eller mellanslag ( " +")." #. module: account_payment_term_extension #: model:ir.model.fields,help:account_payment_term_extension.field_account_payment_term_line__value msgid "Select here the kind of valuation related to this payment terms line." msgstr "" +"Välj här den typ av värdering som är relaterad till denna rad med " +"betalningsvillkor." #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term__sequential_lines msgid "Sequential Lines" -msgstr "" +msgstr "Sekventiella linjer" #. module: account_payment_term_extension #: model:ir.model.fields,help:account_payment_term_extension.field_account_payment_term_line__amount_round msgid "Sets the amount so that it is a multiple of this value." -msgstr "" +msgstr "Ställer in beloppet så att det är en multipel av detta värde." #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_line__value msgid "Type" -msgstr "" +msgstr "Typ" #. module: account_payment_term_extension #: model:ir.model.fields,field_description:account_payment_term_extension.field_account_payment_term_line__weeks msgid "Weeks" -msgstr "" +msgstr "Veckor" #. module: account_payment_term_extension #: model_terms:ir.ui.view,arch_db:account_payment_term_extension.view_payment_term_form @@ -200,3 +207,5 @@ msgid "" "When a payment term coincides with a holiday, it is postponed to the chosen " "date." msgstr "" +"Om ett betalningsvillkor sammanfaller med en helgdag skjuts betalningen upp " +"till det valda datumet." diff --git a/account_reconcile_oca/i18n/it.po b/account_reconcile_oca/i18n/it.po new file mode 100644 index 0000000000..7ada47efd1 --- /dev/null +++ b/account_reconcile_oca/i18n/it.po @@ -0,0 +1,589 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_move_line__invoice_due_date +msgid "Due Date" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Keep suspense move lines mode cannot be unreconciled" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "" diff --git a/account_statement_base/i18n/it.po b/account_statement_base/i18n/it.po new file mode 100644 index 0000000000..f9149ec171 --- /dev/null +++ b/account_statement_base/i18n/it.po @@ -0,0 +1,78 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_statement_base +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-21 17:35+0000\n" +"Last-Translator: mymage \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_statement_base +#: model:ir.actions.act_window,name:account_statement_base.account_bank_statement_line_action +msgid "Bank Statement Lines" +msgstr "Righe estratto conto bancario" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search +msgid "Date" +msgstr "Data" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search +msgid "Journal" +msgstr "Registro" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search +msgid "Label, Ref or Notes" +msgstr "Etichetta, riferimento o note" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search +msgid "Not Reconciled" +msgstr "Non riconciliata" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_form +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_tree +msgid "Notes" +msgstr "Note" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search +msgid "Partner" +msgstr "Partner" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search +msgid "Reconciled" +msgstr "Riconciliata" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_tree +msgid "Revert reconciliation" +msgstr "Ripristina riconciliazione" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_form +msgid "Technical Information" +msgstr "Informazioni tecniche" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search +msgid "To check" +msgstr "Da controllare" + +#. module: account_statement_base +#: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search +msgid "Transaction Type" +msgstr "Tipo transazione" diff --git a/account_tax_group_widget_base_amount/i18n/it.po b/account_tax_group_widget_base_amount/i18n/it.po new file mode 100644 index 0000000000..90b4bca95b --- /dev/null +++ b/account_tax_group_widget_base_amount/i18n/it.po @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_tax_group_widget_base_amount +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" +"Last-Translator: mymage \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_tax_group_widget_base_amount +#. odoo-javascript +#: code:addons/account_tax_group_widget_base_amount/static/src/xml/tax_group.xml:0 +#, python-format +msgid "on" +msgstr "su" diff --git a/auditlog/README.rst b/auditlog/README.rst index d87a30d2f7..eedb185904 100644 --- a/auditlog/README.rst +++ b/auditlog/README.rst @@ -7,7 +7,7 @@ Audit Log !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2039ee278d602299e599882057709985648be6d4915f05ba414522090bbffb68 + !! source digest: sha256:a36a2948051d9d51bd2cbf4139b57cde8de52b573c9c641864d17f9c86d1c2c4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/auditlog/__manifest__.py b/auditlog/__manifest__.py index 0e26af367d..acc65327c9 100644 --- a/auditlog/__manifest__.py +++ b/auditlog/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Audit Log", - "version": "16.0.2.0.3", + "version": "16.0.2.1.0", "author": "ABF OSIELL, Odoo Community Association (OCA)", "license": "AGPL-3", "website": "https://github.com/OCA/server-tools", diff --git a/auditlog/models/rule.py b/auditlog/models/rule.py index 2c60fb4b18..5ed7f42a2d 100644 --- a/auditlog/models/rule.py +++ b/auditlog/models/rule.py @@ -387,6 +387,9 @@ def write_full(self, vals, **kwargs): .with_context(prefetch_fields=False) .read(fields_list) } + # invalidate_recordset method must be called with existing fields + if self._name == "res.users": + vals = self._remove_reified_groups(vals) # Prevent the cache of modified fields from being poisoned by # x2many items inaccessible to the current user. self.invalidate_recordset(vals.keys()) diff --git a/auditlog/static/description/index.html b/auditlog/static/description/index.html index 947458b72f..c48882767b 100644 --- a/auditlog/static/description/index.html +++ b/auditlog/static/description/index.html @@ -366,7 +366,7 @@

Audit Log

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2039ee278d602299e599882057709985648be6d4915f05ba414522090bbffb68 +!! source digest: sha256:a36a2948051d9d51bd2cbf4139b57cde8de52b573c9c641864d17f9c86d1c2c4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module allows the administrator to log user operations performed on data diff --git a/auditlog/tests/test_auditlog.py b/auditlog/tests/test_auditlog.py index 74566f2f6a..9ae1591ea7 100644 --- a/auditlog/tests/test_auditlog.py +++ b/auditlog/tests/test_auditlog.py @@ -5,6 +5,7 @@ from odoo.tests.common import Form, TransactionCase from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG +from odoo.addons.base.models.res_users import name_boolean_group class AuditlogCommon(object): @@ -612,3 +613,81 @@ def test_06_AuditlogFull_unlink_log(self): # Removing auditlog_rule self.auditlog_rule.unlink() + + +class AuditLogRuleTestForUserModel(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + # get User model id + cls.user_model_id = cls.env["ir.model"].search([("model", "=", "res.users")]).id + + # creating auditlog.rule + cls.auditlog_rule = ( + cls.env["auditlog.rule"] + .with_context(tracking_disable=True) + .create( + { + "name": "testrule 01", + "model_id": cls.user_model_id, + "log_read": True, + "log_create": True, + "log_write": True, + "log_unlink": True, + "log_type": "full", + "capture_record": True, + } + ) + ) + + # Subscribe auditlog.rule + cls.auditlog_rule.subscribe() + + # Create user id + cls.user = ( + cls.env["res.users"] + .with_context(no_reset_password=True, tracking_disable=True) + .create( + { + "name": "Test User", + "login": "testuser", + } + ) + ) + cls.group = cls.env.ref("auditlog.group_auditlog_manager") + + cls.auditlog_log = cls.env["auditlog.log"] + + def test_01_AuditlogFull_field_group_write_log(self): + """Change group and check successfully created log""" + self.user.with_context(tracking_disable=True).write( + {"groups_id": [(4, self.group.id)]} + ) + # Checking log is created for testpartner1 + write_log_record = self.auditlog_log.search( + [ + ("model_id", "=", self.auditlog_rule.model_id.id), + ("method", "=", "write"), + ("res_id", "=", self.user.id), + ] + ).ensure_one() + self.assertTrue(write_log_record) + + def test_02_AuditlogFull_field_group_write_log(self): + """Change group and check successfully created log, but using reified fields""" + fname = name_boolean_group(self.group.id) + + self.user.with_context(tracking_disable=True).write( + { + fname: True, + } + ) + # Checking log is created for testpartner1 + write_log_record = self.auditlog_log.search( + [ + ("model_id", "=", self.auditlog_rule.model_id.id), + ("method", "=", "write"), + ("res_id", "=", self.user.id), + ] + ).ensure_one() + self.assertTrue(write_log_record) diff --git a/base_transaction_id/i18n/it.po b/base_transaction_id/i18n/it.po index 51257f06a1..6f42b2705e 100644 --- a/base_transaction_id/i18n/it.po +++ b/base_transaction_id/i18n/it.po @@ -9,24 +9,25 @@ msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-04-07 02:39+0000\n" -"PO-Revision-Date: 2018-04-07 02:39+0000\n" -"Last-Translator: OCA Transbot , 2018\n" +"PO-Revision-Date: 2024-02-21 17:35+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: base_transaction_id #: model:ir.model,name:base_transaction_id.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Registrazione contabile" #. module: base_transaction_id #: model:ir.model,name:base_transaction_id.model_sale_order msgid "Sales Order" -msgstr "" +msgstr "Ordine di vendita" #. module: base_transaction_id #: model:ir.model.fields,field_description:base_transaction_id.field_account_bank_statement_line__transaction_id @@ -34,19 +35,19 @@ msgstr "" #: model:ir.model.fields,field_description:base_transaction_id.field_account_payment__transaction_id #: model:ir.model.fields,field_description:base_transaction_id.field_sale_order__transaction_id msgid "Transaction ID" -msgstr "" +msgstr "ID transizione" #. module: base_transaction_id #: model:ir.model.fields,help:base_transaction_id.field_account_bank_statement_line__transaction_id #: model:ir.model.fields,help:base_transaction_id.field_account_move__transaction_id #: model:ir.model.fields,help:base_transaction_id.field_account_payment__transaction_id msgid "Transaction ID from the financial institute" -msgstr "" +msgstr "ID transizione dall'istituto finanziario" #. module: base_transaction_id #: model:ir.model.fields,help:base_transaction_id.field_sale_order__transaction_id msgid "Transaction id from the financial institute" -msgstr "" +msgstr "ID transizione dall'istituto finanziario" #~ msgid "Invoice" #~ msgstr "Fattura" diff --git a/bi_sql_editor/i18n/it.po b/bi_sql_editor/i18n/it.po index d63b8e8040..2dc570e2bd 100644 --- a/bi_sql_editor/i18n/it.po +++ b/bi_sql_editor/i18n/it.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-08-12 02:51+0000\n" -"PO-Revision-Date: 2024-01-18 09:34+0000\n" +"PO-Revision-Date: 2024-02-19 15:33+0000\n" "Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "Language: it\n" @@ -25,7 +25,7 @@ msgstr "" #: code:addons/bi_sql_editor/models/bi_sql_view.py:0 #, python-format msgid "%(model_name)s Access %(full_name)s" -msgstr "%(model_name)s accesso %(full_name)s" +msgstr "%(model_name)s Accesso %(full_name)s" #. module: bi_sql_editor #. odoo-python @@ -271,7 +271,7 @@ msgid "" "For 'Many2one' Odoo field.\n" " Comodel of the field." msgstr "" -"Percampi Odoo 'Many2one'.\n" +"Per campi Odoo 'Many2one'.\n" " Comodel del campo." #. module: bi_sql_editor @@ -808,7 +808,7 @@ msgid "" "to draft." msgstr "" "Si possono scollegare solo le viste in bozza. Se si vogliono cancellare, " -"impstarle prima a bozza." +"impostarle prima a bozza." #. module: bi_sql_editor #: model:ir.model.fields.selection,name:bi_sql_editor.selection__bi_sql_view_field__ttype__boolean diff --git a/contract/i18n/it.po b/contract/i18n/it.po index f1cd6a6737..f4599b44b4 100644 --- a/contract/i18n/it.po +++ b/contract/i18n/it.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-04-27 01:12+0000\n" -"PO-Revision-Date: 2024-01-25 15:35+0000\n" +"PO-Revision-Date: 2024-02-20 15:36+0000\n" "Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "Language: it\n" @@ -482,7 +482,7 @@ msgstr "Chiusa" #. module: contract #: model:ir.model.fields,field_description:contract.field_contract_tag__color msgid "Color Index" -msgstr "Indice Colore" +msgstr "Indice colore" #. module: contract #: model:ir.model.fields,field_description:contract.field_contract_contract__commercial_partner_id diff --git a/crm_phonecall/i18n/it.po b/crm_phonecall/i18n/it.po index f8c4b0fc16..05ed717e46 100644 --- a/crm_phonecall/i18n/it.po +++ b/crm_phonecall/i18n/it.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-01 02:38+0000\n" -"PO-Revision-Date: 2023-11-03 13:37+0000\n" +"PO-Revision-Date: 2024-02-20 16:36+0000\n" "Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "Language: it\n" @@ -771,7 +771,7 @@ msgstr "Team vendite a cui appartiene l'argomento." #. module: crm_phonecall #: model_terms:ir.ui.view,arch_db:crm_phonecall.view_report_crm_phonecall_filter msgid "Salesperson" -msgstr "Commerciale" +msgstr "Addetto vendite" #. module: crm_phonecall #: model_terms:ir.ui.view,arch_db:crm_phonecall.phonecall_to_phonecall_view diff --git a/database_cleanup/README.rst b/database_cleanup/README.rst index 3581d48283..2515046921 100644 --- a/database_cleanup/README.rst +++ b/database_cleanup/README.rst @@ -7,7 +7,7 @@ Database cleanup !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5b20da6ec90ee20d79a80f6d9e04bb104579f7a3ff86270b9f3221c1fdb05d38 + !! source digest: sha256:e0d591aa6e742753ddc07151d2ba8516fc99597c61e55c0cf14936704659b7e5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -81,6 +81,7 @@ Contributors * Stefan Rijnhart * Holger Brunn * Stéphane Mangin +* Mark Schuit Maintainers ~~~~~~~~~~~ diff --git a/database_cleanup/__manifest__.py b/database_cleanup/__manifest__.py index b7dc21e384..34947d350c 100644 --- a/database_cleanup/__manifest__.py +++ b/database_cleanup/__manifest__.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Database cleanup", - "version": "16.0.1.0.1", + "version": "16.0.1.0.2", "author": "Therp BV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/server-tools", "depends": ["base"], diff --git a/database_cleanup/models/purge_columns.py b/database_cleanup/models/purge_columns.py index 8ccb0cf153..31f8a78c26 100644 --- a/database_cleanup/models/purge_columns.py +++ b/database_cleanup/models/purge_columns.py @@ -68,7 +68,8 @@ class CleanupPurgeWizardColumn(models.TransientModel): # Format: {table: [fields]} blacklist = { "wkf_instance": ["uid"], # lp:1277899 - "res_users": ["password", "password_crypt"], + "res_users": ["password", "password_crypt", "totp_secret"], + "res_partner": ["signup_token"], } @api.model diff --git a/database_cleanup/readme/CONTRIBUTORS.rst b/database_cleanup/readme/CONTRIBUTORS.rst index 347fe7519e..78e9d62929 100644 --- a/database_cleanup/readme/CONTRIBUTORS.rst +++ b/database_cleanup/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * Stefan Rijnhart * Holger Brunn * Stéphane Mangin +* Mark Schuit diff --git a/database_cleanup/static/description/index.html b/database_cleanup/static/description/index.html index 77f14af53c..f00973ab6a 100644 --- a/database_cleanup/static/description/index.html +++ b/database_cleanup/static/description/index.html @@ -366,7 +366,7 @@

Database cleanup

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5b20da6ec90ee20d79a80f6d9e04bb104579f7a3ff86270b9f3221c1fdb05d38 +!! source digest: sha256:e0d591aa6e742753ddc07151d2ba8516fc99597c61e55c0cf14936704659b7e5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

Clean your Odoo database from remnants of modules, models, columns and @@ -422,6 +422,7 @@

Contributors

  • Stefan Rijnhart <stefan@opener.amsterdam>
  • Holger Brunn <hbrunn@therp.nl>
  • Stéphane Mangin <stephane.mangin@camptocamp.com>
  • +
  • Mark Schuit <mark@gig.solutions>
  • diff --git a/dms/README.rst b/dms/README.rst index c3b99ce79f..ba87e33cf0 100644 --- a/dms/README.rst +++ b/dms/README.rst @@ -7,7 +7,7 @@ Document Management System !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c800b9b5b45ad58a5b998b6b7b6960bb825cecec016f1c51853f1ef1fea9a229 + !! source digest: sha256:d2bdadccea3f3caf095e52f174765ff0424b910fcd66043ae16312dc04bbd479 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/dms/__manifest__.py b/dms/__manifest__.py index 97c852e179..b62be2b1de 100644 --- a/dms/__manifest__.py +++ b/dms/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Document Management System", "summary": """Document Management System for Odoo""", - "version": "16.0.1.2.1", + "version": "16.0.1.2.2", "category": "Document Management", "license": "LGPL-3", "website": "https://github.com/OCA/dms", diff --git a/dms/static/description/index.html b/dms/static/description/index.html index 12dc13b2da..259f72502d 100644 --- a/dms/static/description/index.html +++ b/dms/static/description/index.html @@ -366,7 +366,7 @@

    Document Management System

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:c800b9b5b45ad58a5b998b6b7b6960bb825cecec016f1c51853f1ef1fea9a229 +!! source digest: sha256:d2bdadccea3f3caf095e52f174765ff0424b910fcd66043ae16312dc04bbd479 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/dms Translate me on Weblate Try me on Runboat

    DMS is a module for creating, managing and viewing document files directly diff --git a/dms/static/src/js/views/dms_file_upload.esm.js b/dms/static/src/js/views/dms_file_upload.esm.js index 68a35b4edc..38890d7b97 100644 --- a/dms/static/src/js/views/dms_file_upload.esm.js +++ b/dms/static/src/js/views/dms_file_upload.esm.js @@ -111,10 +111,16 @@ export const FileUpload = { return; } - if (this.props.domain.length === 1) { - ctx.default_directory_id = this.props.domain[0][2]; - } else { - ctx.default_directory_id = this.props.domain[2][2]; + // Search the correct directory_id value according to the domain + ctx.default_directory_id = false; + if (this.props.domain) { + for (const domain_item of this.props.domain) { + if (domain_item.length === 3) { + if (domain_item[0] === "directory_id" && domain_item[1] === "=") { + ctx.default_directory_id = domain_item[2]; + } + } + } } if (ctx.default_directory_id === false) { diff --git a/document_url/README.rst b/document_url/README.rst index 4fcfce3680..1de84f1620 100644 --- a/document_url/README.rst +++ b/document_url/README.rst @@ -7,7 +7,7 @@ URL attachment !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:92217531431ad75c30ea12c718d48596dcc083cc58ca678f4381d8223655faf4 + !! source digest: sha256:798731f5636caba3739d27fc9438343fe78b9972e3e1c689cd61e3dd34342a7c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/document_url/__manifest__.py b/document_url/__manifest__.py index fbfa0f38ab..4a289b0b96 100644 --- a/document_url/__manifest__.py +++ b/document_url/__manifest__.py @@ -2,7 +2,7 @@ # Copyright 2020 Tecnativa - Manuel Calero { "name": "URL attachment", - "version": "16.0.1.0.3", + "version": "16.0.1.0.4", "category": "Tools", "author": "Tecnativa, Odoo Community Association (OCA)", "website": "https://github.com/OCA/knowledge", diff --git a/document_url/static/description/index.html b/document_url/static/description/index.html index 38091c28a9..61b382a272 100644 --- a/document_url/static/description/index.html +++ b/document_url/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

    URL attachment

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:92217531431ad75c30ea12c718d48596dcc083cc58ca678f4381d8223655faf4 +!! source digest: sha256:798731f5636caba3739d27fc9438343fe78b9972e3e1c689cd61e3dd34342a7c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/knowledge Translate me on Weblate Try me on Runboat

    Module that allows to attach an URL as a document.

    diff --git a/document_url/static/src/js/url.esm.js b/document_url/static/src/js/url.esm.js index 0ccda253bb..6d4bd8b802 100644 --- a/document_url/static/src/js/url.esm.js +++ b/document_url/static/src/js/url.esm.js @@ -29,6 +29,18 @@ registerPatch({ }, }); +registerPatch({ + name: "Chatter", + recordMethods: { + /** + * Handles click on the attach button. + */ + async onClickButtonAddAttachments() { + await this.onClickButtonToggleAttachments(); + }, + }, +}); + patch(AttachmentCard.prototype, "document_url/static/src/js/url.js", { /** * Return the url of the attachment. Temporary attachments, a.k.a. uploading diff --git a/document_url/static/src/xml/url.xml b/document_url/static/src/xml/url.xml index 4e75a91d64..568a237858 100644 --- a/document_url/static/src/xml/url.xml +++ b/document_url/static/src/xml/url.xml @@ -70,16 +70,4 @@ - - - - - - diff --git a/fastapi/README.rst b/fastapi/README.rst index 438bf8cd3c..049a070002 100644 --- a/fastapi/README.rst +++ b/fastapi/README.rst @@ -7,7 +7,7 @@ Odoo FastAPI !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:439e51bdd708113a0ee8a644f2ca42d29c286af1aee25fa6035b743321969c88 + !! source digest: sha256:77f043567efc3ac58200e6ee2eeb3c05179c999ac4b665581dbe16019f6e31d1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -1468,6 +1468,19 @@ WebSockets and to stream large responses. Changelog ========= +16.0.1.2.6 (2024-02-20) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Bugfixes** + +- Fix compatibility issues with the latest Odoo version + + From https://github.com/odoo/odoo/commit/cb1d057dcab28cb0b0487244ba99231ee292502e + the original werkzeug HTTPRequest class has been wrapped in a new class to keep + under control the attributes developers use. This changes take care of this + new implementation but also keep compatibility with the old ones. (`#414 `_) + + 16.0.1.2.5 (2024-01-17) ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/fastapi/__manifest__.py b/fastapi/__manifest__.py index b2bff08e22..b07cc4e204 100644 --- a/fastapi/__manifest__.py +++ b/fastapi/__manifest__.py @@ -5,7 +5,7 @@ "name": "Odoo FastAPI", "summary": """ Odoo FastAPI endpoint""", - "version": "16.0.1.2.5", + "version": "16.0.1.2.6", "license": "LGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "maintainers": ["lmignon"], diff --git a/fastapi/fastapi_dispatcher.py b/fastapi/fastapi_dispatcher.py index 904deeff7a..02738b9b13 100644 --- a/fastapi/fastapi_dispatcher.py +++ b/fastapi/fastapi_dispatcher.py @@ -42,8 +42,19 @@ def _make_response(self, status_mapping, headers_tuple, content): self.headers = dict(headers_tuple) def _get_environ(self): - environ = self.request.httprequest.environ - environ["wsgi.input"] = self.request.httprequest._get_stream_for_parsing() + try: + # normal case after + # https://github.com/odoo/odoo/commit/cb1d057dcab28cb0b0487244ba99231ee292502e + httprequest = self.request.httprequest._HTTPRequest__wrapped + except AttributeError: + # fallback for older odoo versions + # The try except is the most efficient way to handle this + # as we expect that most of the time the attribute will be there + # and this code will no more be executed if it runs on an up to + # date odoo version. (EAFP: Easier to Ask for Forgiveness than Permission) + httprequest = self.request.httprequest + environ = httprequest.environ + environ["wsgi.input"] = httprequest._get_stream_for_parsing() return environ @contextmanager diff --git a/fastapi/readme/HISTORY.rst b/fastapi/readme/HISTORY.rst index 54d0c7f1bd..37405615a0 100644 --- a/fastapi/readme/HISTORY.rst +++ b/fastapi/readme/HISTORY.rst @@ -1,3 +1,16 @@ +16.0.1.2.6 (2024-02-20) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Bugfixes** + +- Fix compatibility issues with the latest Odoo version + + From https://github.com/odoo/odoo/commit/cb1d057dcab28cb0b0487244ba99231ee292502e + the original werkzeug HTTPRequest class has been wrapped in a new class to keep + under control the attributes developers use. This changes take care of this + new implementation but also keep compatibility with the old ones. (`#414 `_) + + 16.0.1.2.5 (2024-01-17) ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/fastapi/static/description/index.html b/fastapi/static/description/index.html index e7e699db2b..b26d30070e 100644 --- a/fastapi/static/description/index.html +++ b/fastapi/static/description/index.html @@ -366,7 +366,7 @@

    Odoo FastAPI

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:439e51bdd708113a0ee8a644f2ca42d29c286af1aee25fa6035b743321969c88 +!! source digest: sha256:77f043567efc3ac58200e6ee2eeb3c05179c999ac4b665581dbe16019f6e31d1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/rest-framework Translate me on Weblate Try me on Runboat

    This addon provides the basis to smoothly integrate the FastAPI @@ -431,18 +431,19 @@

    Odoo FastAPI

  • Known issues / Roadmap
  • Changelog
  • -
  • Bug Tracker
  • -
  • Credits @@ -1702,7 +1703,19 @@

    Known issues / Roadmap

    Changelog

    -

    16.0.1.2.5 (2024-01-17)

    +

    16.0.1.2.6 (2024-02-20)

    +

    Bugfixes

    + +
    +
    +

    16.0.1.2.5 (2024-01-17)

    Bugfixes

    • Odoo has done an update and now, it checks domains of ir.rule on creation and modification.

      @@ -1712,8 +1725,8 @@

      16.0.1.2.5 (2024-01-17)

    -
    -

    16.0.1.2.3 (2023-12-21)

    +
    +

    16.0.1.2.3 (2023-12-21)

    Bugfixes

    • In case of exception in endpoint execution, close the database cursor after rollback.

      @@ -1722,8 +1735,8 @@

      16.0.1.2.3 (2023-12-21)

    -
    -

    16.0.1.2.2 (2023-12-12)

    +
    +

    16.0.1.2.2 (2023-12-12)

    Bugfixes

    • When using the ‘FastAPITransactionCase’ class, allows to specify a specific @@ -1737,8 +1750,8 @@

      16.0.1.2.2 (2023-12-12)

      ‘authenticated_partner_impl’ method, an error is raised. (#396)
    -
    -

    16.0.1.2.1 (2023-11-03)

    +
    +

    16.0.1.2.1 (2023-11-03)

    Bugfixes

    • Fix a typo in the Field declaration of the ‘count’ attribute of the ‘PagedCollection’ schema.

      @@ -1746,8 +1759,8 @@

      16.0.1.2.1 (2023-11-03)

    -
    -

    16.0.1.2.0 (2023-10-13)

    +
    +

    16.0.1.2.0 (2023-10-13)

    Features

    • The field total in the PagedCollection schema is replaced by the field count. @@ -1761,7 +1774,7 @@

      16.0.1.2.0 (2023-10-13)

    -

    Bug Tracker

    +

    Bug Tracker

    Bugs are tracked on GitHub 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 @@ -1769,21 +1782,21 @@

    Bug Tracker

    Do not contact contributors directly about support or help with technical issues.

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • ACSONE SA/NV
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association

    OCA, or the Odoo Community Association, is a nonprofit organization whose diff --git a/fieldservice/i18n/it.po b/fieldservice/i18n/it.po index 52beee1166..7328f5b6d0 100644 --- a/fieldservice/i18n/it.po +++ b/fieldservice/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-02-16 15:52+0000\n" +"PO-Revision-Date: 2024-02-20 16:37+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -895,13 +895,13 @@ msgstr "Creato il" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__credit_limit #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__credit_limit msgid "Credit Limit" -msgstr "Credito Limite" +msgstr "Fido" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__credit_limit #: model:ir.model.fields,help:fieldservice.field_fsm_person__credit_limit msgid "Credit limit specific to this partner." -msgstr "Limite credito specifico di questo partner." +msgstr "Fido specifico di questo partner." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__currency_id @@ -1525,8 +1525,8 @@ msgid "" "If set, this Sales Team will be used for sales and assignments related to " "this partner" msgstr "" -"Se impostato, questa squadra vendite verrà utilizzata per le vendite e le " -"assegnazioni relative a questo partner" +"Se impostato, il team di vendita viene utilizzato per vendite e assegnazioni " +"correlate al partner" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__is_blacklisted @@ -2805,7 +2805,7 @@ msgstr "Rotte" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_order_count #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_order_count msgid "Sale Order Count" -msgstr "Conteggio ordine di vendita" +msgstr "Conteggio ordini di vendita" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_order_ids @@ -2977,7 +2977,7 @@ msgstr "Condividi partner" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__show_credit_limit #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__show_credit_limit msgid "Show Credit Limit" -msgstr "Visualizza limite credito" +msgstr "Visualizza fido" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_expiration @@ -2989,25 +2989,25 @@ msgstr "Scadenza iscrizione" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_token #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_token msgid "Signup Token" -msgstr "Scadenza token" +msgstr "Token iscrizione" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_type #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_type msgid "Signup Token Type" -msgstr "Scadenza tipo token" +msgstr "Tipo token iscrizione" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_valid #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_valid msgid "Signup Token is Valid" -msgstr "Scadenza validità token" +msgstr "Token iscrizione valido" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_url #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_url msgid "Signup URL" -msgstr "Scadenza URL" +msgstr "URL iscrizione" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__stage_id @@ -3352,7 +3352,7 @@ msgstr "Fuso orario" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__tz_offset #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__tz_offset msgid "Timezone offset" -msgstr "Offset timezone" +msgstr "Offset fuso orario" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__title @@ -3385,13 +3385,13 @@ msgstr "Ordini odierni" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__total_invoiced #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__total_invoiced msgid "Total Invoiced" -msgstr "Totale fattura" +msgstr "Totale fatturato" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__debit #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__debit msgid "Total Payable" -msgstr "Totale pagabile" +msgstr "Dabito totale" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__credit @@ -3403,13 +3403,13 @@ msgstr "Totale credito" #: model:ir.model.fields,help:fieldservice.field_fsm_location__credit #: model:ir.model.fields,help:fieldservice.field_fsm_person__credit msgid "Total amount this customer owes you." -msgstr "Ammontare totale che questo cliente ti deve." +msgstr "Ammontare totale dovuto da questo cliente." #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__debit #: model:ir.model.fields,help:fieldservice.field_fsm_person__debit msgid "Total amount you have to pay to this vendor." -msgstr "Ammontare totale che devi pagare a questo fonritore." +msgstr "Ammontare totale dovuto a questo fonritore." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__translated_display_name diff --git a/fs_attachment/README.rst b/fs_attachment/README.rst index 8ee6153b13..8b54b9ed58 100644 --- a/fs_attachment/README.rst +++ b/fs_attachment/README.rst @@ -7,7 +7,7 @@ Base Attachment Object Store !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:93498df821a28e07ac73cd66c64ec32c73b16f29ac1f3188bf598162c0e123c3 + !! source digest: sha256:30541d0aef2065e9d7821334847e6d332ec2a05c0c5cd562d4770955793fe926 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/fs_attachment/__manifest__.py b/fs_attachment/__manifest__.py index d28275198e..0be05d34d2 100644 --- a/fs_attachment/__manifest__.py +++ b/fs_attachment/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Base Attachment Object Store", "summary": "Store attachments on external object store", - "version": "16.0.1.0.8", + "version": "16.0.1.0.9", "author": "Camptocamp, ACSONE SA/NV, Odoo Community Association (OCA)", "license": "AGPL-3", "development_status": "Beta", diff --git a/fs_attachment/hooks.py b/fs_attachment/hooks.py index bbb464389a..8fca70d678 100644 --- a/fs_attachment/hooks.py +++ b/fs_attachment/hooks.py @@ -2,6 +2,8 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). import logging +from odoo.tools.sql import column_exists + _logger = logging.getLogger(__name__) @@ -9,6 +11,8 @@ def pre_init_hook(cr): """Pre init hook.""" # add columns for computed fields to avoid useless computation by the ORM # when installing the module + if column_exists(cr, "ir_attachment", "fs_storage_id"): + return # columns already added; update probably failed partway _logger.info("Add columns for computed fields on ir_attachment") cr.execute( """ diff --git a/fs_attachment/static/description/index.html b/fs_attachment/static/description/index.html index 84bf0043be..1e14adcacf 100644 --- a/fs_attachment/static/description/index.html +++ b/fs_attachment/static/description/index.html @@ -366,7 +366,7 @@

    Base Attachment Object Store

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:93498df821a28e07ac73cd66c64ec32c73b16f29ac1f3188bf598162c0e123c3 +!! source digest: sha256:30541d0aef2065e9d7821334847e6d332ec2a05c0c5cd562d4770955793fe926 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

    In some cases, you need to store attachment in another system that the Odoo’s diff --git a/fs_base_multi_image/i18n/fr.po b/fs_base_multi_image/i18n/fr.po index 11b1613965..acde25a4c6 100644 --- a/fs_base_multi_image/i18n/fr.po +++ b/fs_base_multi_image/i18n/fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-02-15 17:37+0000\n" +"PO-Revision-Date: 2024-02-19 10:34+0000\n" "Last-Translator: \"Benjamin Willig (ACSONE)\" \n" "Language-Team: none\n" "Language: fr\n" @@ -49,12 +49,12 @@ msgstr "Nom affiché" #. module: fs_base_multi_image #: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window msgid "Fs Image" -msgstr "" +msgstr "Image FS" #. module: fs_base_multi_image #: model:ir.ui.menu,name:fs_base_multi_image.fs_image_menu msgid "Fs Images" -msgstr "" +msgstr "Images FS" #. module: fs_base_multi_image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view @@ -71,12 +71,12 @@ msgstr "" #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_form_view msgid "Image" -msgstr "" +msgstr "Image" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium msgid "Image (128)" -msgstr "" +msgstr "Image (128)" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image diff --git a/fs_image_thumbnail/README.rst b/fs_image_thumbnail/README.rst index 2a3b987440..157c1fac93 100644 --- a/fs_image_thumbnail/README.rst +++ b/fs_image_thumbnail/README.rst @@ -7,7 +7,7 @@ Fs Image Thumbnail !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:3bb3cbeae4c613ddad99937001cf3035bbfc1097e93d97c8d4caf64e941256fe + !! source digest: sha256:ae84af058fd490c7c8916156dc7db31813b6d5f7535e722740b152d6955e0d57 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_image_thumbnail/__manifest__.py b/fs_image_thumbnail/__manifest__.py index 718307fe94..6f0b67c173 100644 --- a/fs_image_thumbnail/__manifest__.py +++ b/fs_image_thumbnail/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Image Thumbnail", "summary": """ Generate and store thumbnail for images""", - "version": "16.0.1.0.1", + "version": "16.0.1.0.2", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_image_thumbnail/models/fs_image_thumbnail_mixin.py b/fs_image_thumbnail/models/fs_image_thumbnail_mixin.py index af59f0b88d..ab13a9c9f5 100644 --- a/fs_image_thumbnail/models/fs_image_thumbnail_mixin.py +++ b/fs_image_thumbnail/models/fs_image_thumbnail_mixin.py @@ -39,6 +39,7 @@ class FsImageThumbnailMixin(models.AbstractModel): string="Attachment", help="Attachment containing the original image", required=True, + ondelete="cascade", ) name = fields.Char( compute="_compute_name", diff --git a/fs_image_thumbnail/static/description/index.html b/fs_image_thumbnail/static/description/index.html index 4b108fcaeb..f02ae6037d 100644 --- a/fs_image_thumbnail/static/description/index.html +++ b/fs_image_thumbnail/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

    Fs Image Thumbnail

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:3bb3cbeae4c613ddad99937001cf3035bbfc1097e93d97c8d4caf64e941256fe +!! source digest: sha256:ae84af058fd490c7c8916156dc7db31813b6d5f7535e722740b152d6955e0d57 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Alpha License: AGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

    This module extends the fs_image addon to support the creation and the storage of diff --git a/fs_product_multi_image/README.rst b/fs_product_multi_image/README.rst index f57b60481e..5a582bb65f 100644 --- a/fs_product_multi_image/README.rst +++ b/fs_product_multi_image/README.rst @@ -7,7 +7,7 @@ Fs Product Multi Image !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:bed699bf549014b6928170fad28e6d6f5a68c7a3c5a50d3eed4ae6cb91291bc1 + !! source digest: sha256:395303e3e6bbfd77d4aa109ccfda96ceecd111fa11d146beeb941f147963995d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_product_multi_image/__manifest__.py b/fs_product_multi_image/__manifest__.py index a900ddf8f8..58e12f3429 100644 --- a/fs_product_multi_image/__manifest__.py +++ b/fs_product_multi_image/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Product Multi Image", "summary": """ Manage multi images from extenal file system on product""", - "version": "16.0.1.1.0", + "version": "16.0.1.1.1", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_product_multi_image/i18n/fr.po b/fs_product_multi_image/i18n/fr.po new file mode 100644 index 0000000000..6e27c17cc3 --- /dev/null +++ b/fs_product_multi_image/i18n/fr.po @@ -0,0 +1,220 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_product_multi_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-19 10:34+0000\n" +"Last-Translator: \"Benjamin Willig (ACSONE)\" \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 4.17\n" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_image_tag__apply_on +msgid "Apply On" +msgstr "Appliqué à" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__attribute_value_ids +msgid "Attributes" +msgstr "Attributs" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__available_attribute_value_ids +msgid "Available Attributes" +msgstr "Attributs disponibles" + +#. module: fs_product_multi_image +#: model:ir.model.fields.selection,name:fs_product_multi_image.selection__image_tag__apply_on__category +msgid "Category" +msgstr "Catégorie" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__create_uid +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__create_date +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__display_name +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__display_name +msgid "Display Name" +msgstr "Nom Affiché" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__id +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__id +msgid "ID" +msgstr "" + +#. module: fs_product_multi_image +#: model_terms:ir.ui.view,arch_db:fs_product_multi_image.product_normal_form_view +msgid "If you need to edit the images, do it from the product template." +msgstr "Pour éditer l'image, rendez vous sur la fiche template de produit." + +#. module: fs_product_multi_image +#: model_terms:ir.ui.view,arch_db:fs_product_multi_image.fs_product_image_kanban_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_image.product_template_only_form_view +msgid "Image" +msgstr "Image" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__image_medium +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__image_medium +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_category__image_medium +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_product__image_medium +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_template__image_medium +msgid "Image (128)" +msgstr "Image (128)" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_category__image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_product__image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_template__image +msgid "Image (original)" +msgstr "Image (originale)" + +#. module: fs_product_multi_image +#: model:ir.model,name:fs_product_multi_image.model_image_tag +#: model:ir.ui.menu,name:fs_product_multi_image.menu_image_tag +msgid "Image Tag" +msgstr "Tag d'image" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_category__image_ids +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_product__image_ids +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_template__image_ids +#: model_terms:ir.ui.view,arch_db:fs_product_multi_image.product_category_form_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_image.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_image.product_template_only_form_view +msgid "Images" +msgstr "Images" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image____last_update +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__write_uid +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__write_date +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__link_existing +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__link_existing +msgid "Link Existing" +msgstr "Lier une image existante" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__image_id +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__image_id +msgid "Linked image" +msgstr "Image liée" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_product__main_image_id +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_template__main_image_id +msgid "Main Image" +msgstr "Image principale" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__mimetype +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__name +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__name +msgid "Name" +msgstr "Nom" + +#. module: fs_product_multi_image +#: model:ir.model,name:fs_product_multi_image.model_product_template +#: model:ir.model.fields.selection,name:fs_product_multi_image.selection__image_tag__apply_on__product +msgid "Product" +msgstr "Produit" + +#. module: fs_product_multi_image +#: model:ir.model,name:fs_product_multi_image.model_product_category +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__product_categ_id +msgid "Product Category" +msgstr "Catégorie de produit" + +#. module: fs_product_multi_image +#: model:ir.model,name:fs_product_multi_image.model_fs_product_category_image +msgid "Product Category Image" +msgstr "Catégorie d'image de produit" + +#. module: fs_product_multi_image +#: model:ir.model,name:fs_product_multi_image.model_fs_product_image +msgid "Product Image" +msgstr "Image produit" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__product_tmpl_id +msgid "Product Template" +msgstr "Template d'article" + +#. module: fs_product_multi_image +#: model:ir.model,name:fs_product_multi_image.model_product_template_attribute_line +msgid "Product Template Attribute Line" +msgstr "" + +#. module: fs_product_multi_image +#: model:ir.model,name:fs_product_multi_image.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__sequence +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__specific_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__specific_image +msgid "Specific Image" +msgstr "Image spécifique" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__specific_image_medium +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__specific_image_medium +msgid "Specific Image (128)" +msgstr "Image spécifique (128)" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_category_image__tag_id +#: model:ir.model.fields,field_description:fs_product_multi_image.field_fs_product_image__tag_id +msgid "Tag" +msgstr "Tag" + +#. module: fs_product_multi_image +#: model:ir.model.fields,field_description:fs_product_multi_image.field_product_product__variant_image_ids +msgid "Variant Images" +msgstr "" diff --git a/fs_product_multi_image/static/description/index.html b/fs_product_multi_image/static/description/index.html index 9b52971fc6..4e8e5bdeae 100644 --- a/fs_product_multi_image/static/description/index.html +++ b/fs_product_multi_image/static/description/index.html @@ -366,7 +366,7 @@

    Fs Product Multi Image

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:bed699bf549014b6928170fad28e6d6f5a68c7a3c5a50d3eed4ae6cb91291bc1 +!! source digest: sha256:395303e3e6bbfd77d4aa109ccfda96ceecd111fa11d146beeb941f147963995d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Alpha License: AGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

    Attach images to products and categories and store them on an external diff --git a/fs_product_multi_image/views/fs_product_image.xml b/fs_product_multi_image/views/fs_product_image.xml index 0fd3fa8b54..002e85635f 100644 --- a/fs_product_multi_image/views/fs_product_image.xml +++ b/fs_product_multi_image/views/fs_product_image.xml @@ -45,6 +45,7 @@

    Image diff --git a/fs_storage/README.rst b/fs_storage/README.rst index 862faff4c2..650132727f 100644 --- a/fs_storage/README.rst +++ b/fs_storage/README.rst @@ -7,7 +7,7 @@ Filesystem Storage Backend !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:cd8993caf2bfd78561b72fde4bc9f632848ec5ef8a87375d93204f91bbfe4d8a + !! source digest: sha256:8f5b7aa4bd5a48339be4250173ab0466e8d26c7e18d03cdfed75a3ac7cc1d4b7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/fs_storage/__manifest__.py b/fs_storage/__manifest__.py index 70e4530b01..1e6a44acd1 100644 --- a/fs_storage/__manifest__.py +++ b/fs_storage/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Filesystem Storage Backend", "summary": "Implement the concept of Storage with amazon S3, sftp...", - "version": "16.0.1.2.0", + "version": "16.0.1.2.3", "category": "FS Storage", "website": "https://github.com/OCA/storage", "author": " ACSONE SA/NV, Odoo Community Association (OCA)", diff --git a/fs_storage/models/fs_storage.py b/fs_storage/models/fs_storage.py index c6170da29f..99ba816254 100644 --- a/fs_storage/models/fs_storage.py +++ b/fs_storage/models/fs_storage.py @@ -272,9 +272,7 @@ def _get_marker_file_name(self): def _check_connection(self, fs): marker_file_name = self._get_marker_file_name() try: - marker_file = fs.ls(marker_file_name, detail=False) - if not marker_file: - fs.touch(marker_file_name) + fs.info(marker_file_name) except FileNotFoundError: fs.touch(marker_file_name) return True @@ -292,6 +290,7 @@ def fs(self) -> fsspec.AbstractFileSystem: self._check_connection(self.__fs) except Exception as e: self.__fs.clear_instance_cache() + self.__fs = None raise e return self.__fs @@ -429,7 +428,8 @@ def find_files(self, pattern, relative_path="", **kw) -> list[str]: return [] regex = re.compile(pattern) for file_path in self.fs.ls(relative_path, detail=False): - if regex.match(file_path): + # fs.ls returns a relative path + if regex.match(os.path.basename(file_path)): result.append(file_path) return result @@ -454,7 +454,9 @@ def delete(self, relative_path) -> None: def action_test_config(self) -> None: try: - self._check_connection(self.__fs) + # Accessing the property will check the connection + # pylint: disable=W0104 + self.fs title = _("Connection Test Succeeded!") message = _("Everything seems properly set up!") msg_type = "success" diff --git a/fs_storage/static/description/index.html b/fs_storage/static/description/index.html index eeac72b203..a1f67204da 100644 --- a/fs_storage/static/description/index.html +++ b/fs_storage/static/description/index.html @@ -366,7 +366,7 @@

    Filesystem Storage Backend

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:cd8993caf2bfd78561b72fde4bc9f632848ec5ef8a87375d93204f91bbfe4d8a +!! source digest: sha256:8f5b7aa4bd5a48339be4250173ab0466e8d26c7e18d03cdfed75a3ac7cc1d4b7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

    This addon is a technical addon that allows you to define filesystem like diff --git a/hr_leave_type_code/i18n/it.po b/hr_leave_type_code/i18n/it.po index fd2e745cc0..2ddbf6e816 100644 --- a/hr_leave_type_code/i18n/it.po +++ b/hr_leave_type_code/i18n/it.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-07-05 13:52+0000\n" -"PO-Revision-Date: 2023-07-05 13:52+0000\n" -"Last-Translator: \n" +"PO-Revision-Date: 2024-02-20 17:36+0000\n" +"Last-Translator: mymage \n" "Language-Team: \n" -"Language: \n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: hr_leave_type_code #: model:ir.model.fields,field_description:hr_leave_type_code.field_hr_leave_type__code @@ -29,7 +30,7 @@ msgstr "Il codice deve essere univoco per azienda." #. module: hr_leave_type_code #: model:ir.model,name:hr_leave_type_code.model_hr_leave_type msgid "Time Off Type" -msgstr "Tipologia ferie" +msgstr "Tipo di ferie" #~ msgid "Smart Search" #~ msgstr "Ricerca intelligente" diff --git a/l10n_es_sigaus_account/README.rst b/l10n_es_sigaus_account/README.rst new file mode 100644 index 0000000000..af8dbd0ddb --- /dev/null +++ b/l10n_es_sigaus_account/README.rst @@ -0,0 +1,161 @@ +==================== +SIGAUS - Facturación +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f908f4dbd0a1bbbfb163b42dcae80a66019b600a45a7bbe337034d4892f99a97 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fl10n--spain-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-spain/tree/16.0/l10n_es_sigaus_account + :alt: OCA/l10n-spain +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-spain-16-0/l10n-spain-16-0-l10n_es_sigaus_account + :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/l10n-spain&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +El origen de SIGAUS responde a la iniciativa de los fabricantes de lubricantes que, a +través de su participación en este Sistema, cumplen con las obligaciones establecidas +en la normativa sobre aceites usados (Real Decreto 679/2006, de 2 de junio, por el que +se regula la gestión de los aceites industriales usados). + +Este módulo permite el cálculo de la aportación SIGAUS en las facturas a partir del +peso de aquellos productos en los que se aplica. + +* Más información en https://www.sigaus.es + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +Se tienen que configurar los siguientes aspectos: + +* En la ficha del producto "Aportación SIGAUS (R.D. 679/2006)" establecer el impuesto + correspondiente. + +* La configuración del precio de la aportación SIGAUS que se aplica durante un periodo + de tiempo se realiza desde Facturación > Configuración > Aportación SIGAUS. En caso + de no rellenar el campo "Fecha hasta", el precio seleccionado se aplicará a partir de + la fecha indicada en "Fecha desde". El precio establecido dentro del periodo marcado + se utilizará siempre que se calcule la aportación SIGAUS en las facturas. + +* Es necesario indicar aquellas compañías en las que se aplicará la aportación SIGAUS. + Para ello, hay que acceder a la pestaña SIGAUS de la configuración de la compañía y + marcar la casilla "Habilitar SIGAUS". Asimismo, es obligatorio indicar la fecha a + partir de la que la aportación SIGAUS se podrá aplicar en el campo "SIGAUS fecha + desde". No será posible calcular la aportación SIGAUS con fecha anterior a la + seleccionada en este campo. Cuando la opción "Habilitar SIGAUS" está activada, se + muestra el campo "Mostrar cantidades de SIGAUS en líneas de informes" que, si está + marcada, permite mostrar la aportación SIGAUS de cada una de las líneas de facturas + en los informes. + +* Las posiciones fiscales con las que se aplicará la aportación SIGAUS tienen que + indicarse. Para ello hay que acceder a Facturación > Configuración > Posiciones + Fiscales y marcar la casilla "Sujeto a SIGAUS" en aquellas en las que se aplicará. + +* Se puede establecer que los productos de ciertas categorías estén sujetas a SIGAUS + accediendo a la configuración de la categoría y marcando la casilla "Sujeto a + SIGAUS". + +* Desde la ficha de los productos, pueden establecerse varias opciones de sujeción a la + aportación SIGAUS desde el campo "Sujeto a SIGAUS". Existen tres opciones: + + * "Categoría": La aplicación o no de la aportación SIGAUS para ese producto depende + de si la casilla "Sujeto a SIGAUS" está o no marcada en la categoría establecida. + * "Sí": Se aplica siempre la aportación SIGAUS, independientemente de lo seleccionado + en la categoría de producto. + * "No": No se aplica nunca la aportación SIGAUS, independientemente de lo + seleccionado en la categoría de producto. + +Cuando se calcule la aportación SIGAUS en facturas, se tendrá en cuenta el peso de +todos aquellos productos a los que se les aplica la aportación SIGAUS para determinar +el importe. + +* Todos los productos a los que se les aplica la aportación SIGAUS deben tener un peso + establecido. + +Usage +===== + +* El importe de la aportación SIGAUS se calculará a partir de los pesos de aquellos + productos sujetos a dicha aportación y el precio establecido en "Aportación SIGAUS" + según la fecha de factura o, en su defecto, la fecha de creación. + +* Los productos sujetos a aportación SIGAUS son los siguientes: + + * Aquellos que tienen establecida la opción "Sí" en el campo "Sujeto a SIGAUS". + * Aquellos que tienen establecida la opción "Categoría" en el campo "Sujeto a SIGAUS" + y cuya categoría tenga marcada la opción "Sujeto a SIGAUS". + +* Se mostrará un mensaje en el chatter si al calcular la aportación SIGAUS, alguno de + los productos sujetos no tiene un peso establecido. + +* Si se desmarca la opción "Sujeto a SIGAUS", no se aplicará la aportación SIGAUS. + +Known issues / Roadmap +====================== + +* El módulo no está preparado para añadir automáticamente las líneas de aportación + SIGAUS a los pedidos procedentes del comercio online. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Sygel + +Contributors +~~~~~~~~~~~~ + +* `Sygel `_: + + * Manuel Regidor + * Harald Panten + * Valentín Vinagre + +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/l10n-spain `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/l10n_es_sigaus_account/__init__.py b/l10n_es_sigaus_account/__init__.py new file mode 100644 index 0000000000..5e717cd67c --- /dev/null +++ b/l10n_es_sigaus_account/__init__.py @@ -0,0 +1,6 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models +from . import wizard +from .hooks import pre_init_hook diff --git a/l10n_es_sigaus_account/__manifest__.py b/l10n_es_sigaus_account/__manifest__.py new file mode 100644 index 0000000000..8d1e1fdfa6 --- /dev/null +++ b/l10n_es_sigaus_account/__manifest__.py @@ -0,0 +1,27 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "SIGAUS - Facturación", + "summary": "Sistema de gestión de aceites industriales usados en España - Facturación", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Sygel, Odoo Community Association (OCA)", + "category": "Accounting", + "website": "https://github.com/OCA/l10n-spain", + "depends": ["account"], + "data": [ + "data/data.xml", + "data/exception_templates.xml", + "security/ir.model.access.csv", + "views/l10n_es_sigaus_amount_views.xml", + "views/product_category_views.xml", + "views/product_views.xml", + "views/account_move_views.xml", + "views/report_invoice.xml", + "views/res_company_views.xml", + "views/account_fiscal_position_views.xml", + ], + "pre_init_hook": "pre_init_hook", + "installable": True, +} diff --git a/l10n_es_sigaus_account/data/data.xml b/l10n_es_sigaus_account/data/data.xml new file mode 100644 index 0000000000..e5eab69a5b --- /dev/null +++ b/l10n_es_sigaus_account/data/data.xml @@ -0,0 +1,30 @@ + + + + + Aportación SIGAUS (R.D. 679/2006) + + service + 0.0 + no + + + + + + + + + Aportación SIGAUS 2023 + 2023-1-1 + 2023-12-31 + 0.06 + + + Aportación SIGAUS 2024 + 2024-1-1 + 0.05 + + + diff --git a/l10n_es_sigaus_account/data/exception_templates.xml b/l10n_es_sigaus_account/data/exception_templates.xml new file mode 100644 index 0000000000..7121fae864 --- /dev/null +++ b/l10n_es_sigaus_account/data/exception_templates.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/l10n_es_sigaus_account/hooks.py b/l10n_es_sigaus_account/hooks.py new file mode 100644 index 0000000000..39ffee148a --- /dev/null +++ b/l10n_es_sigaus_account/hooks.py @@ -0,0 +1,14 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + + +from odoo.tools import sql + + +def pre_init_hook(cr): + if not sql.column_exists(cr, "account_move", "is_sigaus"): + sql.create_column(cr, "account_move", "is_sigaus", "boolean") + if not sql.column_exists(cr, "account_move", "sigaus_is_date"): + sql.create_column(cr, "account_move", "sigaus_is_date", "boolean") + if not sql.column_exists(cr, "product_product", "sigaus_has_amount"): + sql.create_column(cr, "product_product", "sigaus_has_amount", "boolean") diff --git a/l10n_es_sigaus_account/i18n/es.po b/l10n_es_sigaus_account/i18n/es.po new file mode 100644 index 0000000000..9004153a56 --- /dev/null +++ b/l10n_es_sigaus_account/i18n/es.po @@ -0,0 +1,337 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_es_sigaus_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-15 09:55+0000\n" +"PO-Revision-Date: 2024-02-15 10:57+0100\n" +"Last-Translator: \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: \n" +"X-Generator: Poedit 2.3\n" + +#. module: l10n_es_sigaus_account +#. odoo-python +#: code:addons/l10n_es_sigaus_account/models/res_company.py:0 +#, python-format +msgid "'Sigaus Date From' is mandatory for companies with SIGAUS enabled." +msgstr "" +"'SIGAUS fecha desde' es obligatorio para las compañías con SIGAUS habilitado." + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.exception_sigaus +msgid "" +".\n" +" The following products are subject to SIGAUS but have no weight." +msgstr "" +".\n" +" Los siguientes productos están sujetos a SIGAUS pero no tienen " +"peso." + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.l10n_es_sigaus_account_amount_form_view +msgid "" +"" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_account_move_reversal +msgid "Account Move Reversal" +msgstr "Revocación de movimiento en cuenta" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.report_invoice_document +msgid "Aporatación SIGAUS (RD 679/2006):" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:product.template,name:l10n_es_sigaus_account.aportacion_sigaus_product_template_product_template +msgid "Aportación SIGAUS (R.D. 679/2006)" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields.selection,name:l10n_es_sigaus_account.selection__product_template__sigaus_subject__category +msgid "Category" +msgstr "Categoría" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__date_from +msgid "Date From" +msgstr "Fecha desde" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__date_to +msgid "Date To" +msgstr "Fecha hasta" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.l10n_es_sigaus_account_amount_form_view +msgid "Dates" +msgstr "Fechas" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.exception_sigaus +msgid "Exception(s) occurred:" +msgstr "Excepcion(es):" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_account_fiscal_position +msgid "Fiscal Position" +msgstr "Posición fiscal" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__id +msgid "ID" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_res_company__sigaus_show_in_reports +msgid "If active, SIGAUS amount is shown in reports." +msgstr "Si está activo, la aportación SIGAUS se muestra en los informes." + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move_line__is_sigaus +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_line_mixin__is_sigaus +msgid "Is Sigaus" +msgstr "Es SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_account_move +msgid "Journal Entry" +msgstr "Asiento contable" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.actions.act_window,name:l10n_es_sigaus_account.l10n_es_sigaus_account_amount_action +#: model:ir.ui.menu,name:l10n_es_sigaus_account.menu_l10n_es_sigaus_account_amount +msgid "L10n Es Sigaus Amount" +msgstr "Aportación SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount____last_update +msgid "Last Modified on" +msgstr "Modificado por última vez el" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__write_uid +msgid "Last Updated by" +msgstr "Actualizado por última vez por" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__write_date +msgid "Last Updated on" +msgstr "Actualizado por última vez el" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__name +msgid "Name" +msgstr "Nombre" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields.selection,name:l10n_es_sigaus_account.selection__product_template__sigaus_subject__no +msgid "No" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__price +msgid "Price" +msgstr "Precio" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_product_template +msgid "Product" +msgstr "Producto" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_product_category +msgid "Product Category" +msgstr "Categoría de producto" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_product_product +msgid "Product Variant" +msgstr "Variante de producto" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.exception_sigaus +msgid "Product(s):" +msgstr "Producto(s):" + +#. module: l10n_es_sigaus_account +#: model:ir.ui.menu,name:l10n_es_sigaus_account.menu_l10n_es_sigaus +msgid "SIGAUS" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_res_company__sigaus_date_from +msgid "SIGAUS can only be applied from this date." +msgstr "La aportación SIGAUS solamente se aplica a partir de esta fecha." + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_res_company__sigaus_show_in_reports +msgid "Show detailed SIGAUS amount in report lines" +msgstr "Mostrar cantidades de SIGAUS en líneas de informes" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.l10n_es_sigaus_account_view_company_form +msgid "Sigaus" +msgstr "SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_l10n_es_sigaus_amount +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move_line__sigaus_amount +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_line_mixin__sigaus_amount +msgid "Sigaus Amount" +msgstr "Aportación SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_automated_exception_id +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__sigaus_automated_exception_id +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__sigaus_automated_exception_id +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_automated_exception_id +msgid "Sigaus Automated Exception" +msgstr "Excepción de automatización de SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_company +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__sigaus_company +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__sigaus_company +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_company +msgid "Sigaus Company" +msgstr "Compañía SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_res_company__sigaus_date_from +msgid "Sigaus Date From" +msgstr "SIGAUS fecha desde" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_res_company__sigaus_enable +msgid "Sigaus Enable" +msgstr "SIGAUS activado" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_product_product__sigaus_has_amount +msgid "Sigaus Has Amount" +msgstr "Hay aportación SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_has_line +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__sigaus_has_line +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__sigaus_has_line +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_has_line +msgid "Sigaus Has Line" +msgstr "Hay línea SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_is_date +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__sigaus_is_date +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__sigaus_is_date +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_is_date +msgid "Sigaus Is Date" +msgstr "Es fecha SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_sigaus_line_mixin +msgid "Sigaus Line Mixin" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_sigaus_mixin +msgid "Sigaus Mixin" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_fiscal_position__sigaus_subject +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_product_product__sigaus_subject +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_product_template__sigaus_subject +msgid "Subject To SIGAUS" +msgstr "Sujeto a SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__is_sigaus +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__is_sigaus +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__is_sigaus +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_product_category__sigaus_subject +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__is_sigaus +msgid "Subject to SIGAUS" +msgstr "Es SIGAUS" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_is_date +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_account_move__sigaus_is_date +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_account_payment__sigaus_is_date +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_is_date +msgid "" +"Technical field to determine whether the date of a document subject to " +"SIGAUS is equal or after the date selected in the company from which SIGAUS " +"has to be applied." +msgstr "" +"Campo técnico para determinar si la fecha de un documento sujeto a SIGAUS es " +"igual o posterior a la fecha seleccionada en la compañía a partir de la que " +"el SIGAUS puede aplicarse." + +#. module: l10n_es_sigaus_account +#. odoo-python +#: code:addons/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py:0 +#, python-format +msgid "The ending date must not be prior to the starting date." +msgstr "La fecha de finalización debe ser anterior a la de inicio." + +#. module: l10n_es_sigaus_account +#. odoo-python +#: code:addons/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py:0 +#, python-format +msgid "" +"There is not a SIGAUS price set for the date: {}. Please, go to Invoicing > " +"Configuration > L10n Es Sigaus Amount and make sure that the date is include " +"in one of the configured date ranges." +msgstr "" +"No hay un importe de aportación SIGAUS establecido para la fecha actual: {}. " +"Por favor, vaya a Facturación > Configuración > Aportación SIGAUS y " +"asegúrese de que la fecha está incluida en alguno de los rangos de fechas " +"configurados." + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields.selection,name:l10n_es_sigaus_account.selection__product_template__sigaus_subject__yes +msgid "Yes" +msgstr "Sí" + +#. module: l10n_es_sigaus_account +#. odoo-python +#: code:addons/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py:0 +#, python-format +msgid "You can not have overlapping date ranges." +msgstr "No se permiten rangos de fechas que se solapan." diff --git a/l10n_es_sigaus_account/i18n/l10n_es_sigaus_account.pot b/l10n_es_sigaus_account/i18n/l10n_es_sigaus_account.pot new file mode 100644 index 0000000000..dba66ebb0f --- /dev/null +++ b/l10n_es_sigaus_account/i18n/l10n_es_sigaus_account.pot @@ -0,0 +1,322 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_es_sigaus_account +# +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: l10n_es_sigaus_account +#. odoo-python +#: code:addons/l10n_es_sigaus_account/models/res_company.py:0 +#, python-format +msgid "'Sigaus Date From' is mandatory for companies with SIGAUS enabled." +msgstr "" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.exception_sigaus +msgid "" +".\n" +" The following products are subject to SIGAUS but have no weight." +msgstr "" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.l10n_es_sigaus_account_amount_form_view +msgid "" +"" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_account_move_reversal +msgid "Account Move Reversal" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.report_invoice_document +msgid "Aporatación SIGAUS (RD 679/2006):" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:product.template,name:l10n_es_sigaus_account.aportacion_sigaus_product_template_product_template +msgid "Aportación SIGAUS (R.D. 679/2006)" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields.selection,name:l10n_es_sigaus_account.selection__product_template__sigaus_subject__category +msgid "Category" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__create_uid +msgid "Created by" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__create_date +msgid "Created on" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__date_from +msgid "Date From" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__date_to +msgid "Date To" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.l10n_es_sigaus_account_amount_form_view +msgid "Dates" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__display_name +msgid "Display Name" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.exception_sigaus +msgid "Exception(s) occurred:" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_account_fiscal_position +msgid "Fiscal Position" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__id +msgid "ID" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_res_company__sigaus_show_in_reports +msgid "If active, SIGAUS amount is shown in reports." +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move_line__is_sigaus +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_line_mixin__is_sigaus +msgid "Is Sigaus" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.actions.act_window,name:l10n_es_sigaus_account.l10n_es_sigaus_account_amount_action +#: model:ir.ui.menu,name:l10n_es_sigaus_account.menu_l10n_es_sigaus_account_amount +msgid "L10n Es Sigaus Amount" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount____last_update +msgid "Last Modified on" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__write_date +msgid "Last Updated on" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__name +msgid "Name" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields.selection,name:l10n_es_sigaus_account.selection__product_template__sigaus_subject__no +msgid "No" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_l10n_es_sigaus_amount__price +msgid "Price" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_product_template +msgid "Product" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_product_category +msgid "Product Category" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.exception_sigaus +msgid "Product(s):" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.ui.menu,name:l10n_es_sigaus_account.menu_l10n_es_sigaus +msgid "SIGAUS" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_res_company__sigaus_date_from +msgid "SIGAUS can only be applied from this date." +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_res_company__sigaus_show_in_reports +msgid "Show detailed SIGAUS amount in report lines" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model_terms:ir.ui.view,arch_db:l10n_es_sigaus_account.l10n_es_sigaus_account_view_company_form +msgid "Sigaus" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_l10n_es_sigaus_amount +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move_line__sigaus_amount +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_line_mixin__sigaus_amount +msgid "Sigaus Amount" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_automated_exception_id +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__sigaus_automated_exception_id +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__sigaus_automated_exception_id +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_automated_exception_id +msgid "Sigaus Automated Exception" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_company +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__sigaus_company +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__sigaus_company +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_company +msgid "Sigaus Company" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_res_company__sigaus_date_from +msgid "Sigaus Date From" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_res_company__sigaus_enable +msgid "Sigaus Enable" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_product_product__sigaus_has_amount +msgid "Sigaus Has Amount" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_has_line +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__sigaus_has_line +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__sigaus_has_line +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_has_line +msgid "Sigaus Has Line" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_is_date +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__sigaus_is_date +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__sigaus_is_date +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_is_date +msgid "Sigaus Is Date" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_sigaus_line_mixin +msgid "Sigaus Line Mixin" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model,name:l10n_es_sigaus_account.model_sigaus_mixin +msgid "Sigaus Mixin" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_fiscal_position__sigaus_subject +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_product_product__sigaus_subject +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_product_template__sigaus_subject +msgid "Subject To SIGAUS" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_bank_statement_line__is_sigaus +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_move__is_sigaus +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_account_payment__is_sigaus +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_product_category__sigaus_subject +#: model:ir.model.fields,field_description:l10n_es_sigaus_account.field_sigaus_mixin__is_sigaus +msgid "Subject to SIGAUS" +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_account_bank_statement_line__sigaus_is_date +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_account_move__sigaus_is_date +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_account_payment__sigaus_is_date +#: model:ir.model.fields,help:l10n_es_sigaus_account.field_sigaus_mixin__sigaus_is_date +msgid "" +"Technical field to determine whether the date of a document subject to " +"SIGAUS is equal or after the date selected in the company from which SIGAUS " +"has to be applied." +msgstr "" + +#. module: l10n_es_sigaus_account +#. odoo-python +#: code:addons/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py:0 +#, python-format +msgid "The ending date must not be prior to the starting date." +msgstr "" + +#. module: l10n_es_sigaus_account +#. odoo-python +#: code:addons/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py:0 +#, python-format +msgid "" +"There is not a SIGAUS price set for the date: {}. Please, go to Invoicing > " +"Configuration > L10n Es Sigaus Amount and make sure that the date is include" +" in one of the configured date ranges." +msgstr "" + +#. module: l10n_es_sigaus_account +#: model:ir.model.fields.selection,name:l10n_es_sigaus_account.selection__product_template__sigaus_subject__yes +msgid "Yes" +msgstr "" + +#. module: l10n_es_sigaus_account +#. odoo-python +#: code:addons/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py:0 +#, python-format +msgid "You can not have overlapping date ranges." +msgstr "" diff --git a/l10n_es_sigaus_account/models/__init__.py b/l10n_es_sigaus_account/models/__init__.py new file mode 100644 index 0000000000..aae101d649 --- /dev/null +++ b/l10n_es_sigaus_account/models/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import sigaus_mixin +from . import sigaus_line_mixin +from . import l10n_es_sigaus_amount +from . import product_category +from . import product_template +from . import product_product +from . import account_move +from . import account_move_line +from . import res_company +from . import account_fiscal_position diff --git a/l10n_es_sigaus_account/models/account_fiscal_position.py b/l10n_es_sigaus_account/models/account_fiscal_position.py new file mode 100644 index 0000000000..094fc81528 --- /dev/null +++ b/l10n_es_sigaus_account/models/account_fiscal_position.py @@ -0,0 +1,10 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountFiscalPosition(models.Model): + _inherit = "account.fiscal.position" + + sigaus_subject = fields.Boolean(string="Subject To SIGAUS") diff --git a/l10n_es_sigaus_account/models/account_move.py b/l10n_es_sigaus_account/models/account_move.py new file mode 100644 index 0000000000..8457f0b034 --- /dev/null +++ b/l10n_es_sigaus_account/models/account_move.py @@ -0,0 +1,129 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, models +from odoo.osv import expression + + +class AccountMove(models.Model): + _name = "account.move" + _inherit = ["account.move", "sigaus.mixin"] + + _sigaus_secondary_unit_fields = { + "line_ids": "invoice_line_ids", + "date_field": "invoice_date", + "editable_states": [ + "draft", + ], + } + + @api.depends( + "company_id", + "fiscal_position_id", + "move_type", + ) + def _compute_is_sigaus(self): + for rec in self: + if rec.is_invoice(): + return super()._compute_is_sigaus() + else: + rec.is_sigaus = False + + @api.depends("is_sigaus", "invoice_date", "company_id") + def _compute_sigaus_is_date(self): + ret = super()._compute_sigaus_is_date() + for rec in self.filtered( + lambda a: a.is_sigaus + and not a.invoice_date + and a.company_id.sigaus_date_from + ): + rec.sigaus_is_date = ( + rec.create_date.date() >= rec.company_id.sigaus_date_from + ) + return ret + + @api.depends("invoice_line_ids") + def _compute_sigaus_has_line(self): + return super()._compute_sigaus_has_line() + + @api.depends("company_id") + def _compute_sigaus_company(self): + return super()._compute_sigaus_company() + + def sigaus_default_date(self, lines): + self.ensure_one() + return self.invoice_date or self.create_date.date() + + @api.model + def get_independent_invoice_lines_domain(self): + """ + Override this method to get the invoice lines not related to other + models (i.e. sale orders) + """ + return [] + + def manage_sigaus_invoice_lines(self): + self.ensure_one() + independent_lines_domain = self.get_independent_invoice_lines_domain() + independent_sigaus_lines_domain = expression.AND( + [ + [ + ("move_id", "=", self.id), + ("is_sigaus", "=", True), + ], + independent_lines_domain, + ] + ) + self.env["account.move.line"].search(independent_sigaus_lines_domain).unlink() + # Invoice lines not related to other documents (i.e. sales) + independent_lines_domain = expression.AND( + [ + [ + ("move_id", "=", self.id), + ("product_id", "!=", False), + ("product_id.sigaus_has_amount", "=", True), + ], + independent_lines_domain, + ] + ) + independent_lines = self.env["account.move.line"].search( + independent_lines_domain + ) + if independent_lines: + self.create_sigaus_line(independent_lines) + + def create_sigaus_line(self, lines, **kwargs): + values = self._get_sigaus_line_vals(lines, **kwargs) + self.env["account.move.line"].create(values) + + def apply_sigaus(self): + for invoice in self.filtered( + lambda a: a.state == "draft" and a.is_sigaus and a.sigaus_is_date and a.id + ): + invoice.automatic_sigaus_exception() + invoice.with_context(avoid_recursion=True).manage_sigaus_invoice_lines() + + def write(self, vals): + res = super().write(vals) + if any( + value in list(vals.keys()) + for value in [ + "is_sigaus", + "company_id", + "fiscal_position_id", + "invoice_line_ids", + "move_type", + "invoice_date", + ] + ): + self.with_context(avoid_recursion=True)._delete_sigaus() + self.apply_sigaus() + return res + + @api.model_create_multi + def create(self, vals_list): + moves = super().create(vals_list) + for move in moves.filtered(lambda a: a.is_sigaus and a.sigaus_is_date): + move.automatic_sigaus_exception() + move.apply_sigaus() + return moves diff --git a/l10n_es_sigaus_account/models/account_move_line.py b/l10n_es_sigaus_account/models/account_move_line.py new file mode 100644 index 0000000000..a1990e1e2b --- /dev/null +++ b/l10n_es_sigaus_account/models/account_move_line.py @@ -0,0 +1,26 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class AccountMoveLine(models.Model): + _name = "account.move.line" + _inherit = ["account.move.line", "sigaus.line.mixin"] + + _sigaus_secondary_unit_fields = { + "parent_id": "move_id", + "date_field": "date", + "qty_field": "quantity", + "uom_field": "product_uom_id", + } + + def unlink(self): + sigaus_invoices = self.mapped("move_id").filtered( + lambda a: a.state == "draft" and a.is_sigaus and a.sigaus_is_date + ) + res = super().unlink() + if sigaus_invoices and not self.env.context.get("avoid_recursion"): + sigaus_invoices.with_context(avoid_recursion=True)._delete_sigaus() + sigaus_invoices.apply_sigaus() + return res diff --git a/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py b/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py new file mode 100644 index 0000000000..79a83d4b69 --- /dev/null +++ b/l10n_es_sigaus_account/models/l10n_es_sigaus_amount.py @@ -0,0 +1,73 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class L10nEsSigausAmount(models.Model): + _name = "l10n.es.sigaus.amount" + _description = "Sigaus Amount" + + name = fields.Char(required=True) + date_from = fields.Date(required=True) + date_to = fields.Date() + price = fields.Float(digits="Product Price", required=True) + + @api.constrains("date_from", "date_to") + def _check_dates(self): + for rec in self: + date_from = rec.date_from + date_to = rec.date_to + if date_to and date_to < date_from: + raise ValidationError( + _("The ending date must not be prior to the starting date.") + ) + domain = [ + ("id", "!=", rec.id), + "|", + "|", + "|", + "|", + "&", + ("date_from", "<=", date_from), + "|", + ("date_to", ">=", date_from), + ("date_to", "=", False), + "&", + ("date_from", "<=", date_to), + ("date_to", ">=", date_to), + "&", + ("date_from", "<=", date_from), + ("date_to", ">=", date_to), + "&", + ("date_from", ">=", date_from), + ("date_to", "<=", date_to), + "&", + ("date_from", ">=", date_from), + ("date_from", "<=", date_to), + ] + + if self.search_count(domain) > 0: + raise ValidationError(_("You can not have overlapping date ranges.")) + + @api.model + def get_sigaus_amount(self, date): + l10n_es_sigaus_amount = self.search( + [ + ("date_from", "<=", date), + "|", + ("date_to", ">=", date), + ("date_to", "=", False), + ], + limit=1, + ) + if not l10n_es_sigaus_amount: + raise ValidationError( + _( + "There is not a SIGAUS price set for the date: {}. Please, go to " + "Invoicing > Configuration > L10n Es Sigaus Amount and make sure " + "that the date is include in one of the configured date ranges." + ).format(date) + ) + return l10n_es_sigaus_amount.price diff --git a/l10n_es_sigaus_account/models/product_category.py b/l10n_es_sigaus_account/models/product_category.py new file mode 100644 index 0000000000..ce7012e0f9 --- /dev/null +++ b/l10n_es_sigaus_account/models/product_category.py @@ -0,0 +1,10 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductCategory(models.Model): + _inherit = "product.category" + + sigaus_subject = fields.Boolean(string="Subject to SIGAUS") diff --git a/l10n_es_sigaus_account/models/product_product.py b/l10n_es_sigaus_account/models/product_product.py new file mode 100644 index 0000000000..76e147e3d0 --- /dev/null +++ b/l10n_es_sigaus_account/models/product_product.py @@ -0,0 +1,17 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ProductProduct(models.Model): + _inherit = "product.product" + + sigaus_has_amount = fields.Boolean(compute="_compute_sigaus_has_amount", store=True) + + @api.depends("sigaus_subject", "categ_id", "categ_id.sigaus_subject") + def _compute_sigaus_has_amount(self): + for rec in self: + rec.sigaus_has_amount = rec.sigaus_subject == "yes" or ( + rec.sigaus_subject == "category" and rec.categ_id.sigaus_subject + ) diff --git a/l10n_es_sigaus_account/models/product_template.py b/l10n_es_sigaus_account/models/product_template.py new file mode 100644 index 0000000000..dfe160b8d5 --- /dev/null +++ b/l10n_es_sigaus_account/models/product_template.py @@ -0,0 +1,15 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + sigaus_subject = fields.Selection( + [("category", "Category"), ("yes", "Yes"), ("no", "No")], + default="category", + string="Subject To SIGAUS", + required=True, + ) diff --git a/l10n_es_sigaus_account/models/res_company.py b/l10n_es_sigaus_account/models/res_company.py new file mode 100644 index 0000000000..08ff21c517 --- /dev/null +++ b/l10n_es_sigaus_account/models/res_company.py @@ -0,0 +1,23 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class ResCompany(models.Model): + _inherit = "res.company" + + sigaus_enable = fields.Boolean() + sigaus_date_from = fields.Date(help="SIGAUS can only be applied from this date.") + sigaus_show_in_reports = fields.Boolean( + string="Show detailed SIGAUS amount in report lines", + help="If active, SIGAUS amount is shown in reports.", + ) + + @api.constrains("sigaus_enable", "sigaus_date_from") + def _check_sigaus_date(self): + if self.filtered(lambda a: a.sigaus_enable and not a.sigaus_date_from): + raise ValidationError( + _("'Sigaus Date From' is mandatory for companies with SIGAUS enabled.") + ) diff --git a/l10n_es_sigaus_account/models/sigaus_line_mixin.py b/l10n_es_sigaus_account/models/sigaus_line_mixin.py new file mode 100644 index 0000000000..b2a36fbd03 --- /dev/null +++ b/l10n_es_sigaus_account/models/sigaus_line_mixin.py @@ -0,0 +1,35 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SigausLineMixin(models.AbstractModel): + _name = "sigaus.line.mixin" + _description = "Sigaus Line Mixin" + + is_sigaus = fields.Boolean(copy=True, default=False) + sigaus_amount = fields.Float( + compute="_compute_sigaus_amount", digits="Product Price" + ) + + _sigaus_secondary_unit_fields = {} + + def _compute_sigaus_amount(self): + for rec in self: + sigaus_amount = 0.0 + if rec.product_id and rec.product_id.sigaus_has_amount: + price = self.env["l10n.es.sigaus.amount"].get_sigaus_amount( + rec[rec._sigaus_secondary_unit_fields["parent_id"]][ + rec._sigaus_secondary_unit_fields["date_field"] + ] + ) + quantity = rec[ + rec._sigaus_secondary_unit_fields["uom_field"] + ]._compute_quantity( + rec[rec._sigaus_secondary_unit_fields["qty_field"]], + rec.product_id.uom_id, + ) + weight = quantity * rec.product_id.weight + sigaus_amount = weight * price + rec.sigaus_amount = sigaus_amount diff --git a/l10n_es_sigaus_account/models/sigaus_mixin.py b/l10n_es_sigaus_account/models/sigaus_mixin.py new file mode 100644 index 0000000000..0fb2f2f8ea --- /dev/null +++ b/l10n_es_sigaus_account/models/sigaus_mixin.py @@ -0,0 +1,187 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from datetime import date + +from odoo import SUPERUSER_ID, fields, models + + +class SigausMixin(models.AbstractModel): + _name = "sigaus.mixin" + _description = "Sigaus Mixin" + + is_sigaus = fields.Boolean( + compute="_compute_is_sigaus", + string="Subject to SIGAUS", + store=True, + readonly=False, + ) + sigaus_is_date = fields.Boolean( + compute="_compute_sigaus_is_date", + store=True, + help="Technical field to determine whether the date of a document subject to " + "SIGAUS is equal or after the date selected in the company from which SIGAUS " + "has to be applied.", + ) + sigaus_has_line = fields.Boolean(compute="_compute_sigaus_has_line") + # It cannot be a related field as sigaus.mixin does not have a company_id field + sigaus_company = fields.Boolean(compute="_compute_sigaus_company") + sigaus_automated_exception_id = fields.Many2one( + comodel_name="mail.activity", readonly=True + ) + + _sigaus_secondary_unit_fields = {} + + def _compute_is_sigaus(self): + for rec in self: + rec.is_sigaus = rec.company_id.sigaus_enable and ( + not rec.fiscal_position_id or rec.fiscal_position_id.sigaus_subject + ) + + def _compute_sigaus_is_date(self): + for rec in self: + try: + date = rec[rec._sigaus_secondary_unit_fields["date_field"]].date() + except AttributeError: + date = rec[rec._sigaus_secondary_unit_fields["date_field"]] + rec.sigaus_is_date = ( + rec.is_sigaus and date and date >= rec.company_id.sigaus_date_from + ) + + def _compute_sigaus_has_line(self): + for rec in self: + rec.sigaus_has_line = any( + line.is_sigaus + for line in rec[rec._sigaus_secondary_unit_fields["line_ids"]] + ) + + def _compute_sigaus_company(self): + for rec in self: + rec.sigaus_company = rec.company_id.sigaus_enable + + def _delete_sigaus(self): + self.filtered( + lambda a: a.state in self._sigaus_secondary_unit_fields["editable_states"] + ).mapped(self._sigaus_secondary_unit_fields["line_ids"]).filtered( + lambda b: b.is_sigaus + ).unlink() + + def _get_sigaus_line_vals(self, lines=False, **kwargs): + self.ensure_one() + sigaus_vals = dict() + sigaus_product_id = self.env.ref( + "l10n_es_sigaus_account.aportacion_sigaus_product_template" + ) + sigaus_vals["product_id"] = sigaus_product_id.id + kg_uom_id = self.env.ref("uom.product_uom_kgm") + sigaus_vals[ + self[ + self._sigaus_secondary_unit_fields["line_ids"] + ]._sigaus_secondary_unit_fields["uom_field"] + ] = kg_uom_id.id + date = False + sigaus_lines = ( + lines + if lines + else self[self._sigaus_secondary_unit_fields["line_ids"]].filtered( + lambda a: a.product_id and a.product_id.sigaus_has_amount + ) + ) + if self._name == "account.move": + # Get a default date to calculate the SIGAUS amount when the + # SIGAUS line is newly generated + date = self.sigaus_default_date(sigaus_lines) + else: + date = self[self._sigaus_secondary_unit_fields["date_field"]] + price = self.env["l10n.es.sigaus.amount"].get_sigaus_amount(date) + # if model isn't account.move we delete the sigaus line + invoice_lines = [] + if self._name != "account.move": + sigaus_line_delete = self[ + self._sigaus_secondary_unit_fields["line_ids"] + ].filtered(lambda a: a.product_id == sigaus_product_id) + if ( + sigaus_line_delete + and sigaus_line_delete[ + sigaus_line_delete._sigaus_secondary_unit_fields[ + "invoice_lines_field" + ] + ] + ): + invoice_lines = sigaus_line_delete[ + sigaus_line_delete._sigaus_secondary_unit_fields[ + "invoice_lines_field" + ] + ].ids + sigaus_line_delete.unlink() + weight = sum( + line[ + self[ + self._sigaus_secondary_unit_fields["line_ids"] + ]._sigaus_secondary_unit_fields["uom_field"] + ]._compute_quantity( + line[line._sigaus_secondary_unit_fields["qty_field"]], + line.product_id.uom_id, + ) + * line.product_id.weight + for line in sigaus_lines + ) + sigaus_vals.update( + { + self[ + self._sigaus_secondary_unit_fields["line_ids"] + ]._sigaus_secondary_unit_fields["qty_field"]: weight, + "price_unit": price, + "is_sigaus": True, + } + ) + if invoice_lines: + sigaus_vals.update( + { + self[ + self._sigaus_secondary_unit_fields["line_ids"] + ]._sigaus_secondary_unit_fields[ + "invoice_lines_field" + ]: invoice_lines + } + ) + if self._name == "account.move": + sigaus_vals["move_id"] = self.id + return sigaus_vals + + def automatic_sigaus_exception(self): + self.ensure_one() + products_without_weight = ( + self[self._sigaus_secondary_unit_fields["line_ids"]] + .mapped("product_id") + .filtered(lambda a: a.sigaus_has_amount and a.weight <= 0.0) + ) + if products_without_weight: + values = { + "model": self._name, + "origin": self.id, + "products": products_without_weight, + } + note = self.env["ir.qweb"]._render( + "l10n_es_sigaus_account.exception_sigaus", values + ) + if not self.sigaus_automated_exception_id: + odoobot_id = self.env.ref("base.partner_root").id + activity = self.activity_schedule( + "mail.mail_activity_data_warning", + date.today(), + note=note, + user_id=self.user_id.id or SUPERUSER_ID, + ) + activity.write( + { + "create_uid": odoobot_id, + } + ) + self.write( + { + "sigaus_automated_exception_id": activity.id, + } + ) + else: + self.sigaus_automated_exception_id.write({"note": note}) diff --git a/l10n_es_sigaus_account/readme/CONFIGURE.rst b/l10n_es_sigaus_account/readme/CONFIGURE.rst new file mode 100644 index 0000000000..a13937f931 --- /dev/null +++ b/l10n_es_sigaus_account/readme/CONFIGURE.rst @@ -0,0 +1,45 @@ +Se tienen que configurar los siguientes aspectos: + +* En la ficha del producto "Aportación SIGAUS (R.D. 679/2006)" establecer el impuesto + correspondiente. + +* La configuración del precio de la aportación SIGAUS que se aplica durante un periodo + de tiempo se realiza desde Facturación > Configuración > Aportación SIGAUS. En caso + de no rellenar el campo "Fecha hasta", el precio seleccionado se aplicará a partir de + la fecha indicada en "Fecha desde". El precio establecido dentro del periodo marcado + se utilizará siempre que se calcule la aportación SIGAUS en las facturas. + +* Es necesario indicar aquellas compañías en las que se aplicará la aportación SIGAUS. + Para ello, hay que acceder a la pestaña SIGAUS de la configuración de la compañía y + marcar la casilla "Habilitar SIGAUS". Asimismo, es obligatorio indicar la fecha a + partir de la que la aportación SIGAUS se podrá aplicar en el campo "SIGAUS fecha + desde". No será posible calcular la aportación SIGAUS con fecha anterior a la + seleccionada en este campo. Cuando la opción "Habilitar SIGAUS" está activada, se + muestra el campo "Mostrar cantidades de SIGAUS en líneas de informes" que, si está + marcada, permite mostrar la aportación SIGAUS de cada una de las líneas de facturas + en los informes. + +* Las posiciones fiscales con las que se aplicará la aportación SIGAUS tienen que + indicarse. Para ello hay que acceder a Facturación > Configuración > Posiciones + Fiscales y marcar la casilla "Sujeto a SIGAUS" en aquellas en las que se aplicará. + +* Se puede establecer que los productos de ciertas categorías estén sujetas a SIGAUS + accediendo a la configuración de la categoría y marcando la casilla "Sujeto a + SIGAUS". + +* Desde la ficha de los productos, pueden establecerse varias opciones de sujeción a la + aportación SIGAUS desde el campo "Sujeto a SIGAUS". Existen tres opciones: + + * "Categoría": La aplicación o no de la aportación SIGAUS para ese producto depende + de si la casilla "Sujeto a SIGAUS" está o no marcada en la categoría establecida. + * "Sí": Se aplica siempre la aportación SIGAUS, independientemente de lo seleccionado + en la categoría de producto. + * "No": No se aplica nunca la aportación SIGAUS, independientemente de lo + seleccionado en la categoría de producto. + +Cuando se calcule la aportación SIGAUS en facturas, se tendrá en cuenta el peso de +todos aquellos productos a los que se les aplica la aportación SIGAUS para determinar +el importe. + +* Todos los productos a los que se les aplica la aportación SIGAUS deben tener un peso + establecido. diff --git a/l10n_es_sigaus_account/readme/CONTRIBUTORS.rst b/l10n_es_sigaus_account/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..bb2815482c --- /dev/null +++ b/l10n_es_sigaus_account/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* `Sygel `_: + + * Manuel Regidor + * Harald Panten + * Valentín Vinagre diff --git a/l10n_es_sigaus_account/readme/DESCRIPTION.rst b/l10n_es_sigaus_account/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..783206d9d0 --- /dev/null +++ b/l10n_es_sigaus_account/readme/DESCRIPTION.rst @@ -0,0 +1,9 @@ +El origen de SIGAUS responde a la iniciativa de los fabricantes de lubricantes que, a +través de su participación en este Sistema, cumplen con las obligaciones establecidas +en la normativa sobre aceites usados (Real Decreto 679/2006, de 2 de junio, por el que +se regula la gestión de los aceites industriales usados). + +Este módulo permite el cálculo de la aportación SIGAUS en las facturas a partir del +peso de aquellos productos en los que se aplica. + +* Más información en https://www.sigaus.es diff --git a/l10n_es_sigaus_account/readme/ROADMAP.rst b/l10n_es_sigaus_account/readme/ROADMAP.rst new file mode 100644 index 0000000000..4b4f60fbf2 --- /dev/null +++ b/l10n_es_sigaus_account/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* El módulo no está preparado para añadir automáticamente las líneas de aportación + SIGAUS a los pedidos procedentes del comercio online. diff --git a/l10n_es_sigaus_account/readme/USAGE.rst b/l10n_es_sigaus_account/readme/USAGE.rst new file mode 100644 index 0000000000..db3bdb518f --- /dev/null +++ b/l10n_es_sigaus_account/readme/USAGE.rst @@ -0,0 +1,14 @@ +* El importe de la aportación SIGAUS se calculará a partir de los pesos de aquellos + productos sujetos a dicha aportación y el precio establecido en "Aportación SIGAUS" + según la fecha de factura o, en su defecto, la fecha de creación. + +* Los productos sujetos a aportación SIGAUS son los siguientes: + + * Aquellos que tienen establecida la opción "Sí" en el campo "Sujeto a SIGAUS". + * Aquellos que tienen establecida la opción "Categoría" en el campo "Sujeto a SIGAUS" + y cuya categoría tenga marcada la opción "Sujeto a SIGAUS". + +* Se mostrará un mensaje en el chatter si al calcular la aportación SIGAUS, alguno de + los productos sujetos no tiene un peso establecido. + +* Si se desmarca la opción "Sujeto a SIGAUS", no se aplicará la aportación SIGAUS. diff --git a/l10n_es_sigaus_account/security/ir.model.access.csv b/l10n_es_sigaus_account/security/ir.model.access.csv new file mode 100644 index 0000000000..881fff3ad2 --- /dev/null +++ b/l10n_es_sigaus_account/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +l10n_es_sigaus_amount_manager,l10n.es.sigaus.amount.manager,model_l10n_es_sigaus_amount,account.group_account_manager,1,1,1,1 +l10n_es_sigaus_amount_user_invoicing,l10n.es.sigaus.amount.user.invoicing,model_l10n_es_sigaus_amount,account.group_account_invoice,1,0,0,0 diff --git a/l10n_es_sigaus_account/static/description/icon.png b/l10n_es_sigaus_account/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..af0c57f04d6c6e7a955eaba14bae04a7961bb615 GIT binary patch literal 16375 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 literal 0 HcmV?d00001 diff --git a/l10n_es_sigaus_account/static/description/icon.svg b/l10n_es_sigaus_account/static/description/icon.svg new file mode 100644 index 0000000000..43822ac2c8 --- /dev/null +++ b/l10n_es_sigaus_account/static/description/icon.svg @@ -0,0 +1,350 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/l10n_es_sigaus_account/static/description/index.html b/l10n_es_sigaus_account/static/description/index.html new file mode 100644 index 0000000000..2726d6e7ed --- /dev/null +++ b/l10n_es_sigaus_account/static/description/index.html @@ -0,0 +1,506 @@ + + + + + + +SIGAUS - Facturación + + + +

    +

    SIGAUS - Facturación

    + + +

    Beta License: AGPL-3 OCA/l10n-spain Translate me on Weblate Try me on Runboat

    +

    El origen de SIGAUS responde a la iniciativa de los fabricantes de lubricantes que, a +través de su participación en este Sistema, cumplen con las obligaciones establecidas +en la normativa sobre aceites usados (Real Decreto 679/2006, de 2 de junio, por el que +se regula la gestión de los aceites industriales usados).

    +

    Este módulo permite el cálculo de la aportación SIGAUS en las facturas a partir del +peso de aquellos productos en los que se aplica.

    + +

    Table of contents

    + +
    +

    Configuration

    +

    Se tienen que configurar los siguientes aspectos:

    +
      +
    • En la ficha del producto “Aportación SIGAUS (R.D. 679/2006)” establecer el impuesto +correspondiente.
    • +
    • La configuración del precio de la aportación SIGAUS que se aplica durante un periodo +de tiempo se realiza desde Facturación > Configuración > Aportación SIGAUS. En caso +de no rellenar el campo “Fecha hasta”, el precio seleccionado se aplicará a partir de +la fecha indicada en “Fecha desde”. El precio establecido dentro del periodo marcado +se utilizará siempre que se calcule la aportación SIGAUS en las facturas.
    • +
    • Es necesario indicar aquellas compañías en las que se aplicará la aportación SIGAUS. +Para ello, hay que acceder a la pestaña SIGAUS de la configuración de la compañía y +marcar la casilla “Habilitar SIGAUS”. Asimismo, es obligatorio indicar la fecha a +partir de la que la aportación SIGAUS se podrá aplicar en el campo “SIGAUS fecha +desde”. No será posible calcular la aportación SIGAUS con fecha anterior a la +seleccionada en este campo. Cuando la opción “Habilitar SIGAUS” está activada, se +muestra el campo “Mostrar cantidades de SIGAUS en líneas de informes” que, si está +marcada, permite mostrar la aportación SIGAUS de cada una de las líneas de facturas +en los informes.
    • +
    • Las posiciones fiscales con las que se aplicará la aportación SIGAUS tienen que +indicarse. Para ello hay que acceder a Facturación > Configuración > Posiciones +Fiscales y marcar la casilla “Sujeto a SIGAUS” en aquellas en las que se aplicará.
    • +
    • Se puede establecer que los productos de ciertas categorías estén sujetas a SIGAUS +accediendo a la configuración de la categoría y marcando la casilla “Sujeto a +SIGAUS”.
    • +
    • Desde la ficha de los productos, pueden establecerse varias opciones de sujeción a la +aportación SIGAUS desde el campo “Sujeto a SIGAUS”. Existen tres opciones:
        +
      • “Categoría”: La aplicación o no de la aportación SIGAUS para ese producto depende +de si la casilla “Sujeto a SIGAUS” está o no marcada en la categoría establecida.
      • +
      • “Sí”: Se aplica siempre la aportación SIGAUS, independientemente de lo seleccionado +en la categoría de producto.
      • +
      • “No”: No se aplica nunca la aportación SIGAUS, independientemente de lo +seleccionado en la categoría de producto.
      • +
      +
    • +
    +

    Cuando se calcule la aportación SIGAUS en facturas, se tendrá en cuenta el peso de +todos aquellos productos a los que se les aplica la aportación SIGAUS para determinar +el importe.

    +
      +
    • Todos los productos a los que se les aplica la aportación SIGAUS deben tener un peso +establecido.
    • +
    +
    +
    +

    Usage

    +
      +
    • El importe de la aportación SIGAUS se calculará a partir de los pesos de aquellos +productos sujetos a dicha aportación y el precio establecido en “Aportación SIGAUS” +según la fecha de factura o, en su defecto, la fecha de creación.
    • +
    • Los productos sujetos a aportación SIGAUS son los siguientes:
        +
      • Aquellos que tienen establecida la opción “Sí” en el campo “Sujeto a SIGAUS”.
      • +
      • Aquellos que tienen establecida la opción “Categoría” en el campo “Sujeto a SIGAUS” +y cuya categoría tenga marcada la opción “Sujeto a SIGAUS”.
      • +
      +
    • +
    • Se mostrará un mensaje en el chatter si al calcular la aportación SIGAUS, alguno de +los productos sujetos no tiene un peso establecido.
    • +
    • Si se desmarca la opción “Sujeto a SIGAUS”, no se aplicará la aportación SIGAUS.
    • +
    +
    +
    +

    Known issues / Roadmap

    +
      +
    • El módulo no está preparado para añadir automáticamente las líneas de aportación +SIGAUS a los pedidos procedentes del comercio online.
    • +
    +
    +
    +

    Bug Tracker

    +

    Bugs are tracked on GitHub 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.

    +

    Do not contact contributors directly about support or help with technical issues.

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Sygel
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

    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/l10n-spain project on GitHub.

    +

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    +
    +
    +
    + + diff --git a/l10n_es_sigaus_account/tests/__init__.py b/l10n_es_sigaus_account/tests/__init__.py new file mode 100644 index 0000000000..dfe0d75591 --- /dev/null +++ b/l10n_es_sigaus_account/tests/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_l10n_es_sigaus_general_values +from . import test_l10n_es_sigaus_account diff --git a/l10n_es_sigaus_account/tests/common.py b/l10n_es_sigaus_account/tests/common.py new file mode 100644 index 0000000000..65c0498a6a --- /dev/null +++ b/l10n_es_sigaus_account/tests/common.py @@ -0,0 +1,60 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests import common + + +class TestL10nEsSigausCommon(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.company = cls.env.ref("base.main_company") + cls.company.write({"sigaus_enable": True, "sigaus_date_from": "2022-01-01"}) + cls.partner = cls.env["res.partner"].create({"name": "Test"}) + cls.fiscal_position_sigaus = cls.env["account.fiscal.position"].create( + {"name": "Test Fiscal Sigaus", "active": True, "sigaus_subject": True} + ) + cls.fiscal_position_no_sigaus = cls.env["account.fiscal.position"].create( + {"name": "Test Fiscal Sigaus", "active": True, "sigaus_subject": False} + ) + cls.category_sigaus = cls.env["product.category"].create( + {"name": "Sigaus Category", "sigaus_subject": True} + ) + cls.product_sigaus_no = cls.env["product.product"].create( + { + "name": "Product-1", + "sigaus_subject": "no", + "weight": 1, + } + ) + cls.product_sigaus_in_product = cls.env["product.product"].create( + { + "name": "Product (SIGAUS in product)", + "sigaus_subject": "yes", + "weight": 1, + } + ) + cls.product_sigaus_in_category = cls.env["product.product"].create( + { + "name": "Product (SIGAUS in category)", + "sigaus_subject": "category", + "weight": 2, + "categ_id": cls.category_sigaus.id, + } + ) + cls.product_sigaus_in_category_excluded = cls.env["product.product"].create( + { + "name": "Product (SIGAUS in category excluded)", + "sigaus_subject": "no", + "weight": 3, + "categ_id": cls.category_sigaus.id, + } + ) + cls.product_sigaus_no_weight = cls.env["product.product"].create( + { + "name": "Product (SIGAUS no weight)", + "sigaus_subject": "yes", + "weight": 0, + } + ) diff --git a/l10n_es_sigaus_account/tests/test_l10n_es_sigaus_account.py b/l10n_es_sigaus_account/tests/test_l10n_es_sigaus_account.py new file mode 100644 index 0000000000..9cbf9af213 --- /dev/null +++ b/l10n_es_sigaus_account/tests/test_l10n_es_sigaus_account.py @@ -0,0 +1,335 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.exceptions import ValidationError + +from .common import TestL10nEsSigausCommon + + +class TestL10nEsSigausInvoice(TestL10nEsSigausCommon): + def create_invoice(self, date, lines, sigaus_no=False): + invoice_lines = [] + for line in lines: + invoice_lines.append( + ( + 0, + False, + { + "product_id": line["product"].id, + "quantity": line["quantity"], + "price_unit": line["price_unit"], + }, + ) + ) + invoice = self.env["account.move"].create( + { + "company_id": self.company.id, + "partner_id": self.partner.id, + "invoice_date": date, + "invoice_line_ids": invoice_lines, + "move_type": "out_invoice", + "is_sigaus": not sigaus_no, + } + ) + return invoice + + def create_reversal(self, reversal_type): + lines = [ + { + "product": self.product_sigaus_in_product, + "quantity": 1.0, + "price_unit": 2, + }, + { + "product": self.product_sigaus_in_category, + "quantity": 2.0, + "price_unit": 3, + }, + { + "product": self.product_sigaus_in_category_excluded, + "quantity": 3.0, + "price_unit": 4, + }, + ] + invoice = self.create_invoice("2023-01-01", lines) + invoice.action_post() + move_reversal = ( + self.env["account.move.reversal"] + .with_context(active_model="account.move", active_ids=[invoice.id]) + .create( + { + "date": "2023-01-01", + "refund_method": reversal_type, + "journal_id": invoice.journal_id.id, + } + ) + ) + return invoice, move_reversal.reverse_moves() + + def test_invoice_without_sigaus_products(self): + lines = [{"product": self.product_sigaus_no, "quantity": 2.0, "price_unit": 1}] + invoice = self.create_invoice("2023-01-01", lines) + self.assertEqual(invoice.sigaus_has_line, False) + self.assertEqual(invoice.amount_untaxed, 2) + + def test_invoice_with_sigaus_products_no_weight(self): + lines = [ + {"product": self.product_sigaus_no_weight, "quantity": 2.0, "price_unit": 1} + ] + invoice = self.create_invoice("2023-01-01", lines) + self.assertEqual(invoice.sigaus_company, True) + self.assertTrue(invoice.sigaus_automated_exception_id) + + def test_invoice_with_sigaus(self): + lines = [ + { + "product": self.product_sigaus_in_product, + "quantity": 1.0, + "price_unit": 2, + }, + { + "product": self.product_sigaus_in_category, + "quantity": 2.0, + "price_unit": 3, + }, + { + "product": self.product_sigaus_in_category_excluded, + "quantity": 3.0, + "price_unit": 4, + }, + ] + invoice = self.create_invoice("2023-01-01", lines, True) + self.assertEqual(invoice.sigaus_has_line, False) + self.assertEqual(invoice.amount_untaxed, 20.00) + product_sigaus_in_product_line = invoice.invoice_line_ids.filtered( + lambda a: a.product_id == self.product_sigaus_in_product + ) + self.assertEqual(product_sigaus_in_product_line.sigaus_amount, 0.06) + product_sigaus_in_category_line = invoice.invoice_line_ids.filtered( + lambda a: a.product_id == self.product_sigaus_in_category + ) + self.assertEqual(product_sigaus_in_category_line.sigaus_amount, 0.24) + product_sigaus_in_product_line = invoice.invoice_line_ids.filtered( + lambda a: a.product_id == self.product_sigaus_in_product + ) + self.assertEqual(product_sigaus_in_product_line.sigaus_amount, 0.06) + product_sigaus_in_category_excluded_line = invoice.invoice_line_ids.filtered( + lambda a: a.product_id == self.product_sigaus_in_category_excluded + ) + self.assertEqual(product_sigaus_in_category_excluded_line.sigaus_amount, 0.00) + + invoice.write({"is_sigaus": True}) + self.assertEqual(invoice.sigaus_has_line, True) + self.assertEqual(invoice.amount_untaxed, 20.3) + invoice.write( + { + "invoice_line_ids": [ + ( + 0, + False, + { + "product_id": self.product_sigaus_in_product.id, + "quantity": 1.0, + "price_unit": 2, + }, + ) + ] + } + ) + self.assertEqual(invoice.amount_untaxed, 22.36) + invoice.write({"fiscal_position_id": self.fiscal_position_no_sigaus.id}) + self.assertEqual(invoice.amount_untaxed, 22.00) + invoice.write({"fiscal_position_id": False}) + self.assertEqual(invoice.amount_untaxed, 22.36) + invoice.write({"is_sigaus": False}) + self.assertEqual(invoice.amount_untaxed, 22.00) + + def test_invoice_with_sigaus_general_reverse(self): + lines = [ + { + "product": self.product_sigaus_in_product, + "quantity": 1.0, + "price_unit": 2, + }, + { + "product": self.product_sigaus_in_category, + "quantity": 2.0, + "price_unit": 3, + }, + { + "product": self.product_sigaus_in_category_excluded, + "quantity": 3.0, + "price_unit": 4, + }, + ] + invoice = self.create_invoice("2023-01-01", lines) + invoice_sigaus_line = invoice.invoice_line_ids.filtered("is_sigaus") + invoice.action_post() + credit_note = invoice._reverse_moves() + credit_note.write({"invoice_date": invoice.invoice_date}) + self.assertEqual(credit_note.move_type, "out_refund") + self.assertEqual(invoice.amount_untaxed, credit_note.amount_untaxed) + self.assertTrue(credit_note.is_sigaus) + credit_note_sigaus_line = credit_note.invoice_line_ids.filtered("is_sigaus") + self.assertEqual(len(credit_note_sigaus_line), 1) + self.assertEqual( + invoice_sigaus_line.price_subtotal, credit_note_sigaus_line.price_subtotal + ) + + def test_invoice_with_sigaus_reverse_refund(self): + invoice, reversal = self.create_reversal("refund") + invoice_sigaus_line = invoice.invoice_line_ids.filtered("is_sigaus") + credit_note = self.env["account.move"].browse(reversal["res_id"]) + self.assertEqual(credit_note.move_type, "out_refund") + self.assertEqual(invoice.amount_untaxed, credit_note.amount_untaxed) + self.assertTrue(credit_note.is_sigaus) + credit_note_sigaus_line = credit_note.invoice_line_ids.filtered("is_sigaus") + self.assertEqual(len(credit_note_sigaus_line), 1) + self.assertEqual( + invoice_sigaus_line.price_subtotal, credit_note_sigaus_line.price_subtotal + ) + self.assertEqual( + invoice_sigaus_line.amount_currency, + -1 * credit_note_sigaus_line.amount_currency, + ) + + def test_invoice_with_sigaus_reverse_cancel(self): + invoice, reversal = self.create_reversal("cancel") + invoice_sigaus_line = invoice.invoice_line_ids.filtered("is_sigaus") + self.assertEqual(invoice.payment_state, "reversed") + credit_note = self.env["account.move"].browse(reversal["res_id"]) + self.assertEqual(credit_note.move_type, "out_refund") + self.assertEqual(invoice.amount_untaxed, credit_note.amount_untaxed) + self.assertTrue(credit_note.is_sigaus) + credit_note_sigaus_line = credit_note.invoice_line_ids.filtered("is_sigaus") + self.assertEqual(len(credit_note_sigaus_line), 1) + self.assertEqual( + invoice_sigaus_line.price_subtotal, credit_note_sigaus_line.price_subtotal + ) + self.assertEqual( + invoice_sigaus_line.amount_currency, + -1 * credit_note_sigaus_line.amount_currency, + ) + + def test_invoice_with_sigaus_reverse_modify(self): + invoice, reversal = self.create_reversal("modify") + invoice_sigaus_line = invoice.invoice_line_ids.filtered("is_sigaus") + self.assertEqual(invoice.payment_state, "reversed") + new_invoice = self.env["account.move"].browse(reversal["res_id"]) + new_invoice.write({"invoice_date": invoice.invoice_date}) + self.assertEqual(new_invoice.move_type, "out_invoice") + self.assertEqual(invoice.amount_untaxed, new_invoice.amount_untaxed) + self.assertTrue(new_invoice.is_sigaus) + new_invoice_sigaus_line = new_invoice.invoice_line_ids.filtered("is_sigaus") + self.assertEqual(len(new_invoice_sigaus_line), 1) + self.assertEqual( + invoice_sigaus_line.price_subtotal, new_invoice_sigaus_line.price_subtotal + ) + self.assertEqual( + invoice_sigaus_line.amount_currency, new_invoice_sigaus_line.amount_currency + ) + + def test_invoice_with_sigaus_different_dates(self): + self.company.write({"sigaus_date_from": "3000-01-01"}) + lines = [ + { + "product": self.product_sigaus_in_product, + "quantity": 1.0, + "price_unit": 2, + }, + { + "product": self.product_sigaus_in_category, + "quantity": 2.0, + "price_unit": 3, + }, + { + "product": self.product_sigaus_in_category_excluded, + "quantity": 3.0, + "price_unit": 4, + }, + ] + invoice = self.create_invoice(False, lines) + self.assertFalse(invoice.sigaus_is_date) + self.assertFalse(invoice.sigaus_has_line) + invoice.write({"invoice_date": "3000-01-01"}) + self.assertTrue(invoice.sigaus_is_date) + self.assertTrue(invoice.sigaus_has_line) + self.company.write({"sigaus_date_from": "2023-01-01"}) + lines = [ + { + "product": self.product_sigaus_in_product, + "quantity": 1.0, + "price_unit": 2, + }, + { + "product": self.product_sigaus_in_category, + "quantity": 2.0, + "price_unit": 3, + }, + { + "product": self.product_sigaus_in_category_excluded, + "quantity": 3.0, + "price_unit": 4, + }, + ] + invoice = self.create_invoice(False, lines) + self.assertTrue(invoice.sigaus_is_date) + self.assertTrue(invoice.sigaus_has_line) + + def test_copy_sigaus_invoice(self): + lines = [ + { + "product": self.product_sigaus_in_product, + "quantity": 1.0, + "price_unit": 2, + }, + { + "product": self.product_sigaus_in_category, + "quantity": 2.0, + "price_unit": 3, + }, + { + "product": self.product_sigaus_in_category_excluded, + "quantity": 3.0, + "price_unit": 4, + }, + ] + invoice = self.create_invoice("2023-01-01", lines) + invoice_copy = invoice.copy({"invoice_date": "2023-01-01"}) + self.assertEqual(invoice.amount_untaxed, invoice_copy.amount_untaxed) + self.assertTrue(invoice_copy.is_sigaus) + self.assertTrue(invoice_copy.sigaus_has_line) + self.assertEqual(len(invoice_copy.invoice_line_ids.filtered("is_sigaus")), 1) + self.assertEqual( + invoice_copy.invoice_line_ids.filtered("is_sigaus").price_subtotal, 0.3 + ) + invoice.write( + { + "invoice_line_ids": [ + ( + 0, + False, + { + "product_id": self.product_sigaus_in_category.id, + "quantity": 2.0, + "price_unit": 3, + }, + ), + ] + } + ) + self.assertEqual(len(invoice_copy.invoice_line_ids.filtered("is_sigaus")), 1) + self.assertEqual( + invoice_copy.invoice_line_ids.filtered("is_sigaus").price_subtotal, 0.3 + ) + + def test_invoice_error_date(self): + lines = [ + { + "product": self.product_sigaus_in_product, + "quantity": 1.0, + "price_unit": 2, + } + ] + with self.assertRaises(ValidationError): + self.create_invoice("2022-01-01", lines) diff --git a/l10n_es_sigaus_account/tests/test_l10n_es_sigaus_general_values.py b/l10n_es_sigaus_account/tests/test_l10n_es_sigaus_general_values.py new file mode 100644 index 0000000000..9c41bc7c15 --- /dev/null +++ b/l10n_es_sigaus_account/tests/test_l10n_es_sigaus_general_values.py @@ -0,0 +1,42 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.exceptions import ValidationError + +from .common import TestL10nEsSigausCommon + + +class TestL10nEsSigausPriceRange(TestL10nEsSigausCommon): + def test_wrong_date(self): + with self.assertRaises(ValidationError): + self.env["l10n.es.sigaus.amount"].create( + { + "name": "Test", + "price": 0.1, + "date_from": "2021-01-01", + "date_to": "2020-01-01", + } + ) + + def test_overlapping_dates(self): + self.env["l10n.es.sigaus.amount"].create( + { + "name": "Test-1", + "price": 0.1, + "date_from": "2020-01-01", + "date_to": "2021-01-01", + } + ) + with self.assertRaises(ValidationError): + self.env["l10n.es.sigaus.amount"].create( + { + "name": "Test-2", + "price": 0.1, + "date_from": "2020-01-07", + "date_to": "2021-01-07", + } + ) + + def test_sigaus_date_from_required(self): + with self.assertRaises(ValidationError): + self.company.write({"sigaus_date_from": False}) diff --git a/l10n_es_sigaus_account/views/account_fiscal_position_views.xml b/l10n_es_sigaus_account/views/account_fiscal_position_views.xml new file mode 100644 index 0000000000..d1a9a46ae3 --- /dev/null +++ b/l10n_es_sigaus_account/views/account_fiscal_position_views.xml @@ -0,0 +1,24 @@ + + + + l10n.es.sigaus.account.view.account.position.form + account.fiscal.position + + + + + + + + + l10n.es.sigaus.account.view.account.position.tree + account.fiscal.position + + + + + + + + diff --git a/l10n_es_sigaus_account/views/account_move_views.xml b/l10n_es_sigaus_account/views/account_move_views.xml new file mode 100644 index 0000000000..964fd9ca37 --- /dev/null +++ b/l10n_es_sigaus_account/views/account_move_views.xml @@ -0,0 +1,30 @@ + + + + l10n.es.sigaus.account.view.move.form + account.move + + + + + + + + + + + + + + + diff --git a/l10n_es_sigaus_account/views/l10n_es_sigaus_amount_views.xml b/l10n_es_sigaus_account/views/l10n_es_sigaus_amount_views.xml new file mode 100644 index 0000000000..9c53d7bdc6 --- /dev/null +++ b/l10n_es_sigaus_account/views/l10n_es_sigaus_amount_views.xml @@ -0,0 +1,68 @@ + + + + l10n.es.sigaus.account.amount.form.view + l10n.es.sigaus.amount + +
    + + + + + + + + + + + +
    +
    + + l10n.es.sigaus.account.amount.tree.view + l10n.es.sigaus.amount + + + + + + + + + + + L10n Es Sigaus Amount + l10n.es.sigaus.amount + tree,form + + + + +
    diff --git a/l10n_es_sigaus_account/views/product_category_views.xml b/l10n_es_sigaus_account/views/product_category_views.xml new file mode 100644 index 0000000000..d83e25eea6 --- /dev/null +++ b/l10n_es_sigaus_account/views/product_category_views.xml @@ -0,0 +1,14 @@ + + + + l10n.es.sigaus.account.product.category.form.view + product.category + + + + + + + + diff --git a/l10n_es_sigaus_account/views/product_views.xml b/l10n_es_sigaus_account/views/product_views.xml new file mode 100644 index 0000000000..61ecdd46f6 --- /dev/null +++ b/l10n_es_sigaus_account/views/product_views.xml @@ -0,0 +1,14 @@ + + + + l10n.es.sigaus.account.product.template.form.view + product.template + + + + + + + + diff --git a/l10n_es_sigaus_account/views/report_invoice.xml b/l10n_es_sigaus_account/views/report_invoice.xml new file mode 100644 index 0000000000..96f3b1fee0 --- /dev/null +++ b/l10n_es_sigaus_account/views/report_invoice.xml @@ -0,0 +1,18 @@ + + + + diff --git a/l10n_es_sigaus_account/views/res_company_views.xml b/l10n_es_sigaus_account/views/res_company_views.xml new file mode 100644 index 0000000000..108c2ab833 --- /dev/null +++ b/l10n_es_sigaus_account/views/res_company_views.xml @@ -0,0 +1,26 @@ + + + + l10n.es.sigaus.account.view.company.form + res.company + + + + + + + + + + + + + + diff --git a/l10n_es_sigaus_account/wizard/__init__.py b/l10n_es_sigaus_account/wizard/__init__.py new file mode 100644 index 0000000000..f4419ff8f1 --- /dev/null +++ b/l10n_es_sigaus_account/wizard/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import account_move_reversal diff --git a/l10n_es_sigaus_account/wizard/account_move_reversal.py b/l10n_es_sigaus_account/wizard/account_move_reversal.py new file mode 100644 index 0000000000..f8d81f1db9 --- /dev/null +++ b/l10n_es_sigaus_account/wizard/account_move_reversal.py @@ -0,0 +1,13 @@ +# Copyright 2023 Manuel Regidor +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class AccountMoveReversal(models.TransientModel): + _inherit = "account.move.reversal" + + def reverse_moves(self): + if any(move.is_sigaus for move in self.move_ids): + self = self.with_context(reverse_has_sigaus=True) + return super().reverse_moves() diff --git a/l10n_mx_res_partner_csf/README.rst b/l10n_mx_res_partner_csf/README.rst index c94875f7c1..e3c4c592ba 100644 --- a/l10n_mx_res_partner_csf/README.rst +++ b/l10n_mx_res_partner_csf/README.rst @@ -7,7 +7,7 @@ Contact CSF for Mexico !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:218019f2862d69bc3801e33c068ccfece5081fb367b2c248c6134113d324ea56 + !! source digest: sha256:6bd9ac9c48478c2d581e24403600c600e079e62582ba3ee9da6e1fbe23672bbb !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/l10n_mx_res_partner_csf/__manifest__.py b/l10n_mx_res_partner_csf/__manifest__.py index 4a50b258eb..e26d9f4318 100644 --- a/l10n_mx_res_partner_csf/__manifest__.py +++ b/l10n_mx_res_partner_csf/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Contact CSF for Mexico", "summary": "Scan and extract information from CSF", - "version": "16.0.1.0.2", + "version": "16.0.1.0.3", "license": "AGPL-3", "website": "https://github.com/OCA/l10n-mexico", "author": "Open Source Integrators, " "Odoo Community Association (OCA)", diff --git a/l10n_mx_res_partner_csf/i18n/l10n_mx_res_partner_csf.pot b/l10n_mx_res_partner_csf/i18n/l10n_mx_res_partner_csf.pot index 708f25c54e..6cb21cda85 100644 --- a/l10n_mx_res_partner_csf/i18n/l10n_mx_res_partner_csf.pot +++ b/l10n_mx_res_partner_csf/i18n/l10n_mx_res_partner_csf.pot @@ -13,6 +13,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: l10n_mx_res_partner_csf +#: model:ir.model,name:l10n_mx_res_partner_csf.model_import_csf +msgid "CSF Import Wizard" +msgstr "" + #. module: l10n_mx_res_partner_csf #: model_terms:ir.ui.view,arch_db:l10n_mx_res_partner_csf.import_csf msgid "Cancel" @@ -91,8 +96,3 @@ msgstr "" #, python-format msgid "Uploaded file is not in PDF format (%s)." msgstr "" - -#. module: l10n_mx_res_partner_csf -#: model:ir.model,name:l10n_mx_res_partner_csf.model_import_csf -msgid "import.csf" -msgstr "" diff --git a/l10n_mx_res_partner_csf/static/description/index.html b/l10n_mx_res_partner_csf/static/description/index.html index eb68461ca9..c5be033279 100644 --- a/l10n_mx_res_partner_csf/static/description/index.html +++ b/l10n_mx_res_partner_csf/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

    Contact CSF for Mexico

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:218019f2862d69bc3801e33c068ccfece5081fb367b2c248c6134113d324ea56 +!! source digest: sha256:6bd9ac9c48478c2d581e24403600c600e079e62582ba3ee9da6e1fbe23672bbb !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/l10n-mexico Translate me on Weblate Try me on Runboat

    This module allows you to upload the proof of tax situation (Constancia de diff --git a/l10n_mx_res_partner_csf/wizard/import_csf.py b/l10n_mx_res_partner_csf/wizard/import_csf.py index d17921af8c..3fd963193c 100644 --- a/l10n_mx_res_partner_csf/wizard/import_csf.py +++ b/l10n_mx_res_partner_csf/wizard/import_csf.py @@ -15,6 +15,7 @@ class ImportCSF(models.TransientModel): _name = "import.csf" + _description = "CSF Import Wizard" file = fields.Binary(required=True, attachment=True) file_name = fields.Char() diff --git a/l10n_ro_account_edi_ubl/README.rst b/l10n_ro_account_edi_ubl/README.rst index b4a43efc5b..3e763925a4 100644 --- a/l10n_ro_account_edi_ubl/README.rst +++ b/l10n_ro_account_edi_ubl/README.rst @@ -7,7 +7,7 @@ Romania - eFactura Account EDI UBL !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:47dfcc925d5ccf926a56298916caa5c515aa1e80b6c3f4815377f322b2917aa1 + !! source digest: sha256:a47e604b4bc9a6ad039a24ebaab3748777570ec1de98bfff926013e17380861d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png diff --git a/l10n_ro_account_edi_ubl/__manifest__.py b/l10n_ro_account_edi_ubl/__manifest__.py index 36c0ab847a..5305a7c207 100644 --- a/l10n_ro_account_edi_ubl/__manifest__.py +++ b/l10n_ro_account_edi_ubl/__manifest__.py @@ -20,7 +20,7 @@ "views/cius_template.xml", ], "license": "AGPL-3", - "version": "16.0.1.36.0", + "version": "16.0.1.38.0", "author": "Terrabit," "NextERP Romania," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/l10n-romania", "installable": True, diff --git a/l10n_ro_account_edi_ubl/i18n/l10n_ro_account_edi_ubl.pot b/l10n_ro_account_edi_ubl/i18n/l10n_ro_account_edi_ubl.pot index aef35478f2..cbebdae913 100644 --- a/l10n_ro_account_edi_ubl/i18n/l10n_ro_account_edi_ubl.pot +++ b/l10n_ro_account_edi_ubl/i18n/l10n_ro_account_edi_ubl.pot @@ -105,6 +105,11 @@ msgstr "" msgid "Default PDF report to be attached to xml e-invoice." msgstr "" +#. module: l10n_ro_account_edi_ubl +#: model_terms:ir.ui.view,arch_db:l10n_ro_account_edi_ubl.res_config_settings_view_form +msgid "Define if invoices validated by ANAf will be stored in Odoo." +msgstr "" + #. module: l10n_ro_account_edi_ubl #: model_terms:ir.ui.view,arch_db:l10n_ro_account_edi_ubl.res_config_settings_view_form msgid "" @@ -311,6 +316,12 @@ msgstr "" msgid "Start date to download e-invoices" msgstr "" +#. module: l10n_ro_account_edi_ubl +#: model:ir.model.fields,field_description:l10n_ro_account_edi_ubl.field_res_company__l10n_ro_store_einvoices +#: model:ir.model.fields,field_description:l10n_ro_account_edi_ubl.field_res_config_settings__l10n_ro_store_einvoices +msgid "Store E-Invoice signed by Anaf." +msgstr "" + #. module: l10n_ro_account_edi_ubl #: model:ir.model.fields,help:l10n_ro_account_edi_ubl.field_account_bank_statement_line__l10n_ro_edi_transaction #: model:ir.model.fields,help:l10n_ro_account_edi_ubl.field_account_move__l10n_ro_edi_transaction diff --git a/l10n_ro_account_edi_ubl/i18n/ro.po b/l10n_ro_account_edi_ubl/i18n/ro.po index a8bd043de7..831ceab331 100644 --- a/l10n_ro_account_edi_ubl/i18n/ro.po +++ b/l10n_ro_account_edi_ubl/i18n/ro.po @@ -108,6 +108,11 @@ msgstr "" msgid "Default PDF report to be attached to xml e-invoice." msgstr "" +#. module: l10n_ro_account_edi_ubl +#: model_terms:ir.ui.view,arch_db:l10n_ro_account_edi_ubl.res_config_settings_view_form +msgid "Define if invoices validated by ANAf will be stored in Odoo." +msgstr "" + #. module: l10n_ro_account_edi_ubl #: model_terms:ir.ui.view,arch_db:l10n_ro_account_edi_ubl.res_config_settings_view_form msgid "" @@ -317,6 +322,12 @@ msgstr "" msgid "Start date to download e-invoices" msgstr "" +#. module: l10n_ro_account_edi_ubl +#: model:ir.model.fields,field_description:l10n_ro_account_edi_ubl.field_res_company__l10n_ro_store_einvoices +#: model:ir.model.fields,field_description:l10n_ro_account_edi_ubl.field_res_config_settings__l10n_ro_store_einvoices +msgid "Store E-Invoice signed by Anaf." +msgstr "" + #. module: l10n_ro_account_edi_ubl #: model:ir.model.fields,help:l10n_ro_account_edi_ubl.field_account_bank_statement_line__l10n_ro_edi_transaction #: model:ir.model.fields,help:l10n_ro_account_edi_ubl.field_account_move__l10n_ro_edi_transaction diff --git a/l10n_ro_account_edi_ubl/models/account_edi_format.py b/l10n_ro_account_edi_ubl/models/account_edi_format.py index d37de24d79..4d60073516 100644 --- a/l10n_ro_account_edi_ubl/models/account_edi_format.py +++ b/l10n_ro_account_edi_ubl/models/account_edi_format.py @@ -190,7 +190,7 @@ def _post_invoice_edi(self, invoices): and not invoice.l10n_ro_edi_transaction and not res.get("transaction") ): - res["success"] = False + res[invoice]["success"] = False return res def _cancel_invoice_edi(self, invoices): @@ -240,6 +240,8 @@ def _l10n_ro_post_invoice_step_2(self, invoice, attachment): if res.get("success", False): res.update({"attachment": attachment}) invoice.message_post(body=_("The invoice was validated by ANAF.")) + if invoice.company_id.l10n_ro_store_einvoices: + invoice.l10n_ro_download_zip_anaf() return res def _l10n_ro_anaf_call(self, func, anaf_config, params, data=None, method="POST"): diff --git a/l10n_ro_account_edi_ubl/models/res_company.py b/l10n_ro_account_edi_ubl/models/res_company.py index f03f210411..324678fe33 100644 --- a/l10n_ro_account_edi_ubl/models/res_company.py +++ b/l10n_ro_account_edi_ubl/models/res_company.py @@ -36,6 +36,9 @@ class ResCompany(models.Model): l10n_ro_download_einvoices_days = fields.Integer( string="Maximum number of days to download e-invoices.", default=10 ) + l10n_ro_store_einvoices = fields.Boolean( + string="Store E-Invoice signed by Anaf.", default=False + ) @api.constrains("l10n_ro_edi_residence", "l10n_ro_download_einvoices_days") def _check_l10n_ro_edi_residence(self): diff --git a/l10n_ro_account_edi_ubl/models/res_config_settings.py b/l10n_ro_account_edi_ubl/models/res_config_settings.py index cc974aa3b6..099db942c8 100644 --- a/l10n_ro_account_edi_ubl/models/res_config_settings.py +++ b/l10n_ro_account_edi_ubl/models/res_config_settings.py @@ -41,3 +41,8 @@ class ResConfigSettings(models.TransientModel): readonly=False, string="Maximum number of days to download e-invoices.", ) + l10n_ro_store_einvoices = fields.Boolean( + related="company_id.l10n_ro_store_einvoices", + readonly=False, + string="Store E-Invoice signed by Anaf.", + ) diff --git a/l10n_ro_account_edi_ubl/static/description/index.html b/l10n_ro_account_edi_ubl/static/description/index.html index a838310d06..d2bf024766 100644 --- a/l10n_ro_account_edi_ubl/static/description/index.html +++ b/l10n_ro_account_edi_ubl/static/description/index.html @@ -366,7 +366,7 @@

    Romania - eFactura Account EDI UBL

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:47dfcc925d5ccf926a56298916caa5c515aa1e80b6c3f4815377f322b2917aa1 +!! source digest: sha256:a47e604b4bc9a6ad039a24ebaab3748777570ec1de98bfff926013e17380861d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Mature License: AGPL-3 OCA/l10n-romania Translate me on Weblate Try me on Runboat

    The module will generate E-Invoice XML files according to ANAF E-Invoicing service.

    diff --git a/l10n_ro_account_edi_ubl/views/res_config_settings_views.xml b/l10n_ro_account_edi_ubl/views/res_config_settings_views.xml index f64562f02b..0719c29e49 100644 --- a/l10n_ro_account_edi_ubl/views/res_config_settings_views.xml +++ b/l10n_ro_account_edi_ubl/views/res_config_settings_views.xml @@ -117,6 +117,25 @@
    +
    +
    +
    +
    +
    +
    +
    + Define if invoices validated by ANAf will be stored in Odoo. +
    +
    +
    diff --git a/mis_builder/i18n/it.po b/mis_builder/i18n/it.po index b5021ab185..b5d52e396c 100644 --- a/mis_builder/i18n/it.po +++ b/mis_builder/i18n/it.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-05-24 19:09+0000\n" -"Last-Translator: Francesco Foresti \n" +"PO-Revision-Date: 2024-02-19 10:34+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" @@ -37,6 +37,15 @@ msgid "" "receivable accounts over\n" " the period." msgstr "" +"\n" +" balp[('user_type_id', '=',\n" +" ref('account.\n" +" data_account_type_receivable')." +"id)][]\n" +" \n" +" : variazione del bilancio di tutti i " +"crediti\n" +" nel periodo." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -48,6 +57,12 @@ msgid "" " : balance of move lines related to " "tax grid 56." msgstr "" +"\n" +" balp[][('tax_line_id.tag_ids', " +"'=', ref('l10n_be.tax_tag_56').id)]\n" +" \n" +" : bilancio righe movimento relative " +"alla griglia imposta 56." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -61,6 +76,14 @@ msgid "" "and journal BNK1 during\n" " the period." msgstr "" +"\n" +" debp[55%][('journal_id.code', " +"'=',\n" +" 'BNK1')]\n" +" \n" +" : somma di tutti i debiti nei conti " +"55 e registro BNK1\n" +" nel periodo." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -68,6 +91,8 @@ msgid "" "AccountingNone : a null value that behaves as 0 in\n" " arithmetic operations." msgstr "" +"AccountingNone : un valore nullo vale come 0\n" +" nelle operazioni aritmetiche." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -77,6 +102,10 @@ msgid "" "balance, debit, credit,\n" " positive balance, negative balance." msgstr "" +"bal, crd, deb, \n" +" pbal, nbal : " +"bilancio, debito, credito,\n" +" bilancio positivo, bilancio negativo." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -85,6 +114,9 @@ msgid "" " the period (it is the same as " "balp[70]." msgstr "" +"bal[70] : variazioni de di bilancio del conto 70\n" +" nel periodo (è lo stesso di " +"balp[70]." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -92,11 +124,13 @@ msgid "" "bale[1%] : balance of accounts starting with 1 at\n" " end of period." msgstr "" +"bale[1%] : bilancio dei conti che iniziano con 1\n" +" alla fine del periodo." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form msgid "bali[70,60] : initial balance of accounts 70 and 60." -msgstr "" +msgstr "bali[70,60] : bilancio iniziale dei conti tra 70 e 60." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -107,6 +141,11 @@ msgid "" "loss of previous fiscal\n" " years." msgstr "" +"balu[] : (u per non allocati) è una espressione " +"speciale\n" +" che visualizza i ricavi/perdite non " +"allocati dell'anno fiscale\n" +" precedente." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -114,6 +153,8 @@ msgid "" "crdp[40%] : sum of all credits on accounts starting\n" " with 40 during the period." msgstr "" +"crdp[40%] : comma di tutti i crediti nei conti che iniziano\n" +" con 40 nel periodo." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -122,6 +163,8 @@ msgid "" "the\n" " period." msgstr "" +"date_from, date_to : date iniziale e finale del\n" +" periodo." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -129,6 +172,8 @@ msgid "" "datetime, datetime, dateutil : the " "python modules." msgstr "" +"datetime, datetime, dateutil : i " +"moduli Python." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -137,6 +182,9 @@ msgid "" "the period,\n" " initial balance, ending balance" msgstr "" +"p, i, e : rispettivamente la " +"variazione nel periodo,\n" +" bilancio iniziale, bilancio finale" #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -145,6 +193,9 @@ msgid "" " starting with 55 whose ending " "balance is positive." msgstr "" +"pbale[55%] : somma di tutti i bilanci finalei dei conti\n" +" che iniziano con 55 e hanno bilancio " +"finale positivo." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form @@ -155,11 +206,16 @@ msgid "" "expected, very\n" " similar to the python builtins." msgstr "" +"sum, min,\n" +" max, len,\n" +" avg : si comporta come " +"atteso, molto\n" +" simile ai metodi integrati Python." #. module: mis_builder #: model_terms:ir.ui.view,arch_db:mis_builder.report_mis_report_instance msgid "-" -msgstr "" +msgstr "-" #. module: mis_builder #: model:ir.model.fields,help:mis_builder.field_mis_report_instance_period__source_aml_model_id @@ -167,6 +223,8 @@ msgid "" "A 'move line like' model, ie having at least debit, credit, date, account_id " "and company_id fields." msgstr "" +"Un modello 'simile alla riga movimento', cioè che ha almeno i campi debit, " +"credit, date, account_id e company_id." #. module: mis_builder #: model:ir.model.fields,help:mis_builder.field_mis_report__move_lines_source @@ -175,6 +233,9 @@ msgid "" "A 'move line like' model, ie having at least debit, credit, date, account_id " "and company_id fields. This model is the data source for column Actuals." msgstr "" +"Un modello 'simile alla riga movimento', cioè con almeno i campi debit, " +"credit, date, account_id e company_id. Questo modello è l'origine dati per " +"la colonna Corrente." #. module: mis_builder #. odoo-python @@ -188,6 +249,8 @@ msgstr "" #: model:ir.model.fields,help:mis_builder.field_mis_report_instance_period__analytic_domain msgid "A domain to additionally filter move lines considered in this column." msgstr "" +"Un dominio per ulteriori filtri delle righe movimento considerato nella " +"colonna." #. module: mis_builder #: model:ir.model.fields,help:mis_builder.field_mis_report_instance__analytic_domain @@ -197,11 +260,15 @@ msgid "" "as budgets by account, make sure to use only fields that are available in " "all move line sources." msgstr "" +"Un dominio per un filtro addizionale considerato nel resoconto. Precuazione: " +"quando si usano origini diverse di righe movimento in colonne diverse, come " +"budget per conto, assicurarsi di utilizzare solo campi che sono disponibili " +"in tutte le sorgenti di righe movimento." #. module: mis_builder #: model:ir.model.fields,field_description:mis_builder.field_mis_report__account_model msgid "Account Model" -msgstr "" +msgstr "Modello contabile" #. module: mis_builder #: model:ir.model.fields,field_description:mis_builder.field_mis_report_kpi__accumulation_method @@ -216,6 +283,9 @@ msgid "" "Actual (alternative) models used in columns must have the same account model " "in the Account field and must be the same defined in the report template: %s" msgstr "" +"Modelli correnti (alternativi) utilizzati nelle colonne devono avere lo " +"stesso modello conto nel campo Conto e deve essere lo stesso definito nel " +"modello resoconto: %s" #. module: mis_builder #: model:ir.model.fields.selection,name:mis_builder.selection__mis_report_instance_period__source__actuals @@ -236,6 +306,11 @@ msgid "" "Sum columns: summation (+/-) of other columns.\n" "Compare to column: compare to other column.\n" msgstr "" +"Correnti: dati correnti, dalla contabilità e altre estrazioni.\n" +"Correnti (alternativo): dati correnti da origini alternative (es. una vista " +"database che fornisce simile a righe movimento conto).\n" +"Somma colonne: comma (+/-) delle colonne.\n" +"Confronto con colonna: confronta con un altra colonna.\n" #. module: mis_builder #: model:ir.model,name:mis_builder.model_prorata_read_group_mixin diff --git a/mis_builder_demo/i18n/it.po b/mis_builder_demo/i18n/it.po index 6453f5b52a..ae01507f45 100644 --- a/mis_builder_demo/i18n/it.po +++ b/mis_builder_demo/i18n/it.po @@ -6,130 +6,132 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-02-19 10:34+0000\n" +"Last-Translator: mymage \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: mis_builder_demo #: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_expenses_bud msgid "3 M Budget" -msgstr "" +msgstr "Budget 3 M" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__account_id msgid "Account" -msgstr "" +msgstr "Conto" #. module: mis_builder_demo #: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_expenses_avail msgid "Available" -msgstr "" +msgstr "Disponibile" #. module: mis_builder_demo #: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_expenses_commit msgid "Committed" -msgstr "" +msgstr "Impegnata" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__company_id msgid "Company" -msgstr "" +msgstr "Azienda" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__credit msgid "Credit" -msgstr "" +msgstr "Credito" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__date msgid "Date" -msgstr "" +msgstr "Data" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__debit msgid "Debit" -msgstr "" +msgstr "Debito" #. module: mis_builder_demo #: model:mis.report,name:mis_builder_demo.mis_report_expenses msgid "Demo Expenses" -msgstr "" +msgstr "Demo spese" #. module: mis_builder_demo #: model:mis.report.instance,name:mis_builder_demo.mis_report_instance_expenses msgid "Demo Expenses vs Budget" -msgstr "" +msgstr "Demo spese vs budget" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: mis_builder_demo #: model:mis.report.kpi,description:mis_builder_demo.mis_report_expenses_kpi_equip msgid "Equipment" -msgstr "" +msgstr "Attrezzatura" #. module: mis_builder_demo #: model:mis.report.kpi,description:mis_builder_demo.mis_report_expenses_kpi_exp msgid "Expenses" -msgstr "" +msgstr "Spese" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__id msgid "ID" -msgstr "" +msgstr "ID" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase____last_update msgid "Last Modified on" -msgstr "" +msgstr "Ultima modifica il" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__line_type msgid "Line Type" -msgstr "" +msgstr "Tipo riga" #. module: mis_builder_demo #: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_expenses_act_mm1 msgid "M-1" -msgstr "" +msgstr "M-1" #. module: mis_builder_demo #: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_expenses_act_mm2 msgid "M-2" -msgstr "" +msgstr "M-2" #. module: mis_builder_demo #: model:ir.model,name:mis_builder_demo.model_mis_committed_purchase msgid "MIS Commitment" -msgstr "" +msgstr "Impegno MIS" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__name msgid "Name" -msgstr "" +msgstr "Nome" #. module: mis_builder_demo #: model:mis.report.kpi,description:mis_builder_demo.mis_report_expenses_kpi_other msgid "Other" -msgstr "" +msgstr "Altro" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__res_id msgid "Resource ID" -msgstr "" +msgstr "ID risorsa" #. module: mis_builder_demo #: model:ir.model.fields,field_description:mis_builder_demo.field_mis_committed_purchase__res_model msgid "Resource Model Name" -msgstr "" +msgstr "Nome modello risorsa" #. module: mis_builder_demo #: model:mis.report.kpi,description:mis_builder_demo.mis_report_expenses_kpi_total msgid "Total" -msgstr "" +msgstr "Totale" diff --git a/mrp_bom_structure_xlsx/README.rst b/mrp_bom_structure_xlsx/README.rst index 8d913c1806..6fb0252a6c 100644 --- a/mrp_bom_structure_xlsx/README.rst +++ b/mrp_bom_structure_xlsx/README.rst @@ -7,7 +7,7 @@ MRP BOM Structure XLSX !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b6902f7cd8792b0d8dd1df102dc90ba645e7f3aba8a7cff349027c21abd9b210 + !! source digest: sha256:bf58c3781d64be83a436075f07e31d9137f4162c5ff19dfd6f240699ab44ea08 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -80,6 +80,10 @@ Contributors * Aaron Henriquez * Bhavesh Odedra +* `Tecnativa `_: + + * Víctor Martínez + Maintainers ~~~~~~~~~~~ diff --git a/mrp_bom_structure_xlsx/__manifest__.py b/mrp_bom_structure_xlsx/__manifest__.py index 7b26b08d42..38b719f3e0 100644 --- a/mrp_bom_structure_xlsx/__manifest__.py +++ b/mrp_bom_structure_xlsx/__manifest__.py @@ -3,7 +3,7 @@ { "name": "MRP BOM Structure XLSX", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "category": "Manufacturing", "summary": "Export BoM Structure to Excel .XLSX", "author": "ForgeFlow, Odoo Community Association (OCA)", diff --git a/mrp_bom_structure_xlsx/readme/CONTRIBUTORS.rst b/mrp_bom_structure_xlsx/readme/CONTRIBUTORS.rst index 9e0054b5d0..57668a5db3 100644 --- a/mrp_bom_structure_xlsx/readme/CONTRIBUTORS.rst +++ b/mrp_bom_structure_xlsx/readme/CONTRIBUTORS.rst @@ -3,3 +3,7 @@ * Lois Rilo Antelo * Aaron Henriquez * Bhavesh Odedra + +* `Tecnativa `_: + + * Víctor Martínez diff --git a/mrp_bom_structure_xlsx/static/description/index.html b/mrp_bom_structure_xlsx/static/description/index.html index 9b4b277b44..3b2523496d 100644 --- a/mrp_bom_structure_xlsx/static/description/index.html +++ b/mrp_bom_structure_xlsx/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

    MRP BOM Structure XLSX

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:b6902f7cd8792b0d8dd1df102dc90ba645e7f3aba8a7cff349027c21abd9b210 +!! source digest: sha256:bf58c3781d64be83a436075f07e31d9137f4162c5ff19dfd6f240699ab44ea08 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/manufacture-reporting Translate me on Weblate Try me on Runboat

    This module extends the functionality of the MRP capabilities of Odoo, @@ -425,6 +424,10 @@

    Contributors

  • Lois Rilo Antelo <lois.rilo@forgeflow.com>
  • Aaron Henriquez <ahenriquez@forgeflow.com>
  • Bhavesh Odedra <bodedra@opensourceintegrators.com>
  • +
  • Tecnativa:
      +
    • Víctor Martínez
    • +
    +
  • diff --git a/mrp_bom_structure_xlsx/tests/__init__.py b/mrp_bom_structure_xlsx/tests/__init__.py new file mode 100644 index 0000000000..269c36f89e --- /dev/null +++ b/mrp_bom_structure_xlsx/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import test_mrp_bom_structure_xlsx diff --git a/mrp_bom_structure_xlsx/tests/common.py b/mrp_bom_structure_xlsx/tests/common.py new file mode 100644 index 0000000000..65f4319659 --- /dev/null +++ b/mrp_bom_structure_xlsx/tests/common.py @@ -0,0 +1,50 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tests import Form + +from odoo.addons.base.tests.common import BaseCommon + + +class TestMrpBomStructureXlsxBase(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product = cls.env["product.product"].create( + {"name": "Test product", "default_code": "product"} + ) + cls.component_a = cls.env["product.product"].create( + { + "name": "Test componente A", + "default_code": "COMPONENT-A", + } + ) + cls.component_b = cls.env["product.product"].create( + { + "name": "Test componente B", + "default_code": "COMPONENT-B", + } + ) + cls.report_model = cls.env["ir.actions.report"] + # Bom from product + bom_form = Form(cls.env["mrp.bom"]) + bom_form.product_tmpl_id = cls.product.product_tmpl_id + with bom_form.bom_line_ids.new() as line_form: + line_form.product_id = cls.component_a + line_form.product_qty = 1 + with bom_form.bom_line_ids.new() as line_form: + line_form.product_id = cls.component_b + line_form.product_qty = 1 + cls.bom = bom_form.save() + # Bom from component A + cls.child_component = cls.env["product.product"].create( + { + "name": "Test child component", + "default_code": "CHILD-COMPONENT", + } + ) + bom_form = Form(cls.env["mrp.bom"]) + bom_form.product_tmpl_id = cls.component_a.product_tmpl_id + with bom_form.bom_line_ids.new() as line_form: + line_form.product_id = cls.child_component + line_form.product_qty = 1 + bom_form.save() diff --git a/mrp_bom_structure_xlsx/tests/test_mrp_bom_structure_xlsx.py b/mrp_bom_structure_xlsx/tests/test_mrp_bom_structure_xlsx.py new file mode 100644 index 0000000000..df8b52b564 --- /dev/null +++ b/mrp_bom_structure_xlsx/tests/test_mrp_bom_structure_xlsx.py @@ -0,0 +1,23 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +# from odoo.exceptions import ValidationError +# from odoo.tests import Form + +from xlrd import open_workbook + +from .common import TestMrpBomStructureXlsxBase + + +class TestMrpBomStructureXlsx(TestMrpBomStructureXlsxBase): + def test_bom_structure_xlsx_report(self): + res = self.report_model._render( + "mrp_bom_structure_xlsx.bom_structure_xlsx", self.bom.ids, False + ) + wb = open_workbook(file_contents=res[0]) + sheet = wb.sheet_by_index(0) + references = [] + for rownum in range(3, sheet.nrows): + references.append(sheet.row_values(rownum)[2]) + self.assertIn("COMPONENT-A", references) + self.assertIn("COMPONENT-B", references) + self.assertIn("CHILD-COMPONENT", references) diff --git a/mrp_bom_structure_xlsx_level_1/README.rst b/mrp_bom_structure_xlsx_level_1/README.rst new file mode 100644 index 0000000000..3a227cc455 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/README.rst @@ -0,0 +1,91 @@ +============================== +MRP BOM Structure XLSX Level 1 +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f00f052dac3bc38a1255b949018c78fd5035b447c35dac47bc11fd072dd88c67 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fmanufacture--reporting-lightgray.png?logo=github + :target: https://github.com/OCA/manufacture-reporting/tree/16.0/mrp_bom_structure_xlsx_level_1 + :alt: OCA/manufacture-reporting +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-reporting-16-0/manufacture-reporting-16-0-mrp_bom_structure_xlsx_level_1 + :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/manufacture-reporting&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of the MRP capabilities of Odoo, +and allows you to export to level 1 of the BoM structure to MS Excel .XLSX format. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +#. Go to 'Manufacturing / Products / Bill of Materials' +#. Select a BoM or more BoMs +#. Go to 'Print / Export BoM Structure (Level 1) to Excel'. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Jordi Ballester +* Miquel Raïch + +* `Tecnativa `_: + + * Víctor Martínez + +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/manufacture-reporting `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mrp_bom_structure_xlsx_level_1/__init__.py b/mrp_bom_structure_xlsx_level_1/__init__.py new file mode 100644 index 0000000000..d40278cfda --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from . import report diff --git a/mrp_bom_structure_xlsx_level_1/__manifest__.py b/mrp_bom_structure_xlsx_level_1/__manifest__.py new file mode 100644 index 0000000000..a17fd110d3 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/__manifest__.py @@ -0,0 +1,15 @@ +# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + "name": "MRP BOM Structure XLSX Level 1", + "version": "16.0.1.0.0", + "category": "Manufacturing", + "summary": "Export BOM Structure (Level 1) to Excel .XLSX", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/manufacture-reporting", + "license": "AGPL-3", + "depends": ["mrp_bom_structure_xlsx"], + "data": ["report/bom_structure_xlsx.xml"], + "installable": True, +} diff --git a/mrp_bom_structure_xlsx_level_1/i18n/de.po b/mrp_bom_structure_xlsx_level_1/i18n/de.po new file mode 100644 index 0000000000..a8b5faccf0 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/i18n/de.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_bom_structure_xlsx_level_1 +# +# Translators: +# Rudolf Schnapka , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-28 05:21+0000\n" +"PO-Revision-Date: 2017-03-28 05:21+0000\n" +"Last-Translator: Rudolf Schnapka , 2017\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\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" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.model,name:mrp_bom_structure_xlsx_level_1.model_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1 +#, fuzzy +msgid "BOM Structure XLSX Level 1 Report" +msgstr "Exportiere SL-Hierarchie (Stufe 1) nach Excel" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.model.fields,field_description:mrp_bom_structure_xlsx_level_1.field_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1__display_name +msgid "Display Name" +msgstr "" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.actions.report,name:mrp_bom_structure_xlsx_level_1.bom_structure_xlsx_l1 +#, fuzzy +msgid "Export BoM Structure (Level 1) to Excel" +msgstr "Exportiere SL-Hierarchie (Stufe 1) nach Excel" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.model.fields,field_description:mrp_bom_structure_xlsx_level_1.field_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1__id +msgid "ID" +msgstr "" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.model.fields,field_description:mrp_bom_structure_xlsx_level_1.field_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1____last_update +msgid "Last Modified on" +msgstr "" diff --git a/mrp_bom_structure_xlsx_level_1/i18n/it.po b/mrp_bom_structure_xlsx_level_1/i18n/it.po new file mode 100644 index 0000000000..19b6b1cfdc --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/i18n/it.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_bom_structure_xlsx_level_1 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-05-17 12:34+0000\n" +"Last-Translator: mymage \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.14.1\n" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.model,name:mrp_bom_structure_xlsx_level_1.model_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1 +msgid "BOM Structure XLSX Level 1 Report" +msgstr "Resoconto XLSX struttura DiBa" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.model.fields,field_description:mrp_bom_structure_xlsx_level_1.field_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.actions.report,name:mrp_bom_structure_xlsx_level_1.bom_structure_xlsx_l1 +msgid "Export BoM Structure (Level 1) to Excel" +msgstr "Esporta struttura DiBa (livello 1) in Excel" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.model.fields,field_description:mrp_bom_structure_xlsx_level_1.field_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1__id +msgid "ID" +msgstr "ID" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.model.fields,field_description:mrp_bom_structure_xlsx_level_1.field_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" diff --git a/mrp_bom_structure_xlsx_level_1/i18n/mrp_bom_structure_xlsx_level_1.pot b/mrp_bom_structure_xlsx_level_1/i18n/mrp_bom_structure_xlsx_level_1.pot new file mode 100644 index 0000000000..b1f298cc0a --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/i18n/mrp_bom_structure_xlsx_level_1.pot @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_bom_structure_xlsx_level_1 +# +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: mrp_bom_structure_xlsx_level_1 +#: model:ir.model,name:mrp_bom_structure_xlsx_level_1.model_report_mrp_bom_structure_xlsx_l1_bom_structure_xlsx_l1 +msgid "BOM Structure XLSX Level 1 Report" +msgstr "" + +#. module: mrp_bom_structure_xlsx_level_1 +#: model:ir.actions.report,name:mrp_bom_structure_xlsx_level_1.bom_structure_xlsx_l1 +msgid "Export BoM Structure (Level 1) to Excel" +msgstr "" diff --git a/mrp_bom_structure_xlsx_level_1/readme/CONTRIBUTORS.rst b/mrp_bom_structure_xlsx_level_1/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..8aba403853 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* Jordi Ballester +* Miquel Raïch + +* `Tecnativa `_: + + * Víctor Martínez diff --git a/mrp_bom_structure_xlsx_level_1/readme/DESCRIPTION.rst b/mrp_bom_structure_xlsx_level_1/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..f85cbde8d3 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of the MRP capabilities of Odoo, +and allows you to export to level 1 of the BoM structure to MS Excel .XLSX format. diff --git a/mrp_bom_structure_xlsx_level_1/readme/USAGE.rst b/mrp_bom_structure_xlsx_level_1/readme/USAGE.rst new file mode 100644 index 0000000000..03d95830c8 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/readme/USAGE.rst @@ -0,0 +1,5 @@ +To use this module, you need to: + +#. Go to 'Manufacturing / Products / Bill of Materials' +#. Select a BoM or more BoMs +#. Go to 'Print / Export BoM Structure (Level 1) to Excel'. diff --git a/mrp_bom_structure_xlsx_level_1/report/__init__.py b/mrp_bom_structure_xlsx_level_1/report/__init__.py new file mode 100644 index 0000000000..e5e64632bc --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/report/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from . import bom_structure_xlsx diff --git a/mrp_bom_structure_xlsx_level_1/report/bom_structure_xlsx.py b/mrp_bom_structure_xlsx_level_1/report/bom_structure_xlsx.py new file mode 100644 index 0000000000..08504b5c77 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/report/bom_structure_xlsx.py @@ -0,0 +1,31 @@ +# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import models + +_logger = logging.getLogger(__name__) + + +class BomStructureXlsxL1(models.AbstractModel): + _name = "report.mrp_bom_structure_xlsx_l1.bom_structure_xlsx_l1" + _description = "BOM Structure XLSX Level 1 Report" + _inherit = "report.mrp_bom_structure_xlsx.bom_structure_xlsx" + + def print_bom_children(self, ch, sheet, row, level): + i, j = row, level + j += 1 + sheet.write(i, 1, "> " * j) + sheet.write(i, 2, ch.product_id.default_code or "") + sheet.write(i, 3, ch.product_id.display_name or "") + sheet.write( + i, + 4, + ch.product_uom_id._compute_quantity(ch.product_qty, ch.product_id.uom_id) + or "", + ) + sheet.write(i, 5, ch.product_id.uom_id.name or "") + sheet.write(i, 6, ch.bom_id.code or "") + i += 1 + return i diff --git a/mrp_bom_structure_xlsx_level_1/report/bom_structure_xlsx.xml b/mrp_bom_structure_xlsx_level_1/report/bom_structure_xlsx.xml new file mode 100644 index 0000000000..8d9b5acfa1 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/report/bom_structure_xlsx.xml @@ -0,0 +1,18 @@ + + + + + Export BoM Structure (Level 1) to Excel + mrp.bom + ir.actions.report + + mrp_bom_structure_xlsx_l1.bom_structure_xlsx_l1 + xlsx + mrp_bom_structure_xlsx_l1.bom_structure_xlsx_l1 + + diff --git a/mrp_bom_structure_xlsx_level_1/static/description/icon.png b/mrp_bom_structure_xlsx_level_1/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/mrp_bom_structure_xlsx_level_1/static/description/index.html b/mrp_bom_structure_xlsx_level_1/static/description/index.html new file mode 100644 index 0000000000..a7f8d95745 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/static/description/index.html @@ -0,0 +1,82 @@ +
    +
    +
    +

    Export BOM Structure (Level 1) to Excel

    +

    + This module extends the functionality of the MRP capabilities of Odoo, + and allows you to export to level 1 of the BOM structure to MS Excel .XLSX format. +

    +
    +
    +
    + +
    +
    +
    +

    Installation

    +
    +
    +

    No additional installation instructions are required.

    +
    +
    +
    + +
    +
    +
    +

    Configuration

    +
    +
    +

    This module does not require any additional configuration.

    +
    +
    +
    + +
    +
    +
    +

    Usage

    +
    +
    +

    + In the Bill of Materials form or list views, press 'Print > Export BOM + Structure to Excel (Level 1)'. +

    +
    +
    +
    + +
    +
    +
    +

    Known issues / Roadmap

    +
    +
    +

    No issues have been identified.

    +
    +
    +
    + +
    +
    +
    +

    Credits

    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainer

    +

    + This module is maintained by the OCA.
    + 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.
    + To contribute to this module, please visit http://odoo-community.org.
    + +

    +
    +
    +
    diff --git a/mrp_bom_structure_xlsx_level_1/tests/__init__.py b/mrp_bom_structure_xlsx_level_1/tests/__init__.py new file mode 100644 index 0000000000..7ceb1d70b7 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import test_mrp_bom_structure_xlsx_level_1 diff --git a/mrp_bom_structure_xlsx_level_1/tests/test_mrp_bom_structure_xlsx_level_1.py b/mrp_bom_structure_xlsx_level_1/tests/test_mrp_bom_structure_xlsx_level_1.py new file mode 100644 index 0000000000..599ee1e1a0 --- /dev/null +++ b/mrp_bom_structure_xlsx_level_1/tests/test_mrp_bom_structure_xlsx_level_1.py @@ -0,0 +1,21 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from xlrd import open_workbook + +from odoo.addons.mrp_bom_structure_xlsx.tests.common import TestMrpBomStructureXlsxBase + + +class TestMrpBomStructureXlsxLevel1(TestMrpBomStructureXlsxBase): + def test_bom_structure_xlsx_report(self): + res = self.report_model._render( + "mrp_bom_structure_xlsx_l1.bom_structure_xlsx_l1", self.bom.ids, False + ) + wb = open_workbook(file_contents=res[0]) + sheet = wb.sheet_by_index(0) + references = [] + for rownum in range(3, sheet.nrows): + references.append(sheet.row_values(rownum)[2]) + self.assertIn("COMPONENT-A", references) + self.assertIn("COMPONENT-B", references) + self.assertNotIn("CHILD-COMPONENT", references) diff --git a/mrp_multi_level/README.rst b/mrp_multi_level/README.rst index 1ce9337f92..00ebc7c8ed 100644 --- a/mrp_multi_level/README.rst +++ b/mrp_multi_level/README.rst @@ -7,7 +7,7 @@ MRP Multi Level !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c7bc8b7216557176ac413c5397bd8b81110403395144f58d4991cf662cec02af + !! source digest: sha256:fca6d950241a9b0c6ab31917b79e645627894c15da0bf4e08aeb2d80ef9ec2a5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/mrp_multi_level/__manifest__.py b/mrp_multi_level/__manifest__.py index 11a559a23b..e367855bdc 100644 --- a/mrp_multi_level/__manifest__.py +++ b/mrp_multi_level/__manifest__.py @@ -4,7 +4,7 @@ { "name": "MRP Multi Level", - "version": "16.0.1.3.4", + "version": "16.0.1.3.5", "development_status": "Production/Stable", "license": "LGPL-3", "author": "Ucamco, ForgeFlow, Odoo Community Association (OCA)", diff --git a/mrp_multi_level/i18n/mrp_multi_level.pot b/mrp_multi_level/i18n/mrp_multi_level.pot index 6c556d3132..3b30c3f151 100644 --- a/mrp_multi_level/i18n/mrp_multi_level.pot +++ b/mrp_multi_level/i18n/mrp_multi_level.pot @@ -866,7 +866,6 @@ msgstr "" #: code:addons/mrp_multi_level/wizards/mrp_multi_level.py:0 #: code:addons/mrp_multi_level/wizards/mrp_multi_level.py:0 #: code:addons/mrp_multi_level/wizards/mrp_multi_level.py:0 -#: code:addons/mrp_multi_level/wizards/mrp_multi_level.py:0 #: model:ir.model.fields,field_description:mrp_multi_level.field_product_mrp_area__mrp_minimum_stock #, python-format msgid "Safety Stock" diff --git a/mrp_multi_level/static/description/index.html b/mrp_multi_level/static/description/index.html index d76417d230..af08f60bd4 100644 --- a/mrp_multi_level/static/description/index.html +++ b/mrp_multi_level/static/description/index.html @@ -366,7 +366,7 @@

    MRP Multi Level

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:c7bc8b7216557176ac413c5397bd8b81110403395144f58d4991cf662cec02af +!! source digest: sha256:fca6d950241a9b0c6ab31917b79e645627894c15da0bf4e08aeb2d80ef9ec2a5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Production/Stable License: LGPL-3 OCA/manufacture Translate me on Weblate Try me on Runboat

    This module allows you to calculate, based in known inventory, demand, and diff --git a/mrp_multi_level/tests/test_mrp_multi_level.py b/mrp_multi_level/tests/test_mrp_multi_level.py index c555074100..0df22de065 100644 --- a/mrp_multi_level/tests/test_mrp_multi_level.py +++ b/mrp_multi_level/tests/test_mrp_multi_level.py @@ -767,3 +767,88 @@ def test_22_prioritize_safety_stock_grouped_3(self): f"unexpected value for {key}: {inv[key]} " f"(expected {test_vals[key]} on {inv.date})", ) + + def test_23_prioritize_safety_stock_with_mrp_moves_today(self): + """Test MRP but with moves today. Safety stock should not be ordered.""" + now = datetime.now() + product = self.prod_test # has Buy route + product.seller_ids[0].delay = 2 # set a purchase lead time + self.quant_obj._update_available_quantity(product, self.cases_loc, 5) + self.product_mrp_area_obj.create( + { + "product_id": product.id, + "mrp_area_id": self.cases_area.id, + "mrp_minimum_stock": 15, + } + ) + self._create_picking_out(product, 10.0, now, location=self.cases_loc) + self._create_picking_in(product, 20.0, now, location=self.cases_loc) + self.mrp_multi_level_wiz.create( + {"mrp_area_ids": [(6, 0, self.cases_area.ids)]} + ).run_mrp_multi_level() + inventory = self.mrp_inventory_obj.search( + [("mrp_area_id", "=", self.cases_area.id), ("product_id", "=", product.id)] + ) + expected = [ + { + "date": now.date(), + "demand_qty": 10.0, + "final_on_hand_qty": 15.0, + "initial_on_hand_qty": 5.0, + "running_availability": 15.0, + "supply_qty": 20.0, + "to_procure": 0.0, + }, + ] + self.assertEqual(len(expected), len(inventory)) + for test_vals, inv in zip(expected, inventory): + for key in test_vals: + self.assertEqual( + test_vals[key], + inv[key], + f"unexpected value for {key}: {inv[key]} " + f"(expected {test_vals[key]} on {inv.date})", + ) + + def test_24_prioritize_safety_stock_with_mrp_moves_today_grouped(self): + """Test grouped demand MRP but with moves today. Safety stock should not be ordered.""" + now = datetime.now() + product = self.prod_test # has Buy route + product.seller_ids[0].delay = 2 # set a purchase lead time + self.quant_obj._update_available_quantity(product, self.cases_loc, 5) + self.product_mrp_area_obj.create( + { + "product_id": product.id, + "mrp_area_id": self.cases_area.id, + "mrp_minimum_stock": 15, + "mrp_nbr_days": 2, + } + ) + self._create_picking_out(product, 10.0, now, location=self.cases_loc) + self._create_picking_in(product, 20.0, now, location=self.cases_loc) + self.mrp_multi_level_wiz.create( + {"mrp_area_ids": [(6, 0, self.cases_area.ids)]} + ).run_mrp_multi_level() + inventory = self.mrp_inventory_obj.search( + [("mrp_area_id", "=", self.cases_area.id), ("product_id", "=", product.id)] + ) + expected = [ + { + "date": now.date(), + "demand_qty": 10.0, + "final_on_hand_qty": 15.0, + "initial_on_hand_qty": 5.0, + "running_availability": 15.0, + "supply_qty": 20.0, + "to_procure": 0.0, + }, + ] + self.assertEqual(len(expected), len(inventory)) + for test_vals, inv in zip(expected, inventory): + for key in test_vals: + self.assertEqual( + test_vals[key], + inv[key], + f"unexpected value for {key}: {inv[key]} " + f"(expected {test_vals[key]} on {inv.date})", + ) diff --git a/mrp_multi_level/wizards/mrp_multi_level.py b/mrp_multi_level/wizards/mrp_multi_level.py index 5de038ea88..674ef5c2aa 100644 --- a/mrp_multi_level/wizards/mrp_multi_level.py +++ b/mrp_multi_level/wizards/mrp_multi_level.py @@ -532,7 +532,7 @@ def _get_qty_to_order(self, product_mrp_area, date, move_qty, onhand): return product_mrp_area.mrp_minimum_stock - onhand - move_qty @api.model - def _init_mrp_move_grouped_demand(self, nbr_create, product_mrp_area): + def _init_mrp_move_grouped_demand(self, product_mrp_area): last_date = None last_qty = 0.00 onhand = product_mrp_area.qty_available @@ -566,7 +566,6 @@ def _init_mrp_move_grouped_demand(self, nbr_create, product_mrp_area): onhand = onhand + qty_ordered last_date = None last_qty = 0.00 - nbr_create += 1 demand_origin = [] for move in product_mrp_area.mrp_move_ids: @@ -605,7 +604,6 @@ def _init_mrp_move_grouped_demand(self, nbr_create, product_mrp_area): onhand = onhand + last_qty + qty_ordered last_date = None last_qty = 0.00 - nbr_create += 1 demand_origin = [] if ( onhand + last_qty + move.mrp_qty @@ -644,7 +642,6 @@ def _init_mrp_move_grouped_demand(self, nbr_create, product_mrp_area): qty_ordered = cm.get("qty_ordered", 0.0) onhand += qty_ordered last_qty -= qty_ordered - nbr_create += 1 if (onhand + last_qty) < product_mrp_area.mrp_minimum_stock: mrp_date = self._get_safety_stock_target_date(product_mrp_area) @@ -659,9 +656,6 @@ def _init_mrp_move_grouped_demand(self, nbr_create, product_mrp_area): ) qty_ordered = cm["qty_ordered"] onhand += qty_ordered - nbr_create += 1 - - return nbr_create def _get_safety_stock_target_date(self, product_mrp_area): """Get the date at which the safety stock rebuild should be targeted @@ -670,12 +664,14 @@ def _get_safety_stock_target_date(self, product_mrp_area): return date.today() @api.model - def _init_mrp_move_non_grouped_demand(self, nbr_create, product_mrp_area): + def _init_mrp_move_non_grouped_demand(self, product_mrp_area): onhand = product_mrp_area.qty_available for move in product_mrp_area.mrp_move_ids: if self._exclude_move(move): continue - if onhand < product_mrp_area.mrp_minimum_stock: + # This works because mrp moves are ordered by: + # product_mrp_area_id, mrp_date, mrp_type desc, id + if onhand + move.mrp_qty < product_mrp_area.mrp_minimum_stock: qtytoorder = self._get_qty_to_order( product_mrp_area, self._get_safety_stock_target_date(product_mrp_area), @@ -692,7 +688,6 @@ def _init_mrp_move_non_grouped_demand(self, nbr_create, product_mrp_area): ) qty_ordered = cm["qty_ordered"] onhand += qty_ordered - nbr_create += 1 qtytoorder = self._get_qty_to_order( product_mrp_area, move.mrp_date, move.mrp_qty, onhand @@ -707,7 +702,6 @@ def _init_mrp_move_non_grouped_demand(self, nbr_create, product_mrp_area): ) qty_ordered = cm["qty_ordered"] onhand += move.mrp_qty + qty_ordered - nbr_create += 1 else: onhand += move.mrp_qty if onhand < product_mrp_area.mrp_minimum_stock: @@ -723,9 +717,6 @@ def _init_mrp_move_non_grouped_demand(self, nbr_create, product_mrp_area): ) qty_ordered = cm["qty_ordered"] onhand += qty_ordered - nbr_create += 1 - - return nbr_create @api.model def _exclude_move(self, move): @@ -748,33 +739,10 @@ def _mrp_calculation(self, mrp_lowest_llc, mrp_areas): llc += 1 for product_mrp_area in product_mrp_areas: - nbr_create = 0 - onhand = product_mrp_area.qty_available - if product_mrp_area.mrp_nbr_days == 0: - nbr_create = self._init_mrp_move_non_grouped_demand( - nbr_create, product_mrp_area - ) + self._init_mrp_move_non_grouped_demand(product_mrp_area) else: - nbr_create = self._init_mrp_move_grouped_demand( - nbr_create, product_mrp_area - ) - - if onhand < product_mrp_area.mrp_minimum_stock and nbr_create == 0: - mrp_date = date.today() - qtytoorder = self._get_qty_to_order( - product_mrp_area, mrp_date, 0, onhand - ) - name = _("Safety Stock") - cm = self.create_action( - product_mrp_area_id=product_mrp_area, - mrp_date=mrp_date, - mrp_qty=qtytoorder, - name=name, - values=dict(origin=name), - ) - qty_ordered = cm["qty_ordered"] - onhand += qty_ordered + self._init_mrp_move_grouped_demand(product_mrp_area) counter += 1 log_msg = "MRP Calculation LLC {} Finished - Nbr. products: {}".format( diff --git a/partner_risk_insurance/README.rst b/partner_risk_insurance/README.rst index 700a9ae8c1..fbf75ed56e 100644 --- a/partner_risk_insurance/README.rst +++ b/partner_risk_insurance/README.rst @@ -7,7 +7,7 @@ Partner Risk Insurance !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5c853ca509e955a65cf86ffa5396db415e24e8326eb665716b1d14612995df7b + !! source digest: sha256:92230fb70ed60ab89660ea07a395fb28d1e9446251e1e25385e124e1661eebc5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png @@ -42,8 +42,14 @@ Usage To use this module you need to: #. Go to *Sales > Customer > Create*. -#. Go to *Credit Insurance* tab. -#. Set insurance risk options. +#. Go to *Credit Insurance* tab if you are at least an Account User. +#. Set insurance risk options creating at least a Credit Policy (with Insure + invoices set) and Credit Company and set them in the customer. +#. Create an Inovoice with the customer that has the insurance risk options set. +#. Credit Policy will be set in the invoice. +#. You can activate or deactivate the Credit Policy if the customer + is allowed to have a credit policy. +#. You can filter Out Invoices by Credit Policy in the list view. Bug Tracker =========== @@ -65,6 +71,7 @@ Authors * Tecnativa * Factor Libre S.L * NaN·tic +* Moduon Contributors ~~~~~~~~~~~~ @@ -82,6 +89,8 @@ Contributors * Fernando La Chica +* Eduardo de Miguel (`Moduon `__) + Maintainers ~~~~~~~~~~~ @@ -107,10 +116,13 @@ promote its widespread use. .. |maintainer-Tardo| image:: https://github.com/Tardo.png?size=40px :target: https://github.com/Tardo :alt: Tardo +.. |maintainer-Shide| image:: https://github.com/Shide.png?size=40px + :target: https://github.com/Shide + :alt: Shide Current `maintainers `__: -|maintainer-Daniel-CA| |maintainer-sergio-teruel| |maintainer-omar7r| |maintainer-Tardo| +|maintainer-Daniel-CA| |maintainer-sergio-teruel| |maintainer-omar7r| |maintainer-Tardo| |maintainer-Shide| This module is part of the `OCA/credit-control `_ project on GitHub. diff --git a/partner_risk_insurance/__init__.py b/partner_risk_insurance/__init__.py index 127685b7dd..ad56d2bfe5 100644 --- a/partner_risk_insurance/__init__.py +++ b/partner_risk_insurance/__init__.py @@ -1,3 +1,4 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from .hooks import pre_init_hook from . import models from . import wizard diff --git a/partner_risk_insurance/__manifest__.py b/partner_risk_insurance/__manifest__.py index 81d9d16773..e7d16d41ec 100644 --- a/partner_risk_insurance/__manifest__.py +++ b/partner_risk_insurance/__manifest__.py @@ -1,13 +1,14 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Partner Risk Insurance", - "version": "16.0.1.0.0", + "version": "16.0.4.0.0", "development_status": "Production/Stable", "summary": "Risk insurance partner information", "author": "AvanzOSC," "Tecnativa," "Factor Libre S.L," "NaN·tic," + "Moduon," "Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, @@ -16,10 +17,13 @@ "category": "Credit Control", "data": [ "security/ir.model.access.csv", + "views/credit_policy_company_view.xml", "views/res_partner_view.xml", + "views/account_move_view.xml", "wizard/invoice_risk_insurance_wizard.xml", "templates/invoice_risk_insurance_template.xml", ], "installable": True, - "maintainers": ["Daniel-CA", "sergio-teruel", "omar7r", "Tardo"], + "maintainers": ["Daniel-CA", "sergio-teruel", "omar7r", "Tardo", "Shide"], + "pre_init_hook": "pre_init_hook", } diff --git a/partner_risk_insurance/hooks.py b/partner_risk_insurance/hooks.py new file mode 100644 index 0000000000..9ae1533af1 --- /dev/null +++ b/partner_risk_insurance/hooks.py @@ -0,0 +1,14 @@ +# Copyright 2024 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + + +def pre_init_hook(cr): + """Create account move columns to performance installation on large databases""" + cr.execute( + """ + ALTER TABLE account_move + ADD COLUMN IF NOT EXISTS insured_with_credit_policy boolean DEFAULT false, + ADD COLUMN IF NOT EXISTS credit_policy_company_id INT, + ADD COLUMN IF NOT EXISTS credit_policy_state_id INT; + """, + ) diff --git a/partner_risk_insurance/i18n/ca.po b/partner_risk_insurance/i18n/ca.po index 6193239da4..71d5a0af45 100644 --- a/partner_risk_insurance/i18n/ca.po +++ b/partner_risk_insurance/i18n/ca.po @@ -19,6 +19,57 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid " with " +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Date" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Invoice" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Name" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Ref." +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total Amount" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total amount:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total by country:" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__active +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__active +msgid "Active" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Cancel" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code @@ -26,6 +77,16 @@ msgstr "" msgid "Code assigned to this partner by the risk insurance company." msgstr "Crèdit concedit per la companyia asseguradora." +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__partner_id +msgid "Company" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_credit_policy_company +msgid "Company of Credit Policies" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__company_credit_limit @@ -38,12 +99,16 @@ msgid "Contact" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_uid msgid "Created by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_date msgid "Created on" msgstr "" @@ -59,6 +124,12 @@ msgstr "Assegurança de risc" msgid "Credit Limit" msgstr "Crèdit concedit per la companyia" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_company_id +msgid "Credit Policy Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__company_credit_limit @@ -71,6 +142,12 @@ msgstr "Crèdit concedit per la companyia" msgid "Credit limit granted by the insurance company." msgstr "Crèdit concedit per la companyia asseguradora." +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_limit +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_limit +msgid "Credit limit specific to this partner." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_grant_date @@ -78,15 +155,55 @@ msgid "Date when the insurance was granted by the insurance company." msgstr "Data en què es va concedir l'assegurança." #. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__display_name +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__display_name msgid "Display Name" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_from +msgid "From" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__id msgid "ID" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INVOICE LIST - COUNTRY - INSURED" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "" +"If checked, the invoices created when the partner has this state will be " +"marked as insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Indicates if the invoice is insured by a credit policy." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_code @@ -99,12 +216,26 @@ msgstr "Codi de l'assegurança" msgid "Insurance Code 2" msgstr "Codi de l'assegurança 2" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "Insurance Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_grant_date msgid "Insurance Grant Date" msgstr "Data de concessió de l'assegurança" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "Insurance Policy" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_requested #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_requested @@ -124,17 +255,55 @@ msgid "Insurance's Credit Limit" msgstr "Crèdit concedit per l'assegurança" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "Insure Invoices" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_account_invoice_filter +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid "Insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Insured by a Credit Policy" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.actions.act_window,name:partner_risk_insurance.invoice_risk_insurance_action +#: model:ir.actions.report,name:partner_risk_insurance.action_report_invoice_risk_insurance_template +#: model:ir.ui.menu,name:partner_risk_insurance.invoice_risk_insurance_menu +msgid "Invoice Risk Insurance Report" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state____last_update +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard____last_update msgid "Last Modified on" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_uid msgid "Last Updated by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_date msgid "Last Updated on" msgstr "" @@ -148,6 +317,7 @@ msgstr "" "empresa." #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__name msgid "Name" msgstr "" @@ -164,6 +334,11 @@ msgstr "Percentatge de cobertura del crèdit de l'assegurança." msgid "Policy State" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Print" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code_2 #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code_2 @@ -175,3 +350,58 @@ msgstr "Crèdit concedit per la companyia asseguradora." #: model:ir.model,name:partner_risk_insurance.model_credit_policy_state msgid "State of credit policies" msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "The insurance company that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "The insurance policy that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/models/account_move.py:0 +#, python-format +msgid "The partner %s has no credit policy to insure invoices." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.py:0 +#, python-format +msgid "" +"There aren't moves between this dates\n" +"Please, select different dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_to +msgid "To" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total not insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "UNINSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_partner_risk_insurance_wizard +msgid "Wizard to see invoices sorted by risk" +msgstr "" diff --git a/partner_risk_insurance/i18n/es.po b/partner_risk_insurance/i18n/es.po index bf76c5c53a..d0ad9dbff7 100644 --- a/partner_risk_insurance/i18n/es.po +++ b/partner_risk_insurance/i18n/es.po @@ -4,18 +4,23 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-24 13:16+0000\n" -"PO-Revision-Date: 2023-11-25 10:36+0000\n" -"Last-Translator: Ivorra78 \n" +"POT-Creation-Date: 2024-02-07 07:06+0000\n" +"PO-Revision-Date: 2024-02-07 08:07+0100\n" +"Last-Translator: \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 4.17\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.4.2\n" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid " with " +msgstr " con " #. module: partner_risk_insurance #: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document @@ -52,6 +57,12 @@ msgstr "Importe total:" msgid "Total by country:" msgstr "Total por país" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__active +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__active +msgid "Active" +msgstr "Activo" + #. module: partner_risk_insurance #: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form msgid "Cancel" @@ -63,6 +74,16 @@ msgstr "Cancelar" msgid "Code assigned to this partner by the risk insurance company." msgstr "Código asignado a este partner por la aseguradora." +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__partner_id +msgid "Company" +msgstr "Compañía" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_credit_policy_company +msgid "Company of Credit Policies" +msgstr "Compañías de las Políticas de crédito" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__company_credit_limit @@ -75,12 +96,14 @@ msgid "Contact" msgstr "Contacto" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_uid msgid "Created by" msgstr "Creado por" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_date msgid "Created on" @@ -97,6 +120,12 @@ msgstr "Seguro de riesgo" msgid "Credit Limit" msgstr "Crédito límite" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_company_id +msgid "Credit Policy Company" +msgstr "Compañías de la Política de crédito" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__company_credit_limit @@ -109,6 +138,12 @@ msgstr "Límite de crédito de la compañía." msgid "Credit limit granted by the insurance company." msgstr "Crédito concedido por el seguro." +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_limit +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_limit +msgid "Credit limit specific to this partner." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_grant_date @@ -121,6 +156,7 @@ msgid "Dates" msgstr "Fechas" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__display_name msgid "Display Name" @@ -132,10 +168,11 @@ msgid "From" msgstr "Desde" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__id msgid "ID" -msgstr "ID" +msgstr "" #. module: partner_risk_insurance #: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document @@ -147,6 +184,24 @@ msgstr "CLIENTES ASEGURADOS" msgid "INVOICE LIST - COUNTRY - INSURED" msgstr "LISTA DE FACTURAS - PAÍS - ASEGURADO" +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "" +"If checked, the invoices created when the partner has this state will be " +"marked as insured" +msgstr "" +"Si está marcado, las facturas creadas cuando el cliente tiene esta Política " +"de Crédito se marcarán como aseguradas" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Indicates if the invoice is insured by a credit policy." +msgstr "Indica si la factura está asegurada por una Política de crédito." + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_code @@ -159,12 +214,26 @@ msgstr "Código del seguro" msgid "Insurance Code 2" msgstr "Código del seguro 2" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "Insurance Company" +msgstr "Compañía aseguradora" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_grant_date msgid "Insurance Grant Date" msgstr "Fecha de concesión del seguro" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "Insurance Policy" +msgstr "Política del seguro" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_requested #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_requested @@ -183,6 +252,26 @@ msgstr "Cobertura de riesgo del seguro" msgid "Insurance's Credit Limit" msgstr "Límite de crédito del seguro" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "Insure Invoices" +msgstr "Asegurar facturas" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_account_invoice_filter +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid "Insured" +msgstr "Asegurada" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Insured by a Credit Policy" +msgstr "Asegurada por una Política de crédito" + #. module: partner_risk_insurance #: model:ir.actions.act_window,name:partner_risk_insurance.invoice_risk_insurance_action #: model:ir.actions.report,name:partner_risk_insurance.action_report_invoice_risk_insurance_template @@ -191,18 +280,26 @@ msgid "Invoice Risk Insurance Report" msgstr "Informe sobre el seguro de riesgo de facturas" #. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_account_move +msgid "Journal Entry" +msgstr "Asiento contable" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard____last_update msgid "Last Modified on" msgstr "Última modificación en" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_uid msgid "Last Updated by" msgstr "Última actualización por" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_date msgid "Last Updated on" @@ -218,6 +315,7 @@ msgstr "" "empresa." #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__name msgid "Name" msgstr "Nombre" @@ -251,6 +349,29 @@ msgid "State of credit policies" msgstr "Estado de las pólizas" #. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "The insurance company that insures the invoices of the partner." +msgstr "La compañía aseguradora que asegura las facturas de éste partner." + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "The insurance policy that insures the invoices of the partner." +msgstr "La política de crédito que asegura las facturas de éste partner." + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/models/account_move.py:0 +#, python-format +msgid "The partner %s has no credit policy to insure invoices." +msgstr "" +"El cliente %s no tiene una política de crédito que permita asegurar facturas." + +#. module: partner_risk_insurance +#. odoo-python #: code:addons/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.py:0 #, python-format msgid "" @@ -284,3 +405,9 @@ msgstr "CLIENTES NO ASEGURADOS" #: model:ir.model,name:partner_risk_insurance.model_partner_risk_insurance_wizard msgid "Wizard to see invoices sorted by risk" msgstr "Asistente para ver las facturas clasificadas por riesgo" + +#~ msgid "If check, includes only invoices in state not paid" +#~ msgstr "Si está marcado, incluye solo las facturas en estado no pagado" + +#~ msgid "Only Unpaid" +#~ msgstr "Solo impagadas" diff --git a/partner_risk_insurance/i18n/es_ES.po b/partner_risk_insurance/i18n/es_ES.po index eb0c5471e4..77d3bc9b74 100644 --- a/partner_risk_insurance/i18n/es_ES.po +++ b/partner_risk_insurance/i18n/es_ES.po @@ -16,12 +16,73 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid " with " +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Date" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Invoice" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Name" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Ref." +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total Amount" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total amount:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total by country:" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__active +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__active +msgid "Active" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Cancel" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code msgid "Code assigned to this partner by the risk insurance company." msgstr "Código asignado a este partner por la aseguradora" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__partner_id +msgid "Company" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_credit_policy_company +msgid "Company of Credit Policies" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__company_credit_limit @@ -34,12 +95,16 @@ msgid "Contact" msgstr "Contacto" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_uid msgid "Created by" msgstr "Creado por" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_date msgid "Created on" msgstr "Creado el" @@ -54,6 +119,12 @@ msgstr "Seguro de riesgo" msgid "Credit Limit" msgstr "Crédito límite" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_company_id +msgid "Credit Policy Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__company_credit_limit @@ -66,6 +137,12 @@ msgstr "Límite de crédito de la compañía" msgid "Credit limit granted by the insurance company." msgstr "Crédito concedido por el seguro" +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_limit +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_limit +msgid "Credit limit specific to this partner." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_grant_date @@ -73,15 +150,55 @@ msgid "Date when the insurance was granted by the insurance company." msgstr "Fecha en la que se concedió el seguro" #. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__display_name +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__display_name msgid "Display Name" msgstr "Nombre mostrado" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_from +msgid "From" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__id msgid "ID" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INVOICE LIST - COUNTRY - INSURED" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "" +"If checked, the invoices created when the partner has this state will be " +"marked as insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Indicates if the invoice is insured by a credit policy." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_code @@ -94,12 +211,26 @@ msgstr "Código del seguro" msgid "Insurance Code 2" msgstr "Código del seguro 2" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "Insurance Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_grant_date msgid "Insurance Grant Date" msgstr "Fecha de concesión del seguro" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "Insurance Policy" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_requested #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_requested @@ -119,17 +250,55 @@ msgid "Insurance's Credit Limit" msgstr "Límite de crédito del seguro" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "Insure Invoices" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_account_invoice_filter +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid "Insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Insured by a Credit Policy" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.actions.act_window,name:partner_risk_insurance.invoice_risk_insurance_action +#: model:ir.actions.report,name:partner_risk_insurance.action_report_invoice_risk_insurance_template +#: model:ir.ui.menu,name:partner_risk_insurance.invoice_risk_insurance_menu +msgid "Invoice Risk Insurance Report" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state____last_update +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard____last_update msgid "Last Modified on" msgstr "Última modificación en" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_uid msgid "Last Updated by" msgstr "Última actualización por" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_date msgid "Last Updated on" msgstr "Última actualización el" @@ -143,6 +312,7 @@ msgstr "" "empresa" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__name msgid "Name" msgstr "Nombre" @@ -159,6 +329,11 @@ msgstr "Porcentaje del crédito cubierto por el seguro" msgid "Policy State" msgstr "Estado de la póliza" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Print" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code_2 #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code_2 @@ -169,3 +344,58 @@ msgstr "Código secundario asignado a este partner por la compoañía de seguros #: model:ir.model,name:partner_risk_insurance.model_credit_policy_state msgid "State of credit policies" msgstr "Estado de las pólizas" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "The insurance company that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "The insurance policy that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/models/account_move.py:0 +#, python-format +msgid "The partner %s has no credit policy to insure invoices." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.py:0 +#, python-format +msgid "" +"There aren't moves between this dates\n" +"Please, select different dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_to +msgid "To" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total not insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "UNINSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_partner_risk_insurance_wizard +msgid "Wizard to see invoices sorted by risk" +msgstr "" diff --git a/partner_risk_insurance/i18n/it.po b/partner_risk_insurance/i18n/it.po index 4f29efa391..107d071696 100644 --- a/partner_risk_insurance/i18n/it.po +++ b/partner_risk_insurance/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-03-23 13:23+0000\n" +"PO-Revision-Date: 2024-02-20 15:37+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -14,7 +14,58 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 4.17\n" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid " with " +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Date" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Invoice" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Name" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Ref." +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total Amount" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total amount:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total by country:" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__active +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__active +msgid "Active" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Cancel" +msgstr "" #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code @@ -23,6 +74,16 @@ msgid "Code assigned to this partner by the risk insurance company." msgstr "" "Codice assegnato a questo cliente dall'azienda di copertura dei rischi." +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__partner_id +msgid "Company" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_credit_policy_company +msgid "Company of Credit Policies" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__company_credit_limit @@ -35,12 +96,16 @@ msgid "Contact" msgstr "Contatto" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_uid msgid "Created by" msgstr "Creato da" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_date msgid "Created on" msgstr "Creato il" @@ -53,7 +118,13 @@ msgstr "Assicurazione del Credito" #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_limit msgid "Credit Limit" -msgstr "Limite di Credito" +msgstr "Fido" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_company_id +msgid "Credit Policy Company" +msgstr "" #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__company_credit_limit @@ -67,6 +138,12 @@ msgstr "Limite di credito garantito dall'azienda." msgid "Credit limit granted by the insurance company." msgstr "Limite di credito garantito dall'azienda di assicurazione." +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_limit +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_limit +msgid "Credit limit specific to this partner." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_grant_date @@ -75,15 +152,55 @@ msgstr "" "Data in cui l'assicurazione è stata garantita dall'azienda di assicurazione." #. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__display_name +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__display_name msgid "Display Name" msgstr "Nome visualizzato" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_from +msgid "From" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__id msgid "ID" msgstr "ID" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INVOICE LIST - COUNTRY - INSURED" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "" +"If checked, the invoices created when the partner has this state will be " +"marked as insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Indicates if the invoice is insured by a credit policy." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_code @@ -96,12 +213,26 @@ msgstr "Codice Assicurativo" msgid "Insurance Code 2" msgstr "Codice Assicurativo 2" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "Insurance Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_grant_date msgid "Insurance Grant Date" msgstr "Data di concessione dell'assicurazione" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "Insurance Policy" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_requested #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_requested @@ -121,17 +252,55 @@ msgid "Insurance's Credit Limit" msgstr "Limite di Credito dell'Assicurazione" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "Insure Invoices" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_account_invoice_filter +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid "Insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Insured by a Credit Policy" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.actions.act_window,name:partner_risk_insurance.invoice_risk_insurance_action +#: model:ir.actions.report,name:partner_risk_insurance.action_report_invoice_risk_insurance_template +#: model:ir.ui.menu,name:partner_risk_insurance.invoice_risk_insurance_menu +msgid "Invoice Risk Insurance Report" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state____last_update +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard____last_update msgid "Last Modified on" msgstr "Ultima modifica il" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_uid msgid "Last Updated by" msgstr "Ultimo aggiornamento di" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_date msgid "Last Updated on" msgstr "Ultimo aggiornamento il" @@ -145,6 +314,7 @@ msgstr "" "questo cliente." #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__name msgid "Name" msgstr "Nome" @@ -161,6 +331,11 @@ msgstr "Percentuale del credito coperto dall'assicurazione." msgid "Policy State" msgstr "Stato Polizza" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Print" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code_2 #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code_2 @@ -173,3 +348,58 @@ msgstr "" #: model:ir.model,name:partner_risk_insurance.model_credit_policy_state msgid "State of credit policies" msgstr "Stato delle polizze del credito" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "The insurance company that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "The insurance policy that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/models/account_move.py:0 +#, python-format +msgid "The partner %s has no credit policy to insure invoices." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.py:0 +#, python-format +msgid "" +"There aren't moves between this dates\n" +"Please, select different dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_to +msgid "To" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total not insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "UNINSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_partner_risk_insurance_wizard +msgid "Wizard to see invoices sorted by risk" +msgstr "" diff --git a/partner_risk_insurance/i18n/partner_risk_insurance.pot b/partner_risk_insurance/i18n/partner_risk_insurance.pot index b1eefa2753..d40ac94625 100644 --- a/partner_risk_insurance/i18n/partner_risk_insurance.pot +++ b/partner_risk_insurance/i18n/partner_risk_insurance.pot @@ -13,6 +13,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid " with " +msgstr "" + #. module: partner_risk_insurance #: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document msgid "Date" @@ -48,6 +53,12 @@ msgstr "" msgid "Total by country:" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__active +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__active +msgid "Active" +msgstr "" + #. module: partner_risk_insurance #: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form msgid "Cancel" @@ -59,6 +70,16 @@ msgstr "" msgid "Code assigned to this partner by the risk insurance company." msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__partner_id +msgid "Company" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_credit_policy_company +msgid "Company of Credit Policies" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__company_credit_limit @@ -71,12 +92,14 @@ msgid "Contact" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_uid msgid "Created by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_date msgid "Created on" @@ -93,6 +116,12 @@ msgstr "" msgid "Credit Limit" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_company_id +msgid "Credit Policy Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__company_credit_limit @@ -123,6 +152,7 @@ msgid "Dates" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__display_name msgid "Display Name" @@ -134,6 +164,7 @@ msgid "From" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__id msgid "ID" @@ -149,6 +180,22 @@ msgstr "" msgid "INVOICE LIST - COUNTRY - INSURED" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "" +"If checked, the invoices created when the partner has this state will be " +"marked as insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Indicates if the invoice is insured by a credit policy." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_code @@ -161,12 +208,26 @@ msgstr "" msgid "Insurance Code 2" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "Insurance Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_grant_date msgid "Insurance Grant Date" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "Insurance Policy" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_requested #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_requested @@ -185,6 +246,26 @@ msgstr "" msgid "Insurance's Credit Limit" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "Insure Invoices" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_account_invoice_filter +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid "Insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Insured by a Credit Policy" +msgstr "" + #. module: partner_risk_insurance #: model:ir.actions.act_window,name:partner_risk_insurance.invoice_risk_insurance_action #: model:ir.actions.report,name:partner_risk_insurance.action_report_invoice_risk_insurance_template @@ -193,18 +274,26 @@ msgid "Invoice Risk Insurance Report" msgstr "" #. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard____last_update msgid "Last Modified on" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_uid msgid "Last Updated by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_date msgid "Last Updated on" @@ -219,6 +308,7 @@ msgid "" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__name msgid "Name" msgstr "" @@ -251,6 +341,27 @@ msgstr "" msgid "State of credit policies" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "The insurance company that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "The insurance policy that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/models/account_move.py:0 +#, python-format +msgid "The partner %s has no credit policy to insure invoices." +msgstr "" + #. module: partner_risk_insurance #. odoo-python #: code:addons/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.py:0 diff --git a/partner_risk_insurance/i18n/pt.po b/partner_risk_insurance/i18n/pt.po index 66afcd82c9..520a2d71a6 100644 --- a/partner_risk_insurance/i18n/pt.po +++ b/partner_risk_insurance/i18n/pt.po @@ -19,6 +19,57 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid " with " +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Date" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Invoice" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Name" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Ref." +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total Amount" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total amount:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total by country:" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__active +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__active +msgid "Active" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Cancel" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code @@ -26,6 +77,16 @@ msgstr "" msgid "Code assigned to this partner by the risk insurance company." msgstr "Limite de crédito concedido pela companhia de seguros." +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__partner_id +msgid "Company" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_credit_policy_company +msgid "Company of Credit Policies" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__company_credit_limit @@ -38,12 +99,16 @@ msgid "Contact" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_uid msgid "Created by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_date msgid "Created on" msgstr "" @@ -59,6 +124,12 @@ msgstr "Seguro de Crédito" msgid "Credit Limit" msgstr "Limite de Crédito da Empresa" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_company_id +msgid "Credit Policy Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__company_credit_limit @@ -71,6 +142,12 @@ msgstr "Limite de crédito concedido pela empresa." msgid "Credit limit granted by the insurance company." msgstr "Limite de crédito concedido pela companhia de seguros." +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_limit +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_limit +msgid "Credit limit specific to this partner." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_grant_date @@ -78,15 +155,55 @@ msgid "Date when the insurance was granted by the insurance company." msgstr "Data em que o seguro foi concedido pela companhia de seguros." #. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__display_name +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__display_name msgid "Display Name" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_from +msgid "From" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__id msgid "ID" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INVOICE LIST - COUNTRY - INSURED" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "" +"If checked, the invoices created when the partner has this state will be " +"marked as insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Indicates if the invoice is insured by a credit policy." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_code @@ -99,12 +216,26 @@ msgstr "Código de Seguros" msgid "Insurance Code 2" msgstr "Código de Segurança 2" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "Insurance Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_grant_date msgid "Insurance Grant Date" msgstr "Data da Concessão do Seguro" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "Insurance Policy" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_requested #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_requested @@ -124,17 +255,55 @@ msgid "Insurance's Credit Limit" msgstr "Limite do Seguro de Crédito" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "Insure Invoices" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_account_invoice_filter +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid "Insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Insured by a Credit Policy" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.actions.act_window,name:partner_risk_insurance.invoice_risk_insurance_action +#: model:ir.actions.report,name:partner_risk_insurance.action_report_invoice_risk_insurance_template +#: model:ir.ui.menu,name:partner_risk_insurance.invoice_risk_insurance_menu +msgid "Invoice Risk Insurance Report" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state____last_update +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard____last_update msgid "Last Modified on" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_uid msgid "Last Updated by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_date msgid "Last Updated on" msgstr "" @@ -147,6 +316,7 @@ msgstr "" "Marque este campo se o seguro foi solicitado para o crédito deste terceiro." #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__name msgid "Name" msgstr "" @@ -163,6 +333,11 @@ msgstr "Percentual do crédito coberto pelo seguro." msgid "Policy State" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Print" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code_2 #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code_2 @@ -174,3 +349,58 @@ msgstr "Limite de crédito concedido pela companhia de seguros." #: model:ir.model,name:partner_risk_insurance.model_credit_policy_state msgid "State of credit policies" msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "The insurance company that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "The insurance policy that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/models/account_move.py:0 +#, python-format +msgid "The partner %s has no credit policy to insure invoices." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.py:0 +#, python-format +msgid "" +"There aren't moves between this dates\n" +"Please, select different dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_to +msgid "To" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total not insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "UNINSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_partner_risk_insurance_wizard +msgid "Wizard to see invoices sorted by risk" +msgstr "" diff --git a/partner_risk_insurance/i18n/pt_BR.po b/partner_risk_insurance/i18n/pt_BR.po index 9eb08325ce..5cb648d90e 100644 --- a/partner_risk_insurance/i18n/pt_BR.po +++ b/partner_risk_insurance/i18n/pt_BR.po @@ -18,12 +18,73 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid " with " +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Date" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Invoice" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Name" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Ref." +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total Amount" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total amount:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total by country:" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__active +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__active +msgid "Active" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Cancel" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code msgid "Code assigned to this partner by the risk insurance company." msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__partner_id +msgid "Company" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_credit_policy_company +msgid "Company of Credit Policies" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__company_credit_limit @@ -36,12 +97,16 @@ msgid "Contact" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_uid msgid "Created by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_date msgid "Created on" msgstr "" @@ -56,6 +121,12 @@ msgstr "" msgid "Credit Limit" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_company_id +msgid "Credit Policy Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__company_credit_limit @@ -68,6 +139,12 @@ msgstr "" msgid "Credit limit granted by the insurance company." msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_limit +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_limit +msgid "Credit limit specific to this partner." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_grant_date @@ -75,15 +152,55 @@ msgid "Date when the insurance was granted by the insurance company." msgstr "" #. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__display_name +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__display_name msgid "Display Name" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_from +msgid "From" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__id msgid "ID" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INVOICE LIST - COUNTRY - INSURED" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "" +"If checked, the invoices created when the partner has this state will be " +"marked as insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Indicates if the invoice is insured by a credit policy." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_code @@ -96,12 +213,26 @@ msgstr "" msgid "Insurance Code 2" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "Insurance Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_grant_date msgid "Insurance Grant Date" msgstr "" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "Insurance Policy" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_requested #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_requested @@ -121,17 +252,55 @@ msgid "Insurance's Credit Limit" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "Insure Invoices" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_account_invoice_filter +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid "Insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Insured by a Credit Policy" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.actions.act_window,name:partner_risk_insurance.invoice_risk_insurance_action +#: model:ir.actions.report,name:partner_risk_insurance.action_report_invoice_risk_insurance_template +#: model:ir.ui.menu,name:partner_risk_insurance.invoice_risk_insurance_menu +msgid "Invoice Risk Insurance Report" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state____last_update +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard____last_update msgid "Last Modified on" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_uid msgid "Last Updated by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_date msgid "Last Updated on" msgstr "" @@ -143,6 +312,7 @@ msgid "" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__name msgid "Name" msgstr "" @@ -159,6 +329,11 @@ msgstr "" msgid "Policy State" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Print" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code_2 #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code_2 @@ -169,3 +344,58 @@ msgstr "" #: model:ir.model,name:partner_risk_insurance.model_credit_policy_state msgid "State of credit policies" msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "The insurance company that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "The insurance policy that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/models/account_move.py:0 +#, python-format +msgid "The partner %s has no credit policy to insure invoices." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.py:0 +#, python-format +msgid "" +"There aren't moves between this dates\n" +"Please, select different dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_to +msgid "To" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total not insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "UNINSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_partner_risk_insurance_wizard +msgid "Wizard to see invoices sorted by risk" +msgstr "" diff --git a/partner_risk_insurance/i18n/sl.po b/partner_risk_insurance/i18n/sl.po index e63d4a3a47..7ade5d01b5 100644 --- a/partner_risk_insurance/i18n/sl.po +++ b/partner_risk_insurance/i18n/sl.po @@ -20,6 +20,57 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3);\n" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid " with " +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Date" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Invoice" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Name" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Partner Ref." +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total Amount" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total amount:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total by country:" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__active +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__active +msgid "Active" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Cancel" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code @@ -29,6 +80,16 @@ msgstr "" "Sekundarna koda, ki jo je partnerju dodelila zavarovalnica za zavarovanje " "tveganj." +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__partner_id +msgid "Company" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_credit_policy_company +msgid "Company of Credit Policies" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__company_credit_limit @@ -41,12 +102,16 @@ msgid "Contact" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_uid msgid "Created by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__create_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__create_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__create_date msgid "Created on" msgstr "" @@ -62,6 +127,12 @@ msgstr "Zavarovanje kredita" msgid "Credit Limit" msgstr "Kreditni limit družbe" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_company_id +msgid "Credit Policy Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__company_credit_limit #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__company_credit_limit @@ -74,6 +145,12 @@ msgstr "Kreditni limit, ki ga je družba odobrila." msgid "Credit limit granted by the insurance company." msgstr "Kreditni limit, ki ga je odobrila zavarovalnica." +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_limit +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_limit +msgid "Credit limit specific to this partner." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_grant_date @@ -81,15 +158,55 @@ msgid "Date when the insurance was granted by the insurance company." msgstr "Datum, ko je zavarovalnica odobrila zavarovanje." #. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__display_name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__display_name +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__display_name msgid "Display Name" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_from +msgid "From" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__id #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__id msgid "ID" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "INVOICE LIST - COUNTRY - INSURED" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,help:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "" +"If checked, the invoices created when the partner has this state will be " +"marked as insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Indicates if the invoice is insured by a credit policy." +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_code #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_code @@ -102,12 +219,26 @@ msgstr "Zavarovalna koda" msgid "Insurance Code 2" msgstr "Zavarovalna koda 2" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "Insurance Company" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_grant_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_grant_date msgid "Insurance Grant Date" msgstr "Datum odobritve zavarovanja" +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "Insurance Policy" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__risk_insurance_requested #: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__risk_insurance_requested @@ -127,17 +258,55 @@ msgid "Insurance's Credit Limit" msgstr "Kreditni limit zavarovanja" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_partner__credit_policy_insure_invoices +#: model:ir.model.fields,field_description:partner_risk_insurance.field_res_users__credit_policy_insure_invoices +msgid "Insure Invoices" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_account_invoice_filter +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.view_move_form +msgid "Insured" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_bank_statement_line__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_move__insured_with_credit_policy +#: model:ir.model.fields,field_description:partner_risk_insurance.field_account_payment__insured_with_credit_policy +msgid "Insured by a Credit Policy" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.actions.act_window,name:partner_risk_insurance.invoice_risk_insurance_action +#: model:ir.actions.report,name:partner_risk_insurance.action_report_invoice_risk_insurance_template +#: model:ir.ui.menu,name:partner_risk_insurance.invoice_risk_insurance_menu +msgid "Invoice Risk Insurance Report" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company____last_update #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state____last_update +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard____last_update msgid "Last Modified on" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_uid #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_uid +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_uid msgid "Last Updated by" msgstr "" #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__write_date #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__write_date +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__write_date msgid "Last Updated on" msgstr "" @@ -150,6 +319,7 @@ msgstr "" "Označite to polje, če je za kredit tega partnerja zahtevano zavarovanje." #. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_company__name #: model:ir.model.fields,field_description:partner_risk_insurance.field_credit_policy_state__name msgid "Name" msgstr "" @@ -166,6 +336,11 @@ msgstr "Odstotek kredita, ki ga krije zavarovanje." msgid "Policy State" msgstr "" +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.invoice_risk_insurance_form +msgid "Print" +msgstr "" + #. module: partner_risk_insurance #: model:ir.model.fields,help:partner_risk_insurance.field_res_partner__risk_insurance_code_2 #: model:ir.model.fields,help:partner_risk_insurance.field_res_users__risk_insurance_code_2 @@ -178,3 +353,58 @@ msgstr "" #: model:ir.model,name:partner_risk_insurance.model_credit_policy_state msgid "State of credit policies" msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_company_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_company_id +msgid "The insurance company that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,help:partner_risk_insurance.field_account_bank_statement_line__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_move__credit_policy_state_id +#: model:ir.model.fields,help:partner_risk_insurance.field_account_payment__credit_policy_state_id +msgid "The insurance policy that insures the invoices of the partner." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/models/account_move.py:0 +#, python-format +msgid "The partner %s has no credit policy to insure invoices." +msgstr "" + +#. module: partner_risk_insurance +#. odoo-python +#: code:addons/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.py:0 +#, python-format +msgid "" +"There aren't moves between this dates\n" +"Please, select different dates" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model.fields,field_description:partner_risk_insurance.field_partner_risk_insurance_wizard__date_to +msgid "To" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "Total not insured customers:" +msgstr "" + +#. module: partner_risk_insurance +#: model_terms:ir.ui.view,arch_db:partner_risk_insurance.report_invoice_risk_insurance_document +msgid "UNINSURED CUSTOMERS" +msgstr "" + +#. module: partner_risk_insurance +#: model:ir.model,name:partner_risk_insurance.model_partner_risk_insurance_wizard +msgid "Wizard to see invoices sorted by risk" +msgstr "" diff --git a/partner_risk_insurance/migrations/16.0.3.0.1/pre-migration.py b/partner_risk_insurance/migrations/16.0.3.0.1/pre-migration.py new file mode 100644 index 0000000000..43b968c5d9 --- /dev/null +++ b/partner_risk_insurance/migrations/16.0.3.0.1/pre-migration.py @@ -0,0 +1,10 @@ +# Copyright 2024 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +# pylint: disable=W8150 +from odoo.addons.partner_risk_insurance.hooks import pre_init_hook + + +def migrate(cr, version): + """Create account move columns to performance upgrade on large databases""" + pre_init_hook(cr) diff --git a/partner_risk_insurance/models/__init__.py b/partner_risk_insurance/models/__init__.py index 8769077c92..51624d7e72 100644 --- a/partner_risk_insurance/models/__init__.py +++ b/partner_risk_insurance/models/__init__.py @@ -1,3 +1,5 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from . import credit_policy +from . import credit_policy_state +from . import credit_policy_company from . import res_partner +from . import account_move diff --git a/partner_risk_insurance/models/account_move.py b/partner_risk_insurance/models/account_move.py new file mode 100644 index 0000000000..0f3fe9f4d6 --- /dev/null +++ b/partner_risk_insurance/models/account_move.py @@ -0,0 +1,89 @@ +# Copyright 2024 Moduon Team S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import _, api, exceptions, fields, models + + +class AccountMove(models.Model): + _inherit = "account.move" + + insured_with_credit_policy = fields.Boolean( + string="Insured by a Credit Policy", + compute="_compute_insured_with_credit_policy", + store=True, + readonly=False, + help="Indicates if the invoice is insured by a credit policy.", + ) + credit_policy_company_id = fields.Many2one( + string="Insurance Company", + comodel_name="credit.policy.company", + compute="_compute_credit_policy", + store=True, + readonly=True, + ondelete="restrict", + help="The insurance company that insures the invoices of the partner.", + ) + credit_policy_state_id = fields.Many2one( + string="Insurance Policy", + comodel_name="credit.policy.state", + compute="_compute_credit_policy", + store=True, + readonly=True, + ondelete="restrict", + domain="[('insure_invoices', '=', True)]", + help="The insurance policy that insures the invoices of the partner.", + ) + + @api.depends("partner_id", "move_type") + def _compute_insured_with_credit_policy(self): + """Compute the insured_with_credit_policy field when partner changes.""" + self_w_ctx = self.with_context(check_move_validity=False) + self_w_ctx.update( + { + "insured_with_credit_policy": False, + "credit_policy_state_id": False, + "credit_policy_company_id": False, + } + ) + for record in self_w_ctx: + if record.move_type != "out_invoice": + continue + partner = record.partner_id.commercial_partner_id + if partner.credit_policy_insure_invoices: + record.insured_with_credit_policy = True + record.credit_policy_company_id = partner.credit_policy_company_id + record.credit_policy_state_id = partner.credit_policy_state_id + + @api.depends("insured_with_credit_policy") + def _compute_credit_policy(self): + """Compute if the invoice is insured by a credit policy if + `credit_policy_insure_invoices` field changes.""" + self_w_ctx = self.with_context(check_move_validity=False) + self_w_ctx.update( + { + "credit_policy_state_id": False, + "credit_policy_company_id": False, + } + ) + for record in self_w_ctx: + if record.move_type != "out_invoice": + continue + if record.insured_with_credit_policy: + partner = record.partner_id.commercial_partner_id + record.credit_policy_company_id = partner.credit_policy_company_id + record.credit_policy_state_id = partner.credit_policy_state_id + + @api.onchange("insured_with_credit_policy") + def onchange_insured_with_credit_policy(self): + """Check if the partner has a credit policy to insure + invoices and raise an error if not .""" + self_w_ctx = self.with_context(check_move_validity=False) + partner = self_w_ctx.partner_id.commercial_partner_id + if not partner or not self_w_ctx.insured_with_credit_policy: + return + if not partner.credit_policy_insure_invoices: + raise exceptions.UserError( + _( + "The partner %s has no credit policy to insure invoices.", + partner.display_name, + ) + ) diff --git a/partner_risk_insurance/models/credit_policy_company.py b/partner_risk_insurance/models/credit_policy_company.py new file mode 100644 index 0000000000..cc2a38b01c --- /dev/null +++ b/partner_risk_insurance/models/credit_policy_company.py @@ -0,0 +1,17 @@ +# Copyright 2024 Moduon Team S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class CreditPolicyCompany(models.Model): + _name = "credit.policy.company" + _description = "Company of Credit Policies" + + active = fields.Boolean(default=True) + name = fields.Char(required=True) + partner_id = fields.Many2one( + string="Company", + comodel_name="res.partner", + ondelete="restrict", + domain="[('is_company', '=', True)]", + ) diff --git a/partner_risk_insurance/models/credit_policy.py b/partner_risk_insurance/models/credit_policy_state.py similarity index 54% rename from partner_risk_insurance/models/credit_policy.py rename to partner_risk_insurance/models/credit_policy_state.py index 4c5b713373..30015a54a4 100644 --- a/partner_risk_insurance/models/credit_policy.py +++ b/partner_risk_insurance/models/credit_policy_state.py @@ -1,4 +1,5 @@ # Copyright 2016-2018 Tecnativa - Sergio Teruel +# Copyright 2024 Moduon Team S.L. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import fields, models @@ -7,4 +8,9 @@ class CreditPolicyState(models.Model): _name = "credit.policy.state" _description = "State of credit policies" + active = fields.Boolean(default=True) name = fields.Char(required=True) + insure_invoices = fields.Boolean( + help="If checked, the invoices created when the partner " + "has this state will be marked as insured", + ) diff --git a/partner_risk_insurance/models/res_partner.py b/partner_risk_insurance/models/res_partner.py index fbebf55b5d..b43936c0d1 100644 --- a/partner_risk_insurance/models/res_partner.py +++ b/partner_risk_insurance/models/res_partner.py @@ -1,3 +1,5 @@ +# Copyright 2016-2018 Tecnativa - Sergio Teruel +# Copyright 2024 Moduon Team S.L. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import fields, models @@ -55,5 +57,17 @@ def _inverse_oca_credit_limit(self): "company.", ) credit_policy_state_id = fields.Many2one( - string="Policy State", comodel_name="credit.policy.state", ondelete="restrict" + string="Policy State", + comodel_name="credit.policy.state", + ondelete="restrict", + ) + credit_policy_insure_invoices = fields.Boolean( + string="Insure Invoices", + related="credit_policy_state_id.insure_invoices", + store=False, + ) + credit_policy_company_id = fields.Many2one( + string="Credit Policy Company", + comodel_name="credit.policy.company", + ondelete="restrict", ) diff --git a/partner_risk_insurance/readme/CONTRIBUTORS.rst b/partner_risk_insurance/readme/CONTRIBUTORS.rst index 7ffba8f11f..15336f272e 100644 --- a/partner_risk_insurance/readme/CONTRIBUTORS.rst +++ b/partner_risk_insurance/readme/CONTRIBUTORS.rst @@ -10,3 +10,5 @@ * `Greenice `_: * Fernando La Chica + +* Eduardo de Miguel (`Moduon `__) diff --git a/partner_risk_insurance/readme/USAGE.rst b/partner_risk_insurance/readme/USAGE.rst index c49291f614..ffb04b802c 100644 --- a/partner_risk_insurance/readme/USAGE.rst +++ b/partner_risk_insurance/readme/USAGE.rst @@ -1,5 +1,11 @@ To use this module you need to: #. Go to *Sales > Customer > Create*. -#. Go to *Credit Insurance* tab. -#. Set insurance risk options. +#. Go to *Credit Insurance* tab if you are at least an Account User. +#. Set insurance risk options creating at least a Credit Policy (with Insure + invoices set) and Credit Company and set them in the customer. +#. Create an Inovoice with the customer that has the insurance risk options set. +#. Credit Policy will be set in the invoice. +#. You can activate or deactivate the Credit Policy if the customer + is allowed to have a credit policy. +#. You can filter Out Invoices by Credit Policy in the list view. diff --git a/partner_risk_insurance/security/ir.model.access.csv b/partner_risk_insurance/security/ir.model.access.csv index 8b91b7e815..72a00e414f 100644 --- a/partner_risk_insurance/security/ir.model.access.csv +++ b/partner_risk_insurance/security/ir.model.access.csv @@ -1,3 +1,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_credit_policy_state_user,access_credit_policy_state_user,model_credit_policy_state,base.group_user,1,1,1,1 +access_credit_policy_state_user,access_credit_policy_state_user,model_credit_policy_state,base.group_user,1,0,0,0 +access_credit_policy_state_manager,access_credit_policy_state_manager,model_credit_policy_state,account.group_account_user,1,1,1,1 +access_credit_policy_company_user,access_credit_policy_company_user,model_credit_policy_company,base.group_user,1,0,0,0 +access_credit_policy_company_manager,access_credit_policy_company_manager,model_credit_policy_company,account.group_account_user,1,1,1,1 partner_risk_insurance.access_partner_risk_insurance_wizard,access_partner_risk_insurance_wizard,partner_risk_insurance.model_partner_risk_insurance_wizard,base.group_user,1,1,1,1 diff --git a/partner_risk_insurance/static/description/index.html b/partner_risk_insurance/static/description/index.html index c3548f9a4a..26554722c2 100644 --- a/partner_risk_insurance/static/description/index.html +++ b/partner_risk_insurance/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

    Partner Risk Insurance

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5c853ca509e955a65cf86ffa5396db415e24e8326eb665716b1d14612995df7b +!! source digest: sha256:92230fb70ed60ab89660ea07a395fb28d1e9446251e1e25385e124e1661eebc5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Production/Stable License: AGPL-3 OCA/credit-control Translate me on Weblate Try me on Runboat

    This module adds a new tab in the partner form to introduce risk @@ -390,8 +389,17 @@

    Usage

    To use this module you need to:

    1. Go to Sales > Customer > Create.
    2. -
    3. Go to Credit Insurance tab.
    4. -
    5. Set insurance risk options.
    6. +
    7. Go to Credit Insurance tab if you are at least an Account User.
    8. +
    9. +
      Set insurance risk options creating at least a Credit Policy (with Insure
      +
      invoices set) and Credit Company and set them in the customer.
      +
      +
    10. +
    11. Create an Inovoice with the customer that has the insurance risk options set.
    12. +
    13. Credit Policy will be set in the invoice.
    14. +
    15. You can activate or deactivate the Credit Policy if the customer +is allowed to have a credit policy.
    16. +
    17. You can filter Out Invoices by Credit Policy in the list view.
    @@ -411,6 +419,7 @@

    Authors

  • Tecnativa
  • Factor Libre S.L
  • NaN·tic
  • +
  • Moduon
  • @@ -429,6 +438,7 @@

    Contributors

  • Fernando La Chica <fernandolachica@gmail.com>
  • +
  • Eduardo de Miguel (Moduon)
  • @@ -439,7 +449,7 @@

    Maintainers

    mission is to support the collaborative development of Odoo features and promote its widespread use.

    Current maintainers:

    -

    Daniel-CA sergio-teruel omar7r Tardo

    +

    Daniel-CA sergio-teruel omar7r Tardo Shide

    This module is part of the OCA/credit-control project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    diff --git a/partner_risk_insurance/tests/__init__.py b/partner_risk_insurance/tests/__init__.py index d72ca51a51..b6248259a2 100644 --- a/partner_risk_insurance/tests/__init__.py +++ b/partner_risk_insurance/tests/__init__.py @@ -1,3 +1,4 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import test_partner_risk_insurance +from . import test_invoice_credit_policy diff --git a/partner_risk_insurance/tests/test_invoice_credit_policy.py b/partner_risk_insurance/tests/test_invoice_credit_policy.py new file mode 100644 index 0000000000..ef275428c4 --- /dev/null +++ b/partner_risk_insurance/tests/test_invoice_credit_policy.py @@ -0,0 +1,81 @@ +# Copyright 2024 Moduon Team S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import exceptions +from odoo.tests import Form, tagged + +from odoo.addons.account.tests.common import AccountTestInvoicingCommon + + +@tagged("post_install", "-at_install") +class TestInvoiceCreditPolicy(AccountTestInvoicingCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.policy_state = cls.env["credit.policy.state"].create( + {"name": "Insurance Policy", "insure_invoices": True} + ) + cls.policy_company = cls.env["credit.policy.company"].create( + {"name": "Insurance Company"} + ) + cls.partner_ins = cls.env["res.partner"].create( + { + "name": "Test Insurance Partner", + "credit_policy_state_id": cls.policy_state.id, + "credit_policy_company_id": cls.policy_company.id, + } + ) + + def test_insured_out_invoice(self): + # Create an invoice without partner + out_inv = self.init_invoice("out_invoice", partner=self.partner_a) + with Form(out_inv) as out_inv_f: + self.assertEqual(out_inv_f.insured_with_credit_policy, False) + + # Set partner + out_inv_f.partner_id = self.partner_ins + self.assertEqual(out_inv_f.insured_with_credit_policy, True) + self.assertEqual( + out_inv_f.credit_policy_company_id, + self.partner_ins.credit_policy_company_id, + ) + self.assertEqual( + out_inv_f.credit_policy_state_id, + self.partner_ins.credit_policy_state_id, + ) + + # Change partner policy + self.partner_ins.credit_policy_state_id = False + self.partner_ins.credit_policy_company_id = False + self.assertEqual(out_inv_f.insured_with_credit_policy, True) + self.assertEqual(out_inv_f.credit_policy_company_id, self.policy_company) + self.assertEqual(out_inv_f.credit_policy_state_id, self.policy_state) + + # Deactivate insured invoice + out_inv_f.insured_with_credit_policy = False + self.assertEqual(out_inv_f.insured_with_credit_policy, False) + + # Try to reactivate insured invoice + with self.assertRaises(exceptions.UserError): + # Check raises on onchange + out_inv_f.insured_with_credit_policy = True + out_inv_f.insured_with_credit_policy = False + + self.partner_ins.credit_policy_state_id = self.policy_state + self.partner_ins.credit_policy_company_id = self.policy_company + self.assertEqual(out_inv.insured_with_credit_policy, False) + self.assertEqual(out_inv.credit_policy_company_id.id, False) + self.assertEqual(out_inv.credit_policy_state_id.id, False) + + def test_not_insured_other_invoices(self): + move_types = self.env["account.move"].get_invoice_types(include_receipts=True) + move_types.remove("out_invoice") + for move_type in move_types: + with self.subTest(move_type=move_type): + inv_p_no_ins = self.init_invoice(move_type, partner=self.partner_a) + self.assertEqual(inv_p_no_ins.insured_with_credit_policy, False) + self.assertEqual(inv_p_no_ins.credit_policy_company_id.id, False) + self.assertEqual(inv_p_no_ins.credit_policy_state_id.id, False) + inv_p_ins = self.init_invoice(move_type, partner=self.partner_ins) + self.assertEqual(inv_p_ins.insured_with_credit_policy, False) + self.assertEqual(inv_p_ins.credit_policy_company_id.id, False) + self.assertEqual(inv_p_ins.credit_policy_state_id.id, False) diff --git a/partner_risk_insurance/views/account_move_view.xml b/partner_risk_insurance/views/account_move_view.xml new file mode 100644 index 0000000000..73871c223f --- /dev/null +++ b/partner_risk_insurance/views/account_move_view.xml @@ -0,0 +1,53 @@ + + + + + account.move.form + account.move + + + + + + + + + + + + + account.invoice.select + account.move + + + + + + + + diff --git a/partner_risk_insurance/views/credit_policy_company_view.xml b/partner_risk_insurance/views/credit_policy_company_view.xml new file mode 100644 index 0000000000..6f060668f2 --- /dev/null +++ b/partner_risk_insurance/views/credit_policy_company_view.xml @@ -0,0 +1,21 @@ + + + + + credit.policy.company.form + credit.policy.company + +
    + + + + + + + + +
    +
    +
    +
    diff --git a/partner_risk_insurance/views/res_partner_view.xml b/partner_risk_insurance/views/res_partner_view.xml index e3e2249340..fae8f2ed06 100644 --- a/partner_risk_insurance/views/res_partner_view.xml +++ b/partner_risk_insurance/views/res_partner_view.xml @@ -1,4 +1,7 @@ - + + @@ -12,6 +15,7 @@ string="Credit Insurance" name="credit_insurance" attrs="{'invisible': [('is_company','=',False), ('parent_id','!=',False)]}" + groups="account.group_account_user" > @@ -29,6 +33,11 @@ + + diff --git a/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.xml b/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.xml index c75aaf8335..e96b81e689 100644 --- a/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.xml +++ b/partner_risk_insurance/wizard/invoice_risk_insurance_wizard.xml @@ -1,4 +1,6 @@ + invoice.risk.insurance.form diff --git a/portal_account_personal_data_only/i18n/it.po b/portal_account_personal_data_only/i18n/it.po new file mode 100644 index 0000000000..73388557f6 --- /dev/null +++ b/portal_account_personal_data_only/i18n/it.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" diff --git a/product_category_company/README.rst b/product_category_company/README.rst index 6c326b5a4c..955ece8fb7 100644 --- a/product_category_company/README.rst +++ b/product_category_company/README.rst @@ -7,7 +7,7 @@ Product Category Company !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:cc3b88f0dcb1a85184fb53f2dddf41a2ad6b39d4b6b731bfacb8651fcbe4d909 + !! source digest: sha256:e2aceba6fc1bbd5d8412e7b98f9746c2890c8d01acccb5a798c33532ef99dfda !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -30,6 +30,9 @@ Product Category Company This module allows to set product categories as company dependent. +You could be interested by concurrent module named ``product_category_company_favorite``, +(same repository), that propose similar features but with alternative implementation. + **Table of contents** .. contents:: diff --git a/product_category_company/__manifest__.py b/product_category_company/__manifest__.py index b05c0e1ea2..9d7f3eb5dc 100644 --- a/product_category_company/__manifest__.py +++ b/product_category_company/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Product Category Company", "summary": "Product categories as company dependent", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "category": "Product", "website": "https://github.com/OCA/multi-company", "author": "Akretion, Odoo Community Association (OCA)", diff --git a/product_category_company/readme/DESCRIPTION.rst b/product_category_company/readme/DESCRIPTION.rst index de2a1a495c..9540880871 100644 --- a/product_category_company/readme/DESCRIPTION.rst +++ b/product_category_company/readme/DESCRIPTION.rst @@ -1 +1,4 @@ This module allows to set product categories as company dependent. + +You could be interested by concurrent module named ``product_category_company_favorite``, +(same repository), that propose similar features but with alternative implementation. \ No newline at end of file diff --git a/product_category_company/static/description/index.html b/product_category_company/static/description/index.html index 32234bcd79..4de5b9e779 100644 --- a/product_category_company/static/description/index.html +++ b/product_category_company/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,10 +366,12 @@

    Product Category Company

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:cc3b88f0dcb1a85184fb53f2dddf41a2ad6b39d4b6b731bfacb8651fcbe4d909 +!! source digest: sha256:e2aceba6fc1bbd5d8412e7b98f9746c2890c8d01acccb5a798c33532ef99dfda !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: AGPL-3 OCA/multi-company Translate me on Weblate Try me on Runboat

    This module allows to set product categories as company dependent.

    +

    You could be interested by concurrent module named product_category_company_favorite, +(same repository), that propose similar features but with alternative implementation.

    Table of contents

      diff --git a/product_category_company_favorite/README.rst b/product_category_company_favorite/README.rst new file mode 100644 index 0000000000..9c2795830f --- /dev/null +++ b/product_category_company_favorite/README.rst @@ -0,0 +1,146 @@ +====================================== +Product Categories - Company Favorites +====================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:a72e6c252981c898aa0b5a7afcc5dad3199450bef31ae2b76ca04c99a0021cac + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fmulti--company-lightgray.png?logo=github + :target: https://github.com/OCA/multi-company/tree/16.0/product_category_company_favorite + :alt: OCA/multi-company +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/multi-company-16-0/multi-company-16-0-product_category_company_favorite + :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/multi-company&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module is usefull in a multi-company context if +- the companies doesn't have to use all the same categories +- if you apply companies to your products. + +Without that module, when creating products, end user can select categories +that don't make sense for the current company. +With that module, categories manager can set for each company, which category +will be displayed, reducing configuration error. (and so accounting error +if accounts are set at the category level.) + +You could be interested by concurrent module named ``product_category_company``, +(same repository), that propose similar features but with alternative implementation. + +**Note** + +- When creating **new root category**: + + - it is favorite for all the other company if it is favorite in the current + context. + - it is not favorite for all the other company if it is not favorite in the current + context. + +- When creating **new child category**: + + - the category will inherit the configuration + of the parent category in each company. + +- when creating a **new company**: + + - all the existing categories are favorite in the new created company. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +* Select a company you want to configure + +* Go to "Inventory" > "Configuration" > "Product Categories" + +* Uncheck categories you don't want to use for the current company. + +.. figure:: https://raw.githubusercontent.com/OCA/multi-company/16.0/product_category_company_favorite/static/description/product_category_tree.png + +Usage +===== + +* Go in "Inventory" > "Master Data" > "Products" + +* Create a new product + +.. figure:: https://raw.githubusercontent.com/OCA/multi-company/16.0/product_category_company_favorite/static/description/product_form_view.png + +End user doesn't have access to the category "All / Consumable" +that is not favorite in the current company. + +Known issues / Roadmap +====================== + +There is a little UX bug. When user display product categories in the tree view +and click to select which category is favorite +and which category is not, if the category has children, the value of the children +is updated in the database but the display is not updated. + +Refresh the page resolve the problem. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) + +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-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px + :target: https://github.com/legalsylvain + :alt: legalsylvain + +Current `maintainer `__: + +|maintainer-legalsylvain| + +This module is part of the `OCA/multi-company `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_category_company_favorite/__init__.py b/product_category_company_favorite/__init__.py new file mode 100644 index 0000000000..a803b64902 --- /dev/null +++ b/product_category_company_favorite/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .post_init_hook import initialize_is_favorite_field diff --git a/product_category_company_favorite/__manifest__.py b/product_category_company_favorite/__manifest__.py new file mode 100644 index 0000000000..f95b86e22b --- /dev/null +++ b/product_category_company_favorite/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright (C) 2023 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Product Categories - Company Favorites", + "summary": "Possilibity to set favorite product categories per company", + "version": "16.0.1.0.1", + "category": "Product", + "author": "GRAP,Odoo Community Association (OCA)", + "maintainers": ["legalsylvain"], + "website": "https://github.com/OCA/multi-company", + "license": "AGPL-3", + "depends": ["product"], + "excludes": ["product_category_company"], + "data": ["views/view_product_category.xml"], + "demo": ["demo/res_company.xml"], + "images": ["static/description/product_category_tree.png"], + "installable": True, + "post_init_hook": "initialize_is_favorite_field", +} diff --git a/product_category_company_favorite/demo/res_company.xml b/product_category_company_favorite/demo/res_company.xml new file mode 100644 index 0000000000..1cac521092 --- /dev/null +++ b/product_category_company_favorite/demo/res_company.xml @@ -0,0 +1,14 @@ + + + + + + Demo Company + + + + diff --git a/product_category_company_favorite/i18n/fr.po b/product_category_company_favorite/i18n/fr.po new file mode 100644 index 0000000000..fbea87900e --- /dev/null +++ b/product_category_company_favorite/i18n/fr.po @@ -0,0 +1,47 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_company_favorite +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-20 13:22+0000\n" +"PO-Revision-Date: 2024-02-20 13:22+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: product_category_company_favorite +#: model:ir.model,name:product_category_company_favorite.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: product_category_company_favorite +#: model:ir.model.fields,field_description:product_category_company_favorite.field_product_category__is_favorite +msgid "Favorite" +msgstr "favorite" + +#. module: product_category_company_favorite +#: model_terms:ir.ui.view,arch_db:product_category_company_favorite.view_product_category_search +msgid "Favorites" +msgstr "favorites" + +#. module: product_category_company_favorite +#: model:ir.model.fields,help:product_category_company_favorite.field_product_category__is_favorite +msgid "" +"If this field is unchecked, the category will be hidden when searching " +"category in a drop-down list like in the product form view." +msgstr "" +"Si cette case est décochée, la catégorie sera cachée lors de la recherche de " +"catégorie dans une liste déroulante, comme dans la vue formulaire de " +"l'article." + +#. module: product_category_company_favorite +#: model:ir.model,name:product_category_company_favorite.model_product_category +msgid "Product Category" +msgstr "Catégorie de produit" diff --git a/product_category_company_favorite/i18n/product_category_company_favorite.pot b/product_category_company_favorite/i18n/product_category_company_favorite.pot new file mode 100644 index 0000000000..906885fcdf --- /dev/null +++ b/product_category_company_favorite/i18n/product_category_company_favorite.pot @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_company_favorite +# +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: product_category_company_favorite +#: model:ir.model,name:product_category_company_favorite.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_category_company_favorite +#: model:ir.model.fields,field_description:product_category_company_favorite.field_product_category__is_favorite +msgid "Favorite" +msgstr "" + +#. module: product_category_company_favorite +#: model_terms:ir.ui.view,arch_db:product_category_company_favorite.view_product_category_search +msgid "Favorites" +msgstr "" + +#. module: product_category_company_favorite +#: model:ir.model.fields,help:product_category_company_favorite.field_product_category__is_favorite +msgid "" +"If this field is unchecked, the category will be hidden when searching " +"category in a drop-down list like in the product form view." +msgstr "" + +#. module: product_category_company_favorite +#: model:ir.model,name:product_category_company_favorite.model_product_category +msgid "Product Category" +msgstr "" diff --git a/product_category_company_favorite/models/__init__.py b/product_category_company_favorite/models/__init__.py new file mode 100644 index 0000000000..d911790fe9 --- /dev/null +++ b/product_category_company_favorite/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_company +from . import product_category diff --git a/product_category_company_favorite/models/product_category.py b/product_category_company_favorite/models/product_category.py new file mode 100644 index 0000000000..63daeda82b --- /dev/null +++ b/product_category_company_favorite/models/product_category.py @@ -0,0 +1,63 @@ +# Copyright (C) 2023-Today: GRAP () +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ProductCategory(models.Model): + _inherit = "product.category" + + is_favorite = fields.Boolean( + string="Favorite", + company_dependent=True, + help="If this field is unchecked, the category will" + " be hidden when searching category in a drop-down list" + " like in the product form view.", + ) + + @api.onchange("parent_id") + def onchange_parent_id_favorite(self): + if self.parent_id: + self.is_favorite = self.parent_id.is_favorite + + @api.model_create_multi + def create(self, vals_list): + categories = super().create(vals_list) + # Configure is_favorite for all the other companies + company_ids = ( + self.env["res.company"] + .with_context(active_test=False) + .search([("id", "!=", self.env.company.id)]) + .ids + ) + for company_id in company_ids: + for category in categories: + ctx_category = category.with_company(company_id) + if ctx_category.parent_id: + # We inherit the contextual configuration of the parent category, if any + ctx_category.is_favorite = ctx_category.parent_id.is_favorite + else: + # Otherwise, we set the same setting as the current one + ctx_category.is_favorite = category.is_favorite + return categories + + def write(self, vals): + if "is_favorite" in vals: + children = self.search([("id", "child_of", self.ids)]).filtered( + lambda x: x.id not in self.ids + ) + super(ProductCategory, children).write({"is_favorite": vals["is_favorite"]}) + return super().write(vals) + + def _name_search( + self, name, args=None, operator="ilike", limit=100, name_get_uid=None + ): + args = list(args or []) + if not args or not any( + [x[0] == "is_favorite" for x in args if getattr(x, "__getitem__", False)] + ): + args += [("is_favorite", "=", True)] + return super()._name_search( + name, args=args, operator=operator, limit=limit, name_get_uid=name_get_uid + ) diff --git a/product_category_company_favorite/models/res_company.py b/product_category_company_favorite/models/res_company.py new file mode 100644 index 0000000000..12509e957c --- /dev/null +++ b/product_category_company_favorite/models/res_company.py @@ -0,0 +1,25 @@ +# Copyright (C) 2023-Today: GRAP () +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + def _configure_favorite_product_category(self): + for company in self: + categories = ( + self.env["product.category"] + .sudo() + .with_company(company) + .search([("parent_id", "=", False)]) + ) + categories.write({"is_favorite": True}) + + @api.model_create_multi + def create(self, vals_list): + companies = super().create(vals_list) + companies._configure_favorite_product_category() + return companies diff --git a/product_category_company_favorite/post_init_hook.py b/product_category_company_favorite/post_init_hook.py new file mode 100644 index 0000000000..c8dbe6b556 --- /dev/null +++ b/product_category_company_favorite/post_init_hook.py @@ -0,0 +1,16 @@ +# Copyright (C) 2023-Today: GRAP () +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import SUPERUSER_ID, api + +_logger = logging.getLogger(__name__) + + +def initialize_is_favorite_field(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + for company in env["res.company"].with_context(active_test=False).search([]): + _logger.info("Configure is_favorite field for the company %s" % (company.name)) + company._configure_favorite_product_category() diff --git a/product_category_company_favorite/readme/CONFIGURE.rst b/product_category_company_favorite/readme/CONFIGURE.rst new file mode 100644 index 0000000000..ae17c4a66d --- /dev/null +++ b/product_category_company_favorite/readme/CONFIGURE.rst @@ -0,0 +1,7 @@ +* Select a company you want to configure + +* Go to "Inventory" > "Configuration" > "Product Categories" + +* Uncheck categories you don't want to use for the current company. + +.. figure:: ../static/description/product_category_tree.png diff --git a/product_category_company_favorite/readme/CONTRIBUTORS.rst b/product_category_company_favorite/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..e1525ce042 --- /dev/null +++ b/product_category_company_favorite/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) diff --git a/product_category_company_favorite/readme/DESCRIPTION.rst b/product_category_company_favorite/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..b0704b7c3a --- /dev/null +++ b/product_category_company_favorite/readme/DESCRIPTION.rst @@ -0,0 +1,30 @@ +This module is usefull in a multi-company context if +- the companies doesn't have to use all the same categories +- if you apply companies to your products. + +Without that module, when creating products, end user can select categories +that don't make sense for the current company. +With that module, categories manager can set for each company, which category +will be displayed, reducing configuration error. (and so accounting error +if accounts are set at the category level.) + +You could be interested by concurrent module named ``product_category_company``, +(same repository), that propose similar features but with alternative implementation. + +**Note** + +- When creating **new root category**: + + - it is favorite for all the other company if it is favorite in the current + context. + - it is not favorite for all the other company if it is not favorite in the current + context. + +- When creating **new child category**: + + - the category will inherit the configuration + of the parent category in each company. + +- when creating a **new company**: + + - all the existing categories are favorite in the new created company. diff --git a/product_category_company_favorite/readme/ROADMAP.rst b/product_category_company_favorite/readme/ROADMAP.rst new file mode 100644 index 0000000000..0433c922dc --- /dev/null +++ b/product_category_company_favorite/readme/ROADMAP.rst @@ -0,0 +1,6 @@ +There is a little UX bug. When user display product categories in the tree view +and click to select which category is favorite +and which category is not, if the category has children, the value of the children +is updated in the database but the display is not updated. + +Refresh the page resolve the problem. diff --git a/product_category_company_favorite/readme/USAGE.rst b/product_category_company_favorite/readme/USAGE.rst new file mode 100644 index 0000000000..651f85207b --- /dev/null +++ b/product_category_company_favorite/readme/USAGE.rst @@ -0,0 +1,8 @@ +* Go in "Inventory" > "Master Data" > "Products" + +* Create a new product + +.. figure:: ../static/description/product_form_view.png + +End user doesn't have access to the category "All / Consumable" +that is not favorite in the current company. diff --git a/product_category_company_favorite/static/description/icon.png b/product_category_company_favorite/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/product_category_company_favorite/static/description/index.html b/product_category_company_favorite/static/description/index.html new file mode 100644 index 0000000000..ce34de665a --- /dev/null +++ b/product_category_company_favorite/static/description/index.html @@ -0,0 +1,493 @@ + + + + + +Product Categories - Company Favorites + + + +
      +

      Product Categories - Company Favorites

      + + +

      Beta License: AGPL-3 OCA/multi-company Translate me on Weblate Try me on Runboat

      +

      This module is usefull in a multi-company context if +- the companies doesn’t have to use all the same categories +- if you apply companies to your products.

      +

      Without that module, when creating products, end user can select categories +that don’t make sense for the current company. +With that module, categories manager can set for each company, which category +will be displayed, reducing configuration error. (and so accounting error +if accounts are set at the category level.)

      +

      You could be interested by concurrent module named product_category_company, +(same repository), that propose similar features but with alternative implementation.

      +

      Note

      +
        +
      • When creating new root category:

        +
        +
          +
        • it is favorite for all the other company if it is favorite in the current +context.
        • +
        • it is not favorite for all the other company if it is not favorite in the current +context.
        • +
        +
        +
      • +
      • When creating new child category:

        +
        +
          +
        • the category will inherit the configuration +of the parent category in each company.
        • +
        +
        +
      • +
      • when creating a new company:

        +
        +
          +
        • all the existing categories are favorite in the new created company.
        • +
        +
        +
      • +
      +

      Table of contents

      + +
      +

      Configuration

      +
        +
      • Select a company you want to configure
      • +
      • Go to “Inventory” > “Configuration” > “Product Categories”
      • +
      • Uncheck categories you don’t want to use for the current company.
      • +
      +
      +https://raw.githubusercontent.com/OCA/multi-company/16.0/product_category_company_favorite/static/description/product_category_tree.png +
      +
      +
      +

      Usage

      +
        +
      • Go in “Inventory” > “Master Data” > “Products”
      • +
      • Create a new product
      • +
      +
      +https://raw.githubusercontent.com/OCA/multi-company/16.0/product_category_company_favorite/static/description/product_form_view.png +
      +

      End user doesn’t have access to the category “All / Consumable” +that is not favorite in the current company.

      +
      +
      +

      Known issues / Roadmap

      +

      There is a little UX bug. When user display product categories in the tree view +and click to select which category is favorite +and which category is not, if the category has children, the value of the children +is updated in the database but the display is not updated.

      +

      Refresh the page resolve the problem.

      +
      +
      +

      Bug Tracker

      +

      Bugs are tracked on GitHub 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.

      +

      Do not contact contributors directly about support or help with technical issues.

      +
      +
      +

      Credits

      +
      +

      Authors

      +
        +
      • GRAP
      • +
      +
      + +
      +

      Maintainers

      +

      This module is maintained by the OCA.

      +Odoo Community Association +

      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.

      +

      Current maintainer:

      +

      legalsylvain

      +

      This module is part of the OCA/multi-company project on GitHub.

      +

      You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

      +
      +
      +
      + + diff --git a/product_category_company_favorite/static/description/product_category_tree.png b/product_category_company_favorite/static/description/product_category_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..ee27a76fc5c38953539b1fe562497c8812fc427a GIT binary patch literal 32890 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%0DxffNz~$~BG%e*AkX)}Q$5QE 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 literal 0 HcmV?d00001 diff --git a/product_category_company_favorite/static/description/product_form_view.png b/product_category_company_favorite/static/description/product_form_view.png new file mode 100644 index 0000000000000000000000000000000000000000..e936a84e188ab5ad186f9cdd0fde9a915ea070bb GIT binary patch literal 23491 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 literal 0 HcmV?d00001 diff --git a/product_category_company_favorite/tests/__init__.py b/product_category_company_favorite/tests/__init__.py new file mode 100644 index 0000000000..d9b96c4fa5 --- /dev/null +++ b/product_category_company_favorite/tests/__init__.py @@ -0,0 +1 @@ +from . import test_module diff --git a/product_category_company_favorite/tests/test_module.py b/product_category_company_favorite/tests/test_module.py new file mode 100644 index 0000000000..2114c7579b --- /dev/null +++ b/product_category_company_favorite/tests/test_module.py @@ -0,0 +1,118 @@ +# Copyright (C) 2023-Today: GRAP () +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import Form, common + + +class TestModule(common.TransactionCase): + def setUp(self): + super().setUp() + self.main_company = self.env.ref("base.main_company") + self.demo_company = self.env.ref( + "product_category_company_favorite.demo_company" + ) + + self.ProductCategory = self.env["product.category"] + self.ResCompany = self.env["res.company"] + + self.category_A = self.env.ref("product.product_category_all") + self.category_A_2 = self.env.ref("product.product_category_1") + self.category_A_2_x = self.env.ref("product.product_category_5") + + def _change_company(self, item, company=False): + if not company: + company = self.demo_company + return item.with_company(company) + + def test_00_hook(self): + self.assertTrue(self.category_A.is_favorite) + self.assertTrue(self._change_company(self.category_A).is_favorite) + + def test_10_write_value_company_dependant(self): + self.category_A.is_favorite = False + self.assertFalse(self.category_A.is_favorite) + self.assertTrue(self._change_company(self.category_A).is_favorite) + + def test_11_write_value_recursive(self): + self.category_A.is_favorite = False + self.assertFalse(self.category_A.is_favorite) + self.assertFalse(self.category_A_2.is_favorite) + self.assertFalse(self.category_A_2_x.is_favorite) + + def test_20_create_new_category_not_favorite(self): + new_root_categ = self.ProductCategory.create( + { + "name": "New Root Category", + "is_favorite": False, + } + ) + self.assertFalse(new_root_categ.is_favorite) + self.assertFalse(self._change_company(new_root_categ).is_favorite) + + new_child_categ = self.ProductCategory.create( + { + "name": "New Child Category", + "parent_id": new_root_categ.id, + } + ) + self.assertFalse(new_child_categ.is_favorite) + self.assertFalse(self._change_company(new_child_categ).is_favorite) + + def test_21_create_new_category_favorite(self): + new_root_categ = self.ProductCategory.create( + { + "name": "New Root Category", + "is_favorite": True, + } + ) + self.assertTrue(new_root_categ.is_favorite) + self.assertTrue(self._change_company(new_root_categ).is_favorite) + + new_child_categ = self.ProductCategory.create( + { + "name": "New Child Category", + "parent_id": new_root_categ.id, + } + ) + self.assertTrue(self._change_company(new_child_categ).is_favorite) + + def test_30_create_new_company(self): + company_vals = { + "name": "New Company", + } + new_company = self.ResCompany.create(company_vals) + + self.assertTrue( + self._change_company(self.category_A, company=new_company).is_favorite + ) + self.assertTrue( + self._change_company(self.category_A_2_x, company=new_company).is_favorite + ) + + def test_40_name_search(self): + self.category_A_2_x.is_favorite = True + self.assertTrue(self.ProductCategory.name_search(self.category_A_2_x.name)) + + self.category_A_2_x.is_favorite = False + self.assertFalse(self.ProductCategory.name_search(self.category_A_2_x.name)) + + def test_40_test_onchange(self): + root_categ_favorite = self.ProductCategory.create( + { + "name": "New Root Category 1", + "is_favorite": True, + } + ) + root_categ_not_favorite = self.ProductCategory.create( + { + "name": "New Root Category 2", + "is_favorite": False, + } + ) + categ = Form(self.env["product.category"]) + self.assertFalse(categ.is_favorite) + categ.parent_id = root_categ_favorite + self.assertTrue(categ.is_favorite) + categ.parent_id = root_categ_not_favorite + self.assertFalse(categ.is_favorite) diff --git a/product_category_company_favorite/views/view_product_category.xml b/product_category_company_favorite/views/view_product_category.xml new file mode 100644 index 0000000000..42af91b42f --- /dev/null +++ b/product_category_company_favorite/views/view_product_category.xml @@ -0,0 +1,46 @@ + + + + + + product.category + + + + + + + + + + product.category + + + + + + + is_favorite == True + + + + + + product.category + + + + + + + + + diff --git a/product_sold_by_delivery_week/README.rst b/product_sold_by_delivery_week/README.rst index 5aa6ddc291..ef7849154f 100644 --- a/product_sold_by_delivery_week/README.rst +++ b/product_sold_by_delivery_week/README.rst @@ -7,7 +7,7 @@ Product weekly sales hint !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8b071cae4f5330ccc1eaacb4374f3f840cf54ac2ff653b3dbf8b372278a9f028 + !! source digest: sha256:5c23b69bd0cac593b37140cf67786cb580904f8876975980260f9823ffa7712e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -57,7 +57,7 @@ info in other views like product recommendations, this is not needed.) Usage ===== -Once configured, hints will apperar as an optional column in sale order +Once configured, hints will appear as an optional column in sale order lines or in products tree. In the general products view, general sales info is shown. Meanwhile, in the @@ -73,7 +73,7 @@ Known issues / Roadmap * A widget could be created on top of the main field to have nicer icons and probably colors. * For the near future, a configurable granularity would be desirable, so - behaviour could be changed to years, months or days as the period of choice. + behavior could be changed to years, months or days as the period of choice. To simplify this module, only weekly periods will be considered for now. Bug Tracker @@ -104,6 +104,8 @@ Contributors * César A. Sánchez * Luis D. Lafaurie +* Jairo Llopis ([Moduon](https://www.moduon.team/)) + Maintainers ~~~~~~~~~~~ diff --git a/product_sold_by_delivery_week/__manifest__.py b/product_sold_by_delivery_week/__manifest__.py index 09163d44a2..a8df7c49e6 100644 --- a/product_sold_by_delivery_week/__manifest__.py +++ b/product_sold_by_delivery_week/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Product weekly sales hint", "summary": "Adds a field that graphically hints the weekly product sales", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "development_status": "Beta", "category": "Sale", "website": "https://github.com/OCA/sale-reporting", diff --git a/product_sold_by_delivery_week/models/product_product.py b/product_sold_by_delivery_week/models/product_product.py index a7a60d51c4..05b905b804 100644 --- a/product_sold_by_delivery_week/models/product_product.py +++ b/product_sold_by_delivery_week/models/product_product.py @@ -36,9 +36,9 @@ def _compute_weekly_sold_delivered_shown(self): """This field is meant to be used only for display purposes so we can use custom characters show the sales stream. We want to keep the stored one as base 2 string so we can perform bitwise operations easily""" - not_service_products = self.filtered(lambda x: x.type != "service") - (self - not_service_products).weekly_sold_delivered_shown = False - for product in self.filtered(lambda x: x.type != "service"): + services = self.filtered(lambda x: x.type == "service") + services.weekly_sold_delivered_shown = False + for product in self - services: product.weekly_sold_delivered_shown = self._format_weekly_string( product.weekly_sold_delivered ) diff --git a/product_sold_by_delivery_week/models/stock_move.py b/product_sold_by_delivery_week/models/stock_move.py index 3fcb322485..c9c9cf68ad 100644 --- a/product_sold_by_delivery_week/models/stock_move.py +++ b/product_sold_by_delivery_week/models/stock_move.py @@ -21,5 +21,7 @@ def _action_done(self, cancel_backorder=False): for product in products.filtered( lambda x: x.weekly_sold_delivered and x.weekly_sold_delivered[-1:] == "0" ): - product.weekly_sold_delivered = product.weekly_sold_delivered[:-1] + "1" + product.sudo().weekly_sold_delivered = ( + product.weekly_sold_delivered[:-1] + "1" + ) return moves_todo diff --git a/product_sold_by_delivery_week/readme/CONTRIBUTORS.rst b/product_sold_by_delivery_week/readme/CONTRIBUTORS.rst index 7d2085076f..709988a3a6 100644 --- a/product_sold_by_delivery_week/readme/CONTRIBUTORS.rst +++ b/product_sold_by_delivery_week/readme/CONTRIBUTORS.rst @@ -4,3 +4,5 @@ * Carlos Dauden * César A. Sánchez * Luis D. Lafaurie + +* Jairo Llopis ([Moduon](https://www.moduon.team/)) diff --git a/product_sold_by_delivery_week/readme/ROADMAP.rst b/product_sold_by_delivery_week/readme/ROADMAP.rst index 87cc4adced..52ff4ecb05 100644 --- a/product_sold_by_delivery_week/readme/ROADMAP.rst +++ b/product_sold_by_delivery_week/readme/ROADMAP.rst @@ -2,5 +2,5 @@ * A widget could be created on top of the main field to have nicer icons and probably colors. * For the near future, a configurable granularity would be desirable, so - behaviour could be changed to years, months or days as the period of choice. + behavior could be changed to years, months or days as the period of choice. To simplify this module, only weekly periods will be considered for now. diff --git a/product_sold_by_delivery_week/readme/USAGE.rst b/product_sold_by_delivery_week/readme/USAGE.rst index 82d8f9aa51..8a6c0e1bf0 100644 --- a/product_sold_by_delivery_week/readme/USAGE.rst +++ b/product_sold_by_delivery_week/readme/USAGE.rst @@ -1,4 +1,4 @@ -Once configured, hints will apperar as an optional column in sale order +Once configured, hints will appear as an optional column in sale order lines or in products tree. In the general products view, general sales info is shown. Meanwhile, in the diff --git a/product_sold_by_delivery_week/static/description/index.html b/product_sold_by_delivery_week/static/description/index.html index bc44ec85df..d34c2296d5 100644 --- a/product_sold_by_delivery_week/static/description/index.html +++ b/product_sold_by_delivery_week/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

      Product weekly sales hint

      !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:8b071cae4f5330ccc1eaacb4374f3f840cf54ac2ff653b3dbf8b372278a9f028 +!! source digest: sha256:5c23b69bd0cac593b37140cf67786cb580904f8876975980260f9823ffa7712e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

      Beta License: AGPL-3 OCA/sale-reporting Translate me on Weblate Try me on Runboat

      This module allows to compute a graphical hint, stored in the product itself, @@ -408,7 +407,7 @@

      Configuration

    Usage

    -

    Once configured, hints will apperar as an optional column in sale order +

    Once configured, hints will appear as an optional column in sale order lines or in products tree.

    In the general products view, general sales info is shown. Meanwhile, in the sale lines field we can see this field in context by simply filtering partner @@ -422,7 +421,7 @@

    Known issues / Roadmap

  • A widget could be created on top of the main field to have nicer icons and probably colors.
  • For the near future, a configurable granularity would be desirable, so -behaviour could be changed to years, months or days as the period of choice. +behavior could be changed to years, months or days as the period of choice. To simplify this module, only weekly periods will be considered for now.
  • @@ -452,6 +451,7 @@

    Contributors

  • Luis D. Lafaurie
  • +
  • Jairo Llopis ([Moduon](https://www.moduon.team/))
  • diff --git a/product_sold_by_delivery_week/tests/test_product_sold_by_delivery_week.py b/product_sold_by_delivery_week/tests/test_product_sold_by_delivery_week.py index 22864542ad..62617d049d 100644 --- a/product_sold_by_delivery_week/tests/test_product_sold_by_delivery_week.py +++ b/product_sold_by_delivery_week/tests/test_product_sold_by_delivery_week.py @@ -1,6 +1,6 @@ # Copyright 2021 Camptocamp SA # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) -from odoo.tests import TransactionCase +from odoo.tests import TransactionCase, new_test_user class TestProductSoldByDeliveryWeek(TransactionCase): @@ -25,8 +25,16 @@ def setUpClass(cls): "detailed_type": "service", } ) - cls.product.weekly_sold_delivered = "Sold delivered" - cls.product_expense_product.weekly_sold_delivered = "Sold delivered service" + cls.product.weekly_sold_delivered = "000000" + cls.product_expense_product.weekly_sold_delivered = "000000" + # Tests should pass with basic sale and stock access rights + cls.env = cls.env( + user=new_test_user( + cls.env, + login="test_user", + groups="stock.group_stock_user,sales_team.group_sale_salesman", + ) + ) cls.order = cls.env["sale.order"].create( { "partner_id": cls.partner.id, @@ -55,30 +63,30 @@ def setUpClass(cls): ) def test_01_check_delivered_message_without_parameters(self): - """Test the return message deppending on the type of the product.""" + """Test the return message depending on the type of the product.""" self.assertEqual(self.order.order_line[0].weekly_sold_delivered_shown, "◌◌◌◌◌◌") self.assertEqual(self.order.order_line[1].weekly_sold_delivered_shown, False) def test_02_check_delivered_message_with_parameters(self): """Test the definition of config parameters.""" - self.env["ir.config_parameter"].create( - { - "key": "product_sold_by_delivery_week.sold_char", - "value": "R", - } - ) - self.env["ir.config_parameter"].create( - { - "key": "product_sold_by_delivery_week.not_sold_char", - "value": "M", - } + self.env["ir.config_parameter"].sudo().create( + [ + { + "key": "product_sold_by_delivery_week.sold_char", + "value": "R", + }, + { + "key": "product_sold_by_delivery_week.not_sold_char", + "value": "M", + }, + ] ) self.assertEqual(self.order.order_line[0].weekly_sold_delivered_shown, "MMMMMM") self.assertEqual(self.order.order_line[1].weekly_sold_delivered_shown, False) def test_03_sale_stock_delivery_partial(self): """Test a SO with a product on delivery.""" - # intial order + # initial order self.order.action_confirm() self.assertTrue( self.order.picking_ids, @@ -89,4 +97,5 @@ def test_03_sale_stock_delivery_partial(self): pick.button_validate() for line in pick.move_ids: line._action_done() - self.assertEqual(line.product_id.weekly_sold_delivered, "Sold delivered") + self.assertEqual(line.product_id.weekly_sold_delivered, "000001") + self.assertEqual(line.product_id.weekly_sold_delivered_shown, "◌◌◌◌◌●") diff --git a/project_task_note/i18n/it.po b/project_task_note/i18n/it.po new file mode 100644 index 0000000000..6d2fce2102 --- /dev/null +++ b/project_task_note/i18n/it.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_note +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-19 10:36+0000\n" +"Last-Translator: mymage \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: project_task_note +#: model:ir.model.fields,field_description:project_task_note.field_project_task__notes +msgid "Internal notes" +msgstr "Note interne" + +#. module: project_task_note +#: model:ir.model,name:project_task_note.model_project_task +msgid "Task" +msgstr "Lavoro" diff --git a/purchase_stock_picking_return_invoicing/i18n/it.po b/purchase_stock_picking_return_invoicing/i18n/it.po index d97553d193..ac3b5281af 100644 --- a/purchase_stock_picking_return_invoicing/i18n/it.po +++ b/purchase_stock_picking_return_invoicing/i18n/it.po @@ -9,31 +9,30 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-04-06 00:42+0000\n" -"PO-Revision-Date: 2023-02-01 11:48+0000\n" -"Last-Translator: Francesco Foresti \n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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.14.1\n" +"X-Generator: Weblate 4.17\n" #. module: purchase_stock_picking_return_invoicing #: model:ir.model.fields,field_description:purchase_stock_picking_return_invoicing.field_purchase_order__invoice_refund_count msgid "# of Invoice Refunds" -msgstr "" +msgstr "N° di rimborsi fattura" #. module: purchase_stock_picking_return_invoicing #: model_terms:ir.ui.view,arch_db:purchase_stock_picking_return_invoicing.purchase_order_view_form_inherit -#, fuzzy msgid "Create Refund" -msgstr "Rimborso" +msgstr "Crea rimborso" #. module: purchase_stock_picking_return_invoicing #: model:ir.model,name:purchase_stock_picking_return_invoicing.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Registrazione contabile" #. module: purchase_stock_picking_return_invoicing #: model:ir.model,name:purchase_stock_picking_return_invoicing.model_purchase_order @@ -48,7 +47,7 @@ msgstr "Riga ordine di acquisto" #. module: purchase_stock_picking_return_invoicing #: model:ir.model.fields,field_description:purchase_stock_picking_return_invoicing.field_purchase_order_line__qty_refunded msgid "Refunded Qty" -msgstr "" +msgstr "Q.tà rimborsata" #. module: purchase_stock_picking_return_invoicing #: model_terms:ir.ui.view,arch_db:purchase_stock_picking_return_invoicing.purchase_order_view_form_inherit @@ -58,12 +57,12 @@ msgstr "Rimborso" #. module: purchase_stock_picking_return_invoicing #: model:ir.model.fields,field_description:purchase_stock_picking_return_invoicing.field_purchase_order_line__qty_returned msgid "Returned* Qty" -msgstr "" +msgstr "Q.tà resa*" #. module: purchase_stock_picking_return_invoicing #: model_terms:ir.ui.view,arch_db:purchase_stock_picking_return_invoicing.view_invoice_supplier_purchase_form msgid "Select a purchase order or an old bill" -msgstr "" +msgstr "Selezionare un ordine di acquisto o una vecchia ricevuta" #. module: purchase_stock_picking_return_invoicing #. odoo-python @@ -73,11 +72,14 @@ msgid "" "There is no invoiceable line. If a product has a control policy based on " "received quantity, please make sure that a quantity has been received." msgstr "" +"Non c'è una riga fatturabile. Se un prodotto ha una politica di controllo " +"basata sulla quantità ricevuta, assicurarsi che una quantità sia stata " +"ricevuta." #. module: purchase_stock_picking_return_invoicing #: model:ir.model.fields,help:purchase_stock_picking_return_invoicing.field_purchase_order_line__qty_returned msgid "This is ONLY the returned quantity that is refundable." -msgstr "" +msgstr "Questa è SOLO la quantità resa che è rimborsabile." #~ msgid "Invoice" #~ msgstr "Fattura" diff --git a/queue_job/i18n/it.po b/queue_job/i18n/it.po index ac55d615a2..ad0adabd09 100644 --- a/queue_job/i18n/it.po +++ b/queue_job/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-02-16 18:36+0000\n" +"PO-Revision-Date: 2024-02-19 14:33+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -810,7 +810,7 @@ msgid "" "'Exception Information' section." msgstr "" "Qualcosa è andato male durante l'esecuzione del lavoro %s. Maggiori dettagli " -"nella sezione 'nfrmazioni eccezione'." +"nella sezione 'informazioni eccezione'." #. module: queue_job #: model:ir.model.fields,field_description:queue_job.field_queue_job__date_started @@ -885,13 +885,13 @@ msgstr "I lavori selezionati verranno impostati a completato." #. module: queue_job #: model_terms:ir.ui.view,arch_db:queue_job.view_queue_job_form msgid "Time (s)" -msgstr "Tempo" +msgstr "Ora (e)" #. module: queue_job #: model:ir.model.fields,help:queue_job.field_queue_job__exec_time msgid "Time required to execute this job in seconds. Average when grouped." msgstr "" -"Tempo in secondi richiesto per eseguire il lavoro. Medio qando raggruppati." +"Tempo in secondi richiesto per eseguire il lavoro. Medio quando raggruppati." #. module: queue_job #: model:ir.model.fields,help:queue_job.field_queue_job__activity_exception_decoration diff --git a/requirements.txt b/requirements.txt index 3e8bcf8e26..d53baf7a7d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,6 +7,7 @@ python-dateutil openupgradelib # generated from manifests external_dependencies Avalara +mock # generated from manifests external_dependencies python-stdnum>=1.16 # generated from manifests external_dependencies diff --git a/sale_automatic_workflow/i18n/nl_NL.po b/sale_automatic_workflow/i18n/nl_NL.po index 9a69c0c75d..f1ec23f77a 100644 --- a/sale_automatic_workflow/i18n/nl_NL.po +++ b/sale_automatic_workflow/i18n/nl_NL.po @@ -9,15 +9,16 @@ msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-02 10:22+0000\n" -"PO-Revision-Date: 2018-03-02 10:22+0000\n" -"Last-Translator: OCA Transbot , 2018\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" -"teams/23907/nl_NL/)\n" +"PO-Revision-Date: 2024-02-18 12:37+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/" +"23907/nl_NL/)\n" "Language: nl_NL\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: sale_automatic_workflow #: model:ir.model.fields,field_description:sale_automatic_workflow.field_sale_order__all_qty_delivered @@ -102,7 +103,7 @@ msgstr "Weergavenaam" #. module: sale_automatic_workflow #: model:ir.model.fields,field_description:sale_automatic_workflow.field_sale_workflow_process__payment_filter_domain msgid "Domain" -msgstr "" +msgstr "Domein" #. module: sale_automatic_workflow #: model:ir.model.fields,field_description:sale_automatic_workflow.field_sale_workflow_process__invoice_date_is_order_date diff --git a/sale_commission_product_criteria/README.rst b/sale_commission_product_criteria/README.rst new file mode 100644 index 0000000000..46954ac734 --- /dev/null +++ b/sale_commission_product_criteria/README.rst @@ -0,0 +1,116 @@ +================================ +Sale Commission Product Criteria +================================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:679118d6039b7893a5538b753c6809a13130884e390fb913b1a83cb29c0a0dd4 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fcommission-lightgray.png?logo=github + :target: https://github.com/OCA/commission/tree/16.0/sale_commission_product_criteria + :alt: OCA/commission +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/commission-16-0/commission-16-0-sale_commission_product_criteria + :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/commission&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to set in the same Commission Type different commission rates according to the product on SO/invoice line. + +This is made possible since this module adds a new "Product criteria" type to Commission Type and applies commission rates with the same logic of sale pricelist items. + +For example, such a Commission Type can grant: + +10% on a specific Product A, +10$ on Product B, +4% on products in Category 1 and +5$ on all other products. + +In SO/invoice, system will apply different commissions based on variant/product/category or global, applied hierarchically. This means that for the example above, if product A is assigned to Category 1, commission assigned is 10%, as per variant/product/category/global rule application order. + +Furthermore, these commission type items can be accessed and created by a specific menu, to facilitate their management in environments with lots of records. + +The form for commission type item can be extended by future modules with further conditions to decide when to apply a specific item. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use features of this module, you need to: + +#. Go to Commissions > Configuration > Commission Types. +#. Create a Commission Type with type = "Product criteria". +#. Create multiple rules based on variant/product/category or global +#. These rules will be sorted according to the same logic of sale pricelist. +#. Rest flow is according to OCA sale_commission module. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Ilyas +* Ooops404 + +Contributors +~~~~~~~~~~~~ + +* `Ooops404 `__: + + * Ilyas +* `Aion Tech `_: + + * Simone Rubino + +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-ilyasProgrammer| image:: https://github.com/ilyasProgrammer.png?size=40px + :target: https://github.com/ilyasProgrammer + :alt: ilyasProgrammer + +Current `maintainer `__: + +|maintainer-ilyasProgrammer| + +This module is part of the `OCA/commission `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_commission_product_criteria/__init__.py b/sale_commission_product_criteria/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/sale_commission_product_criteria/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_commission_product_criteria/__manifest__.py b/sale_commission_product_criteria/__manifest__.py new file mode 100644 index 0000000000..d8cc78bf66 --- /dev/null +++ b/sale_commission_product_criteria/__manifest__.py @@ -0,0 +1,22 @@ +# © 2023 ooops404 +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html +{ + "name": "Sale Commission Product Criteria", + "summary": "Advanced commissions rules", + "version": "16.0.1.0.0", + "author": "Ilyas, Ooops404, Odoo Community Association (OCA)", + "maintainers": ["ilyasProgrammer"], + "website": "https://github.com/OCA/commission", + "category": "Sales Management", + "license": "AGPL-3", + "depends": ["sale_commission"], + "data": [ + "views/views.xml", + "security/ir.model.access.csv", + ], + "demo": ["demo/sale_agent_demo.xml"], + "application": False, + "installable": True, + "auto_install": False, +} diff --git a/sale_commission_product_criteria/demo/sale_agent_demo.xml b/sale_commission_product_criteria/demo/sale_agent_demo.xml new file mode 100644 index 0000000000..caffc6e4a8 --- /dev/null +++ b/sale_commission_product_criteria/demo/sale_agent_demo.xml @@ -0,0 +1,69 @@ + + + + + + Based on Rules + product + + + + + + sol + 3_global + fixed + 10 + + + + + + sol + 2_product_category + fixed + 20 + + + + + + + sol + 1_product + percentage + 5 + + + + + + + sol + 0_product_variant + percentage + 15 + + + + + Agent Rules + True + True + + + + + + + + diff --git a/sale_commission_product_criteria/i18n/it.po b/sale_commission_product_criteria/i18n/it.po new file mode 100644 index 0000000000..68496f24e4 --- /dev/null +++ b/sale_commission_product_criteria/i18n/it.po @@ -0,0 +1,427 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_commission_product_criteria +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-05-24 12:10+0000\n" +"Last-Translator: Francesco Foresti \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: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__active +msgid "Active" +msgstr "Attivo" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_account_invoice_line_agent +msgid "Agent detail of commission line in invoice lines" +msgstr "Dettaglio riga provvigione agente nelle righe fattura" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_sale_order_line_agent +msgid "Agent detail of commission line in order lines" +msgstr "Dettaglio riga provvigione agente nelle righe ordine" + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__applied_on__3_global +#, python-format +msgid "All Products" +msgstr "Tutti i prodotti" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Amount (%)" +msgstr "Importo (%)" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Amount (fixed)" +msgstr "Importo (fisso)" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__based_on__sol +msgid "Any Sale Order Line" +msgstr "Qualsiasi riga ordine di vendita" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent__applied_commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission_line_mixin__applied_commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__applied_commission_id +msgid "Applied Commission" +msgstr "Provvigione applicata" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent__applied_commission_item_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__applied_commission_item_id +msgid "Applied Commission Item" +msgstr "Riga provvigione applicata" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Applied Disc. (%)" +msgstr "Sc. applicato (%)" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.sale_commission_form_lines_mod +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Applied On" +msgstr "Applicato a" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__applied_on +msgid "Apply On" +msgstr "Applica a" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__based_on +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__based_on +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Based On" +msgstr "Basato su" + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Category: %s" +msgstr "Categoria: %s" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent__commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission_line_mixin__commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__commission_id +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_search +msgid "Commission" +msgstr "Provvigione" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_form_view +msgid "Commission Computation" +msgstr "Calcolo provvigione" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_commission_item +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_form_view +msgid "Commission Item" +msgstr "Riga provvigione" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__applied_on +msgid "Commission Item applicable on selected option" +msgstr "Riga provvigione applicabile all'opzione selezionata" + +#. module: sale_commission_product_criteria +#: model:ir.actions.act_window,name:sale_commission_product_criteria.commission_item_action +#: model:ir.actions.act_window,name:sale_commission_product_criteria.commission_item_action_tree +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_search +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_tree_view +msgid "Commission Items" +msgstr "Righe provvigione" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__commission_type +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__commission_type +msgid "Commission Type" +msgstr "Tipo di provvigione" + +#. module: sale_commission_product_criteria +#: model:ir.ui.menu,name:sale_commission_product_criteria.menu_sale_commissions_items +msgid "Commission Type Items" +msgstr "Righe tipi di provvigione" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_sale_commission +msgid "Commission in sales" +msgstr "Provvigione nelle vendite" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__company_id +msgid "Company" +msgstr "Azienda" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_form_view +msgid "Compute Price" +msgstr "Calcola prezzo" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__discount +msgid "Discount (%)" +msgstr "Sconto (%)" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent__display_name +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__display_name +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission__display_name +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission_line_mixin__display_name +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission_settlement_line__display_name +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line__display_name +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__name +#: model:ir.model.fields,help:sale_commission_product_criteria.field_sale_order_line_agent__applied_on_name +msgid "Explicit rule name for this commission line." +msgstr "Nome esplicito regola per questa riga provvigione." + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Final Amount" +msgstr "Importo finale" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__commission_type__fixed +msgid "Fixed" +msgstr "Fisso" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__fixed_amount +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__fixed_amount +msgid "Fixed Amount" +msgstr "Importo fisso" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_search +msgid "Group By" +msgstr "Raggruppa per" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent__id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission__id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission_line_mixin__id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission_settlement_line__id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line__id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__id +msgid "ID" +msgstr "ID" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission__item_ids +msgid "Item" +msgstr "Riga" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.sale_commission_form_lines_mod +msgid "Items" +msgstr "Righe" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent____last_update +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item____last_update +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission____last_update +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission_line_mixin____last_update +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission_settlement_line____last_update +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line____last_update +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_sale_commission_settlement_line +msgid "Line of a commission settlement" +msgstr "Riga di regolazione provvigione" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_sale_commission_line_mixin +msgid "" +"Mixin model for having commission agent lines in any object inheriting from " +"this one" +msgstr "" +"Modello mixin per avere righe di provvigione agente in qualsiasi oggetto che " +"erediti dall'attuale" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__name +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__applied_on_name +msgid "Name" +msgstr "Nome" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__commission_type__percentage +msgid "Percentage" +msgstr "Percentuale" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__percent_amount +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__percent_amount +msgid "Percentage Amount" +msgstr "Importo percentuale" + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Please specify the category for which this rule should be applied" +msgstr "" +"Specifica la categoria per la quale questa regola deve essere applicata" + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Please specify the product for which this rule should be applied" +msgstr "Specifica il prodotto per la quale questa regola deve essere applicata" + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "" +"Please specify the product variant for which this rule should be applied" +msgstr "" +"Specifica la variante prodotto per la quale questa regola deve essere " +"applicata" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Price Type" +msgstr "Tipo prezzo" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__product_tmpl_id +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__applied_on__1_product +msgid "Product" +msgstr "Prodotto" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__categ_id +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__applied_on__2_product_category +msgid "Product Category" +msgstr "Categoria prodotto" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__product_id +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__applied_on__0_product_variant +msgid "Product Variant" +msgstr "Variante prodotto" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__sale_commission__commission_type__product +msgid "Product criteria" +msgstr "Criteri prodotto" + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Product: %s" +msgstr "Prodotto: %s" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.sale_commission_form_lines_mod +msgid "Rules" +msgstr "Regole" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_sale_order_line +msgid "Sales Order Line" +msgstr "Riga ordine di vendita" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__categ_id +msgid "" +"Specify a product category if this rule only applies to products belonging " +"to this category or its children categories. Keep empty otherwise." +msgstr "" +"Specifica una categoria prodotto se questa regola si applica solo ai " +"prodotti appartenenti a questa categoria o alle sue categorie figlie, " +"altrimenti lascia vuoto." + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__product_id +msgid "" +"Specify a product if this rule only applies to one product. Keep empty " +"otherwise." +msgstr "" +"Specifica un prodotto se questa regola si applica solo ad un prodotto, " +"altrimenti lascia vuoto." + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__product_tmpl_id +msgid "" +"Specify a template if this rule only applies to one product template. Keep " +"empty otherwise." +msgstr "" +"Specifica un modello prodotto se questa regola si applica solo ad un modello " +"prodotto, altrimenti lascia vuoto." + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "" +"There is done Sale Orders with this commission. Commission type change is " +"not allowed." +msgstr "" +"Esistono ordini di vendita che usano questo tipo di provvigione. Non è " +"possibile modificare il tipo." + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "" +"There is posted Account Move Lines with this commission. Commission type " +"change is not allowed." +msgstr "" +"Esistono righe fattura che usano questo tipo di provvigione. Non è possibile " +"modificare il tipo." + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_commission__commission_type +msgid "Type" +msgstr "Tipo" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__commission_value +msgid "Value" +msgstr "Valore" + +#. module: sale_commission_product_criteria +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Variant: %s" +msgstr "Variante: %s" + +#~ msgid "Pricelist" +#~ msgstr "Listino prezzi" + +#~ msgid "Use Pricelist" +#~ msgstr "Usa listino prezzi" diff --git a/sale_commission_product_criteria/i18n/sale_commission_product_criteria.pot b/sale_commission_product_criteria/i18n/sale_commission_product_criteria.pot new file mode 100644 index 0000000000..b636d0ac76 --- /dev/null +++ b/sale_commission_product_criteria/i18n/sale_commission_product_criteria.pot @@ -0,0 +1,396 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_commission_product_criteria +# +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: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__active +msgid "Active" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_account_invoice_line_agent +msgid "Agent detail of commission line in invoice lines" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_sale_order_line_agent +msgid "Agent detail of commission line in order lines" +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__applied_on__3_global +#, python-format +msgid "All Products" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Amount (%)" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Amount (fixed)" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__based_on__sol +msgid "Any Sale Order Line" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent__applied_commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_line_mixin__applied_commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__applied_commission_id +msgid "Applied Commission" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent__applied_commission_item_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__applied_commission_item_id +msgid "Applied Commission Item" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Applied Disc. (%)" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.sale_commission_form_lines_mod +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Applied On" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__applied_on +msgid "Apply On" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__based_on +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__based_on +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Based On" +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Category: %s" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_commission +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_account_invoice_line_agent__commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_line_mixin__commission_id +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__commission_id +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_search +msgid "Commission" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_form_view +msgid "Commission Computation" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_commission_item +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_form_view +msgid "Commission Item" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__applied_on +msgid "Commission Item applicable on selected option" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.actions.act_window,name:sale_commission_product_criteria.commission_item_action +#: model:ir.actions.act_window,name:sale_commission_product_criteria.commission_item_action_tree +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_search +msgid "Commission Items" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__commission_type +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__commission_type +msgid "Commission Type" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.ui.menu,name:sale_commission_product_criteria.menu_sale_commissions_items +msgid "Commission Type Items" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__company_id +msgid "Company" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_form_view +msgid "Compute Price" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__create_uid +msgid "Created by" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__create_date +msgid "Created on" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__currency_id +msgid "Currency" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__discount +msgid "Discount (%)" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__display_name +msgid "Display Name" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_order_agent_form_inherit_sale_commission_product_criteria_mod +msgid "Edit agents" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__name +#: model:ir.model.fields,help:sale_commission_product_criteria.field_sale_order_line_agent__applied_on_name +msgid "Explicit rule name for this commission line." +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Final Amount" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__commission_type__fixed +msgid "Fixed" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__fixed_amount +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__fixed_amount +msgid "Fixed Amount" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.commission_item_search +msgid "Group By" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__id +msgid "ID" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission__item_ids +msgid "Item" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item____last_update +msgid "Last Modified on" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__write_date +msgid "Last Updated on" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_commission_settlement_line +msgid "Line of a commission settlement" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_commission_line_mixin +msgid "" +"Mixin model for having commission agent lines in any object inheriting from " +"this one" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__name +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__applied_on_name +msgid "Name" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__commission_type__percentage +msgid "Percentage" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__percent_amount +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_sale_order_line_agent__percent_amount +msgid "Percentage Amount" +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Please specify the category for which this rule should be applied" +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Please specify the product for which this rule should be applied" +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "" +"Please specify the product variant for which this rule should be applied" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.view_sale_order_line_tree_mod +msgid "Price Type" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__product_tmpl_id +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__applied_on__1_product +msgid "Product" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__categ_id +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__applied_on__2_product_category +msgid "Product Category" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__product_id +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission_item__applied_on__0_product_variant +msgid "Product Variant" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields.selection,name:sale_commission_product_criteria.selection__commission__commission_type__product +msgid "Product criteria" +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Product: %s" +msgstr "" + +#. module: sale_commission_product_criteria +#: model_terms:ir.ui.view,arch_db:sale_commission_product_criteria.sale_commission_form_lines_mod +msgid "Rules" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model,name:sale_commission_product_criteria.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission__commission_type +msgid "" +"Select the percentage type of the commission:\n" +"* 'Fixed percentage': all commissions are computed with a fixed percentage. You can fill the percentage in the field \"Fixed percentage\".\n" +"* 'By sections': percentage varies depending amount intervals. You can fill intervals and percentages in the section \"Rate definition\"." +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__sequence +msgid "Sequence" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__categ_id +msgid "" +"Specify a product category if this rule only applies to products belonging " +"to this category or its children categories. Keep empty otherwise." +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__product_id +msgid "" +"Specify a product if this rule only applies to one product. Keep empty " +"otherwise." +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,help:sale_commission_product_criteria.field_commission_item__product_tmpl_id +msgid "" +"Specify a template if this rule only applies to one product template. Keep " +"empty otherwise." +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "" +"There is done Sale Orders with this commission. Commission type change is " +"not allowed." +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "" +"There is posted Account Move Lines with this commission. Commission type " +"change is not allowed." +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission__commission_type +msgid "Type" +msgstr "" + +#. module: sale_commission_product_criteria +#: model:ir.model.fields,field_description:sale_commission_product_criteria.field_commission_item__commission_value +msgid "Value" +msgstr "" + +#. module: sale_commission_product_criteria +#. odoo-python +#: code:addons/sale_commission_product_criteria/models/commission.py:0 +#, python-format +msgid "Variant: %s" +msgstr "" diff --git a/sale_commission_product_criteria/models/__init__.py b/sale_commission_product_criteria/models/__init__.py new file mode 100644 index 0000000000..b14568ddb4 --- /dev/null +++ b/sale_commission_product_criteria/models/__init__.py @@ -0,0 +1,5 @@ +from . import sale_commission_line_mixin +from . import commission +from . import sale +from . import account_move +from . import settlement diff --git a/sale_commission_product_criteria/models/account_move.py b/sale_commission_product_criteria/models/account_move.py new file mode 100644 index 0000000000..2b8cda490b --- /dev/null +++ b/sale_commission_product_criteria/models/account_move.py @@ -0,0 +1,30 @@ +# © 2023 ooops404 +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html +from odoo import api, fields, models + + +class AccountInvoiceLineAgent(models.Model): + _inherit = "account.invoice.line.agent" + + applied_commission_item_id = fields.Many2one("commission.item") + + @api.depends( + "object_id.price_subtotal", + "object_id.product_id.commission_free", + "commission_id", + ) + def _compute_amount(self): + res = None + for line in self: + if line.commission_id and line.commission_id.commission_type == "product": + inv_line = line.object_id + line.amount = line._get_single_commission_amount( + line.commission_id, + inv_line.price_subtotal, + inv_line.product_id, + inv_line.quantity, + ) + else: + res = super(AccountInvoiceLineAgent, line)._compute_amount() + return res diff --git a/sale_commission_product_criteria/models/commission.py b/sale_commission_product_criteria/models/commission.py new file mode 100644 index 0000000000..18a970f454 --- /dev/null +++ b/sale_commission_product_criteria/models/commission.py @@ -0,0 +1,266 @@ +# © 2023 ooops404 +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.tools import float_repr + + +class SaleCommission(models.Model): + _inherit = "commission" + + commission_type = fields.Selection( + selection_add=[("product", "Product criteria")], + ondelete={"product": "set default"}, + ) + item_ids = fields.One2many("commission.item", "commission_id", copy=True) + + def action_unarchive(self): + res = super().action_unarchive() + items = ( + self.env["commission.item"] + .with_context(active_test=False) + .search([("commission_id", "=", self.id)]) + ) + if items: + items.write({"active": True}) + return res + + @api.onchange("commission_type") + def onchange_commission_type(self): + # Prevent commission_type change in certain cases + self.check_type_change_allowed_sale() + self.check_type_change_allowed_moves() + + def check_type_change_allowed_sale(self): + sola_ids = self.env["sale.order.line.agent"].search( + [("commission_id", "=", self._origin.id)] + ) + done_so_ids = sola_ids.filtered(lambda x: x.object_id.state in ["done", "sale"]) + if done_so_ids: + raise ValidationError( + _( + "There is done Sale Orders with this commission. " + "Commission type change is not allowed." + ) + ) + + def check_type_change_allowed_moves(self): + aila_ids = self.env["account.invoice.line.agent"].search( + [("commission_id", "=", self._origin.id)] + ) + done_move_ids = aila_ids.filtered( + lambda x: x.object_id.parent_state == "posted" + ) + if done_move_ids: + raise ValidationError( + _( + "There is posted Account Move Lines with this commission. " + "Commission type change is not allowed." + ) + ) + + +class CommissionItem(models.Model): + _name = "commission.item" + _description = "Commission Item" + _order = "applied_on, based_on, categ_id desc, id desc" + + sequence = fields.Integer(default=10) + active = fields.Boolean(default=True) + commission_id = fields.Many2one( + "commission", + string="Commission", + domain=[("commission_type", "=", "product")], + required=True, + ) + product_tmpl_id = fields.Many2one( + "product.template", + "Product", + ondelete="cascade", + check_company=True, + help="Specify a template if this rule only applies to one " + "product template. Keep empty otherwise.", + ) + product_id = fields.Many2one( + "product.product", + "Product Variant", + ondelete="cascade", + check_company=True, + help="Specify a product if this rule only applies " + "to one product. Keep empty otherwise.", + ) + categ_id = fields.Many2one( + "product.category", + "Product Category", + ondelete="cascade", + help="Specify a product category if this rule only applies to " + "products belonging to this category or its children categories. " + "Keep empty otherwise.", + ) + based_on = fields.Selection( + [("sol", "Any Sale Order Line")], + required=True, + default="sol", + ) + applied_on = fields.Selection( + [ + ("3_global", "All Products"), + ("2_product_category", "Product Category"), + ("1_product", "Product"), + ("0_product_variant", "Product Variant"), + ], + "Apply On", + default="3_global", + required=True, + help="Commission Item applicable on selected option", + ) + commission_type = fields.Selection( + [("fixed", "Fixed"), ("percentage", "Percentage")], + index=True, + default="fixed", + required=True, + ) + fixed_amount = fields.Float(digits="Product Price") + percent_amount = fields.Float("Percentage Amount") + company_id = fields.Many2one( + "res.company", + "Company", + default=lambda self: self.env.company, + readonly=True, + ) + currency_id = fields.Many2one( + "res.currency", + related="company_id.currency_id", + readonly=True, + ) + name = fields.Char( + compute="_compute_commission_item_name_value", + help="Explicit rule name for this commission line.", + ) + commission_value = fields.Char( + "Value", + compute="_compute_commission_item_name_value", + ) + + @api.depends( + "applied_on", + "categ_id", + "product_tmpl_id", + "product_id", + "commission_type", + "fixed_amount", + "percent_amount", + ) + def _compute_commission_item_name_value(self): + for item in self: + if item.categ_id and item.applied_on == "2_product_category": + item.name = _("Category: %s") % (item.categ_id.display_name) + elif item.product_tmpl_id and item.applied_on == "1_product": + item.name = _("Product: %s") % (item.product_tmpl_id.display_name) + elif item.product_id and item.applied_on == "0_product_variant": + item.name = _("Variant: %s") % ( + item.product_id.with_context( + display_default_code=False + ).display_name + ) + else: + item.name = _("All Products") + + if item.commission_type == "fixed": + decimal_places = self.env["decimal.precision"].precision_get( + "Product Price" + ) + if item.currency_id.position == "after": + item.commission_value = "%s %s" % ( + float_repr( + item.fixed_amount, + decimal_places, + ), + item.currency_id.symbol or "", + ) + else: + item.commission_value = "%s %s" % ( + item.currency_id.symbol or "", + float_repr( + item.fixed_amount, + decimal_places, + ), + ) + elif item.commission_type == "percentage": + item.commission_value = str(item.percent_amount) + " %" + + @api.constrains("product_id", "product_tmpl_id", "categ_id") + def _check_product_consistency(self): + for item in self: + if item.applied_on == "2_product_category" and not item.categ_id: + raise ValidationError( + _( + "Please specify the category for which this rule should " + "be applied" + ) + ) + elif item.applied_on == "1_product" and not item.product_tmpl_id: + raise ValidationError( + _( + "Please specify the product for which this rule should " + "be applied" + ) + ) + elif item.applied_on == "0_product_variant" and not item.product_id: + raise ValidationError( + _( + "Please specify the product variant for " + "which this rule should be applied" + ) + ) + + @api.onchange("product_id") + def _onchange_product_id(self): + has_product_id = self.filtered("product_id") + for item in has_product_id: + item.product_tmpl_id = item.product_id.product_tmpl_id + if self.env.context.get("default_applied_on", False) == "1_product": + # If a product variant is specified, apply on variants instead + # Reset if product variant is removed + has_product_id.update({"applied_on": "0_product_variant"}) + (self - has_product_id).update({"applied_on": "1_product"}) + + @api.onchange("product_tmpl_id") + def _onchange_product_tmpl_id(self): + has_tmpl_id = self.filtered("product_tmpl_id") + for item in has_tmpl_id: + if ( + item.product_id + and item.product_id.product_tmpl_id != item.product_tmpl_id + ): + item.product_id = None + + @api.model_create_multi + def create(self, values_list): + new_values_list = [] + for values in values_list: + values = self.validate_values(values) + new_values_list.append(values) + return super(CommissionItem, self).create(new_values_list) + + def write(self, values): + values = self.validate_values(values) + res = super(CommissionItem, self).write(values) + return res + + def validate_values(self, values): + if values.get("applied_on", False): + # Ensure item consistency for later searches. + applied_on = values["applied_on"] + if applied_on == "3_global": + values.update( + dict(product_id=None, product_tmpl_id=None, categ_id=None) + ) + elif applied_on == "2_product_category": + values.update(dict(product_id=None, product_tmpl_id=None)) + elif applied_on == "1_product": + values.update(dict(product_id=None, categ_id=None)) + elif applied_on == "0_product_variant": + values.update(dict(categ_id=None)) + return values diff --git a/sale_commission_product_criteria/models/sale.py b/sale_commission_product_criteria/models/sale.py new file mode 100644 index 0000000000..b7018e5732 --- /dev/null +++ b/sale_commission_product_criteria/models/sale.py @@ -0,0 +1,55 @@ +# © 2023 ooops404 +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html +from odoo import api, fields, models + + +class SaleOrderLineAgent(models.Model): + _inherit = "sale.order.line.agent" + + discount = fields.Float(related="object_id.discount") + applied_commission_item_id = fields.Many2one("commission.item") + based_on = fields.Selection(related="applied_commission_item_id.based_on") + applied_on_name = fields.Char(related="applied_commission_item_id.name") + commission_type = fields.Selection( + related="applied_commission_item_id.commission_type" + ) + fixed_amount = fields.Float(related="applied_commission_item_id.fixed_amount") + percent_amount = fields.Float(related="applied_commission_item_id.percent_amount") + + @api.depends( + "object_id.price_subtotal", "object_id.product_id", "object_id.product_uom_qty" + ) + def _compute_amount(self): + res = None + for line in self: + if line.commission_id and line.commission_id.commission_type == "product": + order_line = line.object_id + line.amount = line._get_single_commission_amount( + line.commission_id, + order_line.price_subtotal, + order_line.product_id, + order_line.product_uom_qty, + ) + else: + res = super(SaleOrderLineAgent, line)._compute_amount() + return res + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + def _prepare_invoice_line(self, **optional_values): + vals = super()._prepare_invoice_line(**optional_values) + vals["agent_ids"] = [ + ( + 0, + 0, + { + "agent_id": x.agent_id.id, + "commission_id": x.commission_id.id, + }, + ) + for x in self.agent_ids + ] + return vals diff --git a/sale_commission_product_criteria/models/sale_commission_line_mixin.py b/sale_commission_product_criteria/models/sale_commission_line_mixin.py new file mode 100644 index 0000000000..29bf476db0 --- /dev/null +++ b/sale_commission_product_criteria/models/sale_commission_line_mixin.py @@ -0,0 +1,78 @@ +# © 2023 ooops404 +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html +from odoo import fields, models + + +class SaleCommissionLineMixin(models.AbstractModel): + _inherit = "commission.line.mixin" + + applied_commission_id = fields.Many2one("commission", readonly=True) + commission_id = fields.Many2one( + comodel_name="commission", + ondelete="restrict", + required=False, + compute="_compute_commission_id", + store=True, + readonly=False, + copy=True, + ) + + def _get_commission_items(self, commission, product): + # Method replaced + categ_ids = {} + categ = product.categ_id + while categ: + categ_ids[categ.id] = True + categ = categ.parent_id + categ_ids = list(categ_ids) + # Select all suitable items. Order by best match + # (priority is: all/cat/subcat/product/variant). + self.env.cr.execute( + """ + SELECT + item.id + FROM + commission_item AS item + LEFT JOIN product_category AS categ ON item.categ_id = categ.id + WHERE + (item.product_tmpl_id IS NULL OR item.product_tmpl_id = any(%s)) + AND (item.product_id IS NULL OR item.product_id = any(%s)) + AND (item.categ_id IS NULL OR item.categ_id = any(%s)) + AND (item.commission_id = %s) + AND (item.active = TRUE) + ORDER BY + item.applied_on, item.based_on, categ.complete_name desc + """, + ( + product.product_tmpl_id.ids, + product.ids, + categ_ids, + commission._origin.id, # Added this + ), + ) + item_ids = [x[0] for x in self.env.cr.fetchall()] + return item_ids + + def _get_single_commission_amount(self, commission, subtotal, product, quantity): + self.ensure_one() + item_ids = self._get_commission_items(commission, product) + if not item_ids: + return 0.0 + commission_item = self.env["commission.item"].browse(item_ids[0]) + if commission.amount_base_type == "net_amount": + # If subtotal (sale_price * quantity) is less than + # standard_price * quantity, it means that we are selling at + # lower price than we bought, so set amount_base to 0 + subtotal = max([0, subtotal - product.standard_price * quantity]) + self.applied_commission_item_id = commission_item + # if self.agent_id.use_multi_type_commissions: + self.applied_commission_id = commission_item.commission_id + if commission_item.commission_type == "fixed": + return commission_item.fixed_amount + elif commission_item.commission_type == "percentage": + return subtotal * (commission_item.percent_amount / 100.0) + + def _get_discount_value(self, commission_item): + # Will be overridden + return self.object_id.discount diff --git a/sale_commission_product_criteria/models/settlement.py b/sale_commission_product_criteria/models/settlement.py new file mode 100644 index 0000000000..a7a9f032f0 --- /dev/null +++ b/sale_commission_product_criteria/models/settlement.py @@ -0,0 +1,7 @@ +# © 2023 ooops404 +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html +from odoo import models + + +class SettlementLine(models.Model): + _inherit = "commission.settlement.line" diff --git a/sale_commission_product_criteria/readme/CONTRIBUTORS.rst b/sale_commission_product_criteria/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..898ef9dd21 --- /dev/null +++ b/sale_commission_product_criteria/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* `Ooops404 `__: + + * Ilyas +* `Aion Tech `_: + + * Simone Rubino diff --git a/sale_commission_product_criteria/readme/DESCRIPTION.rst b/sale_commission_product_criteria/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..c4a10d9e45 --- /dev/null +++ b/sale_commission_product_criteria/readme/DESCRIPTION.rst @@ -0,0 +1,16 @@ +This module allows to set in the same Commission Type different commission rates according to the product on SO/invoice line. + +This is made possible since this module adds a new "Product criteria" type to Commission Type and applies commission rates with the same logic of sale pricelist items. + +For example, such a Commission Type can grant: + +10% on a specific Product A, +10$ on Product B, +4% on products in Category 1 and +5$ on all other products. + +In SO/invoice, system will apply different commissions based on variant/product/category or global, applied hierarchically. This means that for the example above, if product A is assigned to Category 1, commission assigned is 10%, as per variant/product/category/global rule application order. + +Furthermore, these commission type items can be accessed and created by a specific menu, to facilitate their management in environments with lots of records. + +The form for commission type item can be extended by future modules with further conditions to decide when to apply a specific item. diff --git a/sale_commission_product_criteria/readme/USAGE.rst b/sale_commission_product_criteria/readme/USAGE.rst new file mode 100644 index 0000000000..bdd3fd9bd2 --- /dev/null +++ b/sale_commission_product_criteria/readme/USAGE.rst @@ -0,0 +1,7 @@ +To use features of this module, you need to: + +#. Go to Commissions > Configuration > Commission Types. +#. Create a Commission Type with type = "Product criteria". +#. Create multiple rules based on variant/product/category or global +#. These rules will be sorted according to the same logic of sale pricelist. +#. Rest flow is according to OCA sale_commission module. diff --git a/sale_commission_product_criteria/security/ir.model.access.csv b/sale_commission_product_criteria/security/ir.model.access.csv new file mode 100644 index 0000000000..0958b99047 --- /dev/null +++ b/sale_commission_product_criteria/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_commission_item_manager,access_commission_item_manager,model_commission_item,sales_team.group_sale_manager,1,1,1,1 +access_commission_item_salesman,access_commission_item_salesman,model_commission_item,sales_team.group_sale_salesman,1,0,0,0 diff --git a/sale_commission_product_criteria/static/description/icon.png b/sale_commission_product_criteria/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/sale_commission_product_criteria/static/description/index.html b/sale_commission_product_criteria/static/description/index.html new file mode 100644 index 0000000000..9e075efce2 --- /dev/null +++ b/sale_commission_product_criteria/static/description/index.html @@ -0,0 +1,451 @@ + + + + + +Sale Commission Product Criteria + + + +
    +

    Sale Commission Product Criteria

    + + +

    Beta License: AGPL-3 OCA/commission Translate me on Weblate Try me on Runboat

    +

    This module allows to set in the same Commission Type different commission rates according to the product on SO/invoice line.

    +

    This is made possible since this module adds a new “Product criteria” type to Commission Type and applies commission rates with the same logic of sale pricelist items.

    +

    For example, such a Commission Type can grant:

    +

    10% on a specific Product A, +10$ on Product B, +4% on products in Category 1 and +5$ on all other products.

    +

    In SO/invoice, system will apply different commissions based on variant/product/category or global, applied hierarchically. This means that for the example above, if product A is assigned to Category 1, commission assigned is 10%, as per variant/product/category/global rule application order.

    +

    Furthermore, these commission type items can be accessed and created by a specific menu, to facilitate their management in environments with lots of records.

    +

    The form for commission type item can be extended by future modules with further conditions to decide when to apply a specific item.

    +

    Table of contents

    + +
    +

    Usage

    +

    To use features of this module, you need to:

    +
      +
    1. Go to Commissions > Configuration > Commission Types.
    2. +
    3. Create a Commission Type with type = “Product criteria”.
    4. +
    5. Create multiple rules based on variant/product/category or global
    6. +
    7. These rules will be sorted according to the same logic of sale pricelist.
    8. +
    9. Rest flow is according to OCA sale_commission module.
    10. +
    +
    +
    +

    Bug Tracker

    +

    Bugs are tracked on GitHub 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.

    +

    Do not contact contributors directly about support or help with technical issues.

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Ilyas
    • +
    • Ooops404
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

    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.

    +

    Current maintainer:

    +

    ilyasProgrammer

    +

    This module is part of the OCA/commission project on GitHub.

    +

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    +
    +
    +
    + + diff --git a/sale_commission_product_criteria/tests/__init__.py b/sale_commission_product_criteria/tests/__init__.py new file mode 100644 index 0000000000..9a20f675a6 --- /dev/null +++ b/sale_commission_product_criteria/tests/__init__.py @@ -0,0 +1 @@ +from . import test_sale_commission_product_criteria diff --git a/sale_commission_product_criteria/tests/test_sale_commission_product_criteria.py b/sale_commission_product_criteria/tests/test_sale_commission_product_criteria.py new file mode 100644 index 0000000000..cf9bda14ff --- /dev/null +++ b/sale_commission_product_criteria/tests/test_sale_commission_product_criteria.py @@ -0,0 +1,204 @@ +# © 2023 ooops404 +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html + + +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +class TestSaleCommission(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.commission_model = cls.env["commission"] + cls.company = cls.env.ref("base.main_company") + cls.res_partner_model = cls.env["res.partner"] + cls.partner = cls.env.ref("base.res_partner_12") + cls.partner2 = cls.env.ref("base.res_partner_10") + cls.sale_order_model = cls.env["sale.order"] + cls.advance_inv_model = cls.env["sale.advance.payment.inv"] + cls.settle_model = cls.env["commission.settlement"] + cls.make_settle_model = cls.env["commission.make.settle"] + cls.make_inv_model = cls.env["commission.make.invoice"] + cls.product_1 = cls.env.ref("product.product_product_1") + cls.product_4 = cls.env.ref("product.product_product_4") + cls.product_5 = cls.env.ref("product.product_product_5") + cls.product_6 = cls.env.ref("product.product_product_6") + cls.product_1.write({"invoice_policy": "order"}) + cls.product_4.write({"invoice_policy": "order"}) + cls.product_5.write({"invoice_policy": "order"}) + cls.product_6.write({"commission_free": True}) + cls.product_template_4 = cls.env.ref( + "product.product_product_4_product_template" + ) + cls.product_template_4.write({"invoice_policy": "order"}) + cls.journal = cls.env["account.journal"].search( + [("type", "=", "purchase")], limit=1 + ) + cls.rules_commission_id = cls.env.ref( + "sale_commission_product_criteria.demo_commission_rules" + ) + cls.com_item_1 = cls.env.ref( + "sale_commission_product_criteria.demo_commission_rules_item_1" + ) + cls.com_item_2 = cls.env.ref( + "sale_commission_product_criteria.demo_commission_rules_item_2" + ) + cls.com_item_3 = cls.env.ref( + "sale_commission_product_criteria.demo_commission_rules_item_3" + ) + cls.com_item_4 = cls.env.ref( + "sale_commission_product_criteria.demo_commission_rules_item_4" + ) + + def test_sale_commission_product_criteria_items(self): + # items names + self.com_item_1._compute_commission_item_name_value() + self.com_item_1.currency_id.position = "after" + self.com_item_1._compute_commission_item_name_value() + self.assertEqual(self.com_item_1.name, "All Products") + self.com_item_1.write({"applied_on": "3_global"}) + self.com_item_2._compute_commission_item_name_value() + self.assertEqual( + self.com_item_2.name, "Category: All / Saleable / Office Furniture" + ) + self.com_item_2.write({"applied_on": "2_product_category"}) + self.com_item_3._compute_commission_item_name_value() + self.assertEqual(self.com_item_3.name, "Product: Customizable Desk") + self.com_item_3.write({"applied_on": "1_product"}) + self.com_item_4._compute_commission_item_name_value() + self.assertEqual( + self.com_item_4.name, "Variant: Customizable Desk (Steel, White)" + ) + self.com_item_4.write({"applied_on": "0_product_variant"}) + + # 3_global + so_1 = self._create_sale_order(self.product_1, self.partner) + so_1.recompute_lines_agents() + self.assertEqual(so_1.partner_agent_ids.name, "Agent Rules") + self.assertEqual(so_1.order_line.agent_ids.amount, 10) + so_1.action_confirm() + invoice = self._invoice_sale_order(so_1) + invoice.recompute_lines_agents() + invoice.action_post() + + # 2_product_category + so = self._create_sale_order(self.product_5, self.partner) + so.recompute_lines_agents() + self.assertEqual(so.partner_agent_ids.name, "Agent Rules") + self.assertEqual(so.order_line.agent_ids.amount, 20) + so.action_confirm() + invoice = self._invoice_sale_order(so) + invoice.recompute_lines_agents() + + # 1_product 5 % + pp4 = self.product_template_4.product_variant_id + so = self._create_sale_order(pp4, self.partner) + so.recompute_lines_agents() + self.assertEqual(so.partner_agent_ids.name, "Agent Rules") + self.assertEqual(so.order_line.agent_ids.amount, 50) + so.action_confirm() + invoice = self._invoice_sale_order(so) + invoice.recompute_lines_agents() + + # 0_product_variant 15 % + so = self._create_sale_order(self.product_4, self.partner) + so.recompute_lines_agents() + self.assertEqual(so.partner_agent_ids.name, "Agent Rules") + self.assertEqual(so.order_line.agent_ids.amount, 150) + so.action_confirm() + invoice = self._invoice_sale_order(so) + invoice.recompute_lines_agents() + + # Commission free product + so = self._create_sale_order(self.product_6, self.partner) + so.recompute_lines_agents() + + # Type != product + so = self._create_sale_order(self.product_4, self.partner2) + so.recompute_lines_agents() + + # net amount + self.rules_commission_id.amount_base_type = "net_amount" + so = self._create_sale_order(self.product_4, self.partner) + so.order_line.agent_ids._compute_amount() + + # archive + self.rules_commission_id.action_archive() + self.rules_commission_id.action_unarchive() + + # copy + new_rule = self.rules_commission_id.copy() + self.assertEqual(len(new_rule.item_ids), len(self.rules_commission_id.item_ids)) + + # change commission_type + self.rules_commission_id.commission_type = "fixed" + with self.assertRaises(ValidationError): + self.rules_commission_id.check_type_change_allowed_moves() + with self.assertRaises(ValidationError): + self.rules_commission_id.check_type_change_allowed_sale() + + # no rule found + self.env.ref( + "sale_commission_product_criteria.demo_commission_rules_item_1" + ).unlink() + so = self._create_sale_order(self.product_1, self.partner) + so.order_line.agent_ids._compute_amount() + + # _check_product_consistency + with self.assertRaises(ValidationError): + self.com_item_2.categ_id = False + with self.assertRaises(ValidationError): + self.com_item_3.product_tmpl_id = False + with self.assertRaises(ValidationError): + self.com_item_4.product_id = False + + # _onchange_product_id + self.com_item_4.product_id = self.product_1 + self.com_item_4._onchange_product_id() + self.com_item_4.with_context( + default_applied_on="1_product" + )._onchange_product_id() + self.com_item_4.product_tmpl_id = self.product_template_4 + self.com_item_4._onchange_product_id() + self.com_item_4.product_tmpl_id = self.product_template_4 + with self.assertRaises(ValidationError): + self.com_item_4._onchange_product_tmpl_id() + + def _create_sale_order(self, product, partner): + return self.sale_order_model.create( + { + "partner_id": partner.id, + "order_line": [ + ( + 0, + 0, + { + "name": product.name, + "product_id": product.id, + "product_uom_qty": 1.0, + "product_uom": product.uom_id.id, + "price_unit": 1000, + }, + ) + ], + } + ) + + def _invoice_sale_order(self, sale_order, date=None): + old_invoices = sale_order.invoice_ids + wizard = self.advance_inv_model.with_context( + **{ + "active_model": "sale.order", + "active_ids": [sale_order.id], + "active_id": sale_order.id, + } + ).create( + { + "advance_payment_method": "delivered", + } + ) + wizard.create_invoices() + invoice = sale_order.invoice_ids - old_invoices + return invoice diff --git a/sale_commission_product_criteria/views/views.xml b/sale_commission_product_criteria/views/views.xml new file mode 100644 index 0000000000..dc555fd830 --- /dev/null +++ b/sale_commission_product_criteria/views/views.xml @@ -0,0 +1,239 @@ + + + + + + sale.agent.order.inherit.form.sale_commission_product_criteria.mod + sale.order + + + + + + + + + commission.form.view.inherit + commission + + + + {'invisible': [('commission_type', '=', 'product')]} + + + + + + + + + + + + + + + + + + sale.order.line.agent.mod + sale.order.line.agent + + + + + 1 + + + + + + + + + + + + + + + + + + + commission.item.form + commission.item + +
    + +

    + +

    + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + commission.item.tree + commission.item + + + + + + + + + + + + + commission.item.search.view + commission.item + + + + + + + + + + + + + + + Commission Items + ir.actions.act_window + commission.item + tree,form + + {"hide_commission_id":1, 'search_default_group_by_commission': 1,} + + + + + Commission Items + ir.actions.act_window + commission.item + tree,form + + {"hide_commission_id":0, 'search_default_group_by_commission': 1,} + + + + + +
    diff --git a/sale_packaging_default/README.rst b/sale_packaging_default/README.rst index c532f4f7cb..eddaf937f1 100644 --- a/sale_packaging_default/README.rst +++ b/sale_packaging_default/README.rst @@ -7,7 +7,7 @@ Default packaging for sales !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:075fa58ad523dc03dc17c8a71974a3498b39458c6b52e55528dcbfe7ddc169fa + !! source digest: sha256:252a9f34dca92717a32ec9c68f098e841adb2d9533aecf462ace8e2a2262efc2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/sale_packaging_default/__manifest__.py b/sale_packaging_default/__manifest__.py index 612dbf7c58..428ebf1ce5 100644 --- a/sale_packaging_default/__manifest__.py +++ b/sale_packaging_default/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Default packaging for sales", - "version": "16.0.2.0.0", + "version": "16.0.2.1.0", "summary": "Simplify using products default packaging for sales", "development_status": "Alpha", "category": "Sales", diff --git a/sale_packaging_default/models/sale_order_line.py b/sale_packaging_default/models/sale_order_line.py index e2f6cc3808..63f6392c7a 100644 --- a/sale_packaging_default/models/sale_order_line.py +++ b/sale_packaging_default/models/sale_order_line.py @@ -2,7 +2,7 @@ # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) from contextlib import suppress -from odoo import api, models +from odoo import api, fields, models class SaleOrderLine(models.Model): @@ -24,11 +24,7 @@ def _compute_product_packaging_id(self): """Set a default packaging for sales if possible.""" for line in self: if line.product_id and not line.product_packaging_id: - line.product_packaging_id = ( - line.product_id.packaging_ids.filtered_domain( - [("sales", "=", True)] - )[:1] - ) + line.product_packaging_id = line._get_default_packaging(line.product_id) result = super()._compute_product_packaging_id() # If there's no way to package the desired qty, remove the packaging. # It is only done when the user is currently manually setting @@ -49,6 +45,12 @@ def _compute_product_packaging_id(self): line.product_packaging_id = False return result + @api.model + def _get_default_packaging(self, product): + return fields.first( + product.packaging_ids.filtered_domain([("sales", "=", True)]) + ) + @api.depends("product_packaging_id", "product_uom", "product_uom_qty") def _compute_product_packaging_qty(self): """Set a valid packaging quantity.""" diff --git a/sale_packaging_default/static/description/index.html b/sale_packaging_default/static/description/index.html index eb38bdb67a..5129a43e51 100644 --- a/sale_packaging_default/static/description/index.html +++ b/sale_packaging_default/static/description/index.html @@ -366,7 +366,7 @@

    Default packaging for sales

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:075fa58ad523dc03dc17c8a71974a3498b39458c6b52e55528dcbfe7ddc169fa +!! source digest: sha256:252a9f34dca92717a32ec9c68f098e841adb2d9533aecf462ace8e2a2262efc2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Alpha License: LGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

    This module simplifies and emphasizes the usage of packaging in sales diff --git a/sale_timesheet_invoice_description/i18n/it.po b/sale_timesheet_invoice_description/i18n/it.po index 6aea135413..1d6b56776b 100644 --- a/sale_timesheet_invoice_description/i18n/it.po +++ b/sale_timesheet_invoice_description/i18n/it.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-20 03:39+0000\n" -"PO-Revision-Date: 2023-11-02 17:40+0000\n" -"Last-Translator: Francesco Foresti \n" +"PO-Revision-Date: 2024-02-21 17:33+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "Language: it\n" "MIME-Version: 1.0\n" @@ -46,7 +46,7 @@ msgstr "Data - tempo impiegato - descrizione" #. module: sale_timesheet_invoice_description #: model_terms:ir.ui.view,arch_db:sale_timesheet_invoice_description.view_sales_config_inherit_timesheet_invoice_description msgid "Default timesheet details on invoice lines" -msgstr "" +msgstr "Dettagli predefiniti ore lavorate sulle righe fattura" #. module: sale_timesheet_invoice_description #. odoo-python @@ -96,7 +96,7 @@ msgstr "Riga ordine di vendita" #: model:ir.model.fields,field_description:sale_timesheet_invoice_description.field_account_move_line__timesheet_invoice_split #: model:ir.model.fields,field_description:sale_timesheet_invoice_description.field_sale_order__timesheet_invoice_split msgid "Split Order lines by timesheets" -msgstr "" +msgstr "Dividi righe ordine per foglio ore" #. module: sale_timesheet_invoice_description #. odoo-python @@ -110,7 +110,7 @@ msgstr "Tempo impiegato - descrizione" #: model:ir.model.fields,field_description:sale_timesheet_invoice_description.field_res_config_settings__default_timesheet_invoice_description #: model:ir.model.fields,field_description:sale_timesheet_invoice_description.field_sale_order__timesheet_invoice_description msgid "Timesheet Invoice Description" -msgstr "" +msgstr "Descrizione foglio ore fattura" #. module: sale_timesheet_invoice_description #: model:ir.model.fields,field_description:sale_timesheet_invoice_description.field_account_move_line__timesheet_ids diff --git a/stock_picking_batch_print_invoices/README.rst b/stock_picking_batch_print_invoices/README.rst index 2560c536e0..fac284c323 100644 --- a/stock_picking_batch_print_invoices/README.rst +++ b/stock_picking_batch_print_invoices/README.rst @@ -7,7 +7,7 @@ Stock Picking Batch Print Invoices !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:484bb7b478a22a1dd4eb8b40fb5ae4088f3c3c51ae5c4fe0e3af108dff5b598c + !! source digest: sha256:d10169e49bfb9e5859100dfeeab5416c896d730c0db1f0aab7a20edf52ea9591 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/stock_picking_batch_print_invoices/__manifest__.py b/stock_picking_batch_print_invoices/__manifest__.py index ee85264b37..e1dcf6514e 100644 --- a/stock_picking_batch_print_invoices/__manifest__.py +++ b/stock_picking_batch_print_invoices/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Stock Picking Batch Print Invoices", "summary": "Print invoices from stock picking batchs", - "version": "16.0.1.0.1", + "version": "16.0.1.0.2", "development_status": "Alpha", "category": "Inventory/Inventory", "website": "https://github.com/OCA/stock-logistics-workflow", diff --git a/stock_picking_batch_print_invoices/static/description/index.html b/stock_picking_batch_print_invoices/static/description/index.html index 3d681708a2..ca6bc2b9b4 100644 --- a/stock_picking_batch_print_invoices/static/description/index.html +++ b/stock_picking_batch_print_invoices/static/description/index.html @@ -366,7 +366,7 @@

    Stock Picking Batch Print Invoices

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:484bb7b478a22a1dd4eb8b40fb5ae4088f3c3c51ae5c4fe0e3af108dff5b598c +!! source digest: sha256:d10169e49bfb9e5859100dfeeab5416c896d730c0db1f0aab7a20edf52ea9591 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Alpha License: LGPL-3 OCA/stock-logistics-workflow Translate me on Weblate Try me on Runboat

    This module extends the functionality of stock batch pickings and to diff --git a/stock_picking_batch_print_invoices/views/report_picking_batch_print_invoices.xml b/stock_picking_batch_print_invoices/views/report_picking_batch_print_invoices.xml index e5b450ed3e..c0c047a7c6 100644 --- a/stock_picking_batch_print_invoices/views/report_picking_batch_print_invoices.xml +++ b/stock_picking_batch_print_invoices/views/report_picking_batch_print_invoices.xml @@ -9,7 +9,7 @@ Configuration > Subscription templates*. +#. Create the templates you consider, choosing the billing frequency: daily, monthly... and the method of creating the invoice and/or order. +#. Go to *Subscription > Subscriptions*. +#. Create a subscription and indicate the start date. When the *Subscriptions Management* cron job is executed, the subscription will begin and the first invoice will be created if the execution date matches the start date. The invoice will also be created when the execution date matches the next invoice date. Additionally, you can manually change the subscription status and create an invoice by using the *Create Invoice* button. This action creates just an invoice even if the subscription template has the *Sale Order & Invoice* option selected, because the *Invoicing mode* option is triggered through the cron job. +#. The cron job will also end the subscription if its end date has been reached. + +To create subscriptions with the sale of a product: + +#. Go to *Subscriptions > Subscriptions > Products*. +#. Create the product and in the sales tab, complete the fields *Subscribable product* and *Subscription template* +#. Create a sales order with the product and confirm it. + +Known issues / Roadmap +====================== + +* Refactor all the onchanges that have business logic to computed write-able fields when possible. Keep onchanges only for UI purposes. +* Add tests. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Domatix + +Contributors +~~~~~~~~~~~~ + +* Carlos Martínez +* Carolina Ferrer + + +* `Ooops404 `__: + + * Ilyas + +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/contract `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/subscription_oca/__init__.py b/subscription_oca/__init__.py new file mode 100644 index 0000000000..9b4296142f --- /dev/null +++ b/subscription_oca/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizard diff --git a/subscription_oca/__manifest__.py b/subscription_oca/__manifest__.py new file mode 100644 index 0000000000..fa4400f482 --- /dev/null +++ b/subscription_oca/__manifest__.py @@ -0,0 +1,28 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Subscription management", + "summary": "Generate recurring invoices.", + "version": "16.0.1.0.0", + "development_status": "Beta", + "category": "Subscription Management", + "website": "https://github.com/OCA/contract", + "license": "AGPL-3", + "author": "Domatix, Odoo Community Association (OCA)", + "depends": ["sale_management", "account"], + "data": [ + "views/product_template_views.xml", + "views/sale_subscription_views.xml", + "views/sale_subscription_stage_views.xml", + "views/sale_subscription_tag_views.xml", + "views/sale_subscription_template_views.xml", + "views/sale_order_views.xml", + "views/res_partner_views.xml", + "data/ir_cron.xml", + "data/sale_subscription_data.xml", + "wizard/close_subscription_wizard.xml", + "security/ir.model.access.csv", + ], + "installable": True, + "application": True, +} diff --git a/subscription_oca/data/ir_cron.xml b/subscription_oca/data/ir_cron.xml new file mode 100644 index 0000000000..fbc7f7c888 --- /dev/null +++ b/subscription_oca/data/ir_cron.xml @@ -0,0 +1,15 @@ + + + + Subscriptions management + + + 24 + hours + -1 + + + code + model.cron_subscription_management() + + diff --git a/subscription_oca/data/sale_subscription_data.xml b/subscription_oca/data/sale_subscription_data.xml new file mode 100644 index 0000000000..6ee56a620e --- /dev/null +++ b/subscription_oca/data/sale_subscription_data.xml @@ -0,0 +1,76 @@ + + + + + + sale_subscription_sequencer + sale.subscription + SUB + 5 + + + + + + + Ready to start + 0 + pre + + Draft equivalent, a subscription is ready to start when is not marked as in progress but it can be at any moment. If there's no 'Closed'-type stage defined, when a subscription comes to an end by automatic means, it will be marked with this stage. + + + + + + + In progress + 1 + in_progress + + + As an 'In progress'-type of stage, it will trigger the recurring invoicing process if applicable. If this stage is the first - sequence order - of the available 'In progress' types and there's a stage change from any other non-'In progress' types to this one, an invoice will be created automatically if the start date is the present day. + + + + + + Closed + 2 + post + + + The final stage of a subscription. There are two ways to mark a subscription as closed. The easiest one is using the kanban card-moving capabilities, pressing the 'Close subscription' button (only available if a subscription is in progress). + + + + + + + + + The subscription is too expensive + + + + + Subscription does not meet my requirements + + + + + The subscription ended + + + + + I don't really use it + + + + + Other + + + + diff --git a/subscription_oca/i18n/es.po b/subscription_oca/i18n/es.po new file mode 100644 index 0000000000..73e16b048c --- /dev/null +++ b/subscription_oca/i18n/es.po @@ -0,0 +1,1018 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * subscription_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-29 17:39+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\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: subscription_oca +#: model:sale.subscription.stage,description:subscription_oca.subscription_stage_in_progress +msgid "" +"\n" +" As an 'In progress'-type of stage, it will trigger the recurring invoicing process if applicable. If this stage is the first - sequence order - of the available 'In progress' types and there's a stage change from any other non-'In progress' types to this one, an invoice will be created automatically if the start date is the present day.\n" +" " +msgstr "" +"\n" +" Como etapa de tipo \"En curso\", activará el proceso de facturación " +"periódica si procede. Si esta etapa es la primera -en orden secuencial- de " +"los tipos \"En curso\" disponibles y se produce un cambio de etapa de " +"cualquier otro tipo que no sea \"En curso\" a éste, se creará " +"automáticamente una factura si la fecha de inicio es el día actual.\n" +" " + +#. module: subscription_oca +#: model:sale.subscription.stage,description:subscription_oca.subscription_stage_draft +msgid "" +"\n" +" Draft equivalent, a subscription is ready to start when is not marked as in progress but it can be at any moment. If there's no 'Closed'-type stage defined, when a subscription comes to an end by automatic means, it will be marked with this stage.\n" +" " +msgstr "" +"\n" +" Equivalente a borrador, una suscripción está lista para comenzar " +"cuando no está marcada como en curso pero puede estarlo en cualquier " +"momento. Si no hay definida ninguna etapa de tipo 'Cerrada', cuando una " +"suscripción llegue a su fin por medios automáticos, se marcará con esta " +"etapa.\n" +" " + +#. module: subscription_oca +#: model:sale.subscription.stage,description:subscription_oca.subscription_stage_closed +msgid "" +"\n" +" The final stage of a subscription. There are two ways to mark a subscription as closed. The easiest one is using the kanban card-moving capabilities, pressing the 'Close subscription' button (only available if a subscription is in progress).\n" +" " +msgstr "" +"\n" +" La etapa final de una suscripción. Hay dos formas de marcar una " +"suscripción como cerrada. La más sencilla es utilizar las funciones de " +"movimiento de tarjetas Kanban, pulsando el botón \"Cerrar suscripción\" (" +"sólo disponible si una suscripción está en curso).\n" +" " + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Every" +msgstr "Cada" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "For" +msgstr "Para" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.res_partner_view_form +msgid "Subscriptions" +msgstr "Suscripciones" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "" +"A given subscription can be marked as closed when, for example, renewal is " +"not desired." +msgstr "" +"Una suscripción determinada puede marcarse como cerrada cuando, por ejemplo, " +"no se desea renovarla." + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_needaction +msgid "Action Needed" +msgstr "Necesita Acción" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__active +msgid "Active" +msgstr "Activo" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_ids +msgid "Activities" +msgstr "Actividades" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decoración de Excepción de la Actividad" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_state +msgid "Activity State" +msgstr "Estado de la Actividad" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_type_icon +msgid "Activity Type Icon" +msgstr "Tipo de Icono de Actividad" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_subscription_stage_form +msgid "Add new description..." +msgstr "Añadir nueva descripción..." + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__amount_tax +msgid "Amount Tax" +msgstr "Importe del Impuesto" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__amount_total +msgid "Amount Total" +msgstr "Importe Total" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_attachment_count +msgid "Attachment Count" +msgstr "Recuento de Archivos Adjuntos" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__recurring_rule_boundary +msgid "Boundary" +msgstr "Límite" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.close_reason_wizard_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: subscription_oca +#: model_terms:ir.actions.act_window,help:subscription_oca.subscription_stage_action +msgid "Click to create a new subscription stage." +msgstr "Haga clic para crear una nueva etapa de suscripción." + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__close_reason_id +msgid "Close Reason" +msgstr "Razón de Cierre" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.close_reason_wizard_act_window +#: model_terms:ir.ui.view,arch_db:subscription_oca.close_reason_wizard_view +msgid "Close reason" +msgstr "Motivo de cierre" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription_close_reason +msgid "Close reason model" +msgstr "Cerrar modelo de razón" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_close_reason_wizard +msgid "Close reason wizard" +msgstr "Cerrar el asistente de razones" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.subscription_close_reason_action +#: model:ir.ui.menu,name:subscription_oca.subscription_close_reason_menu +msgid "Close reasons" +msgstr "Razón de Cierre" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Close subscription" +msgstr "Cerrar suscripción" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_stage__type__post +#: model:sale.subscription.stage,name:subscription_oca.subscription_stage_closed +msgid "Closed" +msgstr "Cerrado" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__code +msgid "Code" +msgstr "Código" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__color +msgid "Color Index" +msgstr "Índice de Color" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__user_id +msgid "Commercial agent" +msgstr "Agente comercial" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__company_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__company_id +msgid "Company" +msgstr "Compañía" + +#. module: subscription_oca +#: model:ir.ui.menu,name:subscription_oca.sale_subscription_configuration_menu +msgid "Configuration" +msgstr "Configuración" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.close_reason_wizard_view +msgid "Confirm" +msgstr "Confirmar" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Create Invoice" +msgstr "Crear Factura" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: subscription_oca +#: code:addons/subscription_oca/models/sale_subscription.py:0 +#, python-format +msgid "Created invoice with reference" +msgstr "Factura creada con referencia" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__currency_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__currency_id +msgid "Currency" +msgstr "Divisa" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_type__days +msgid "Day(s)" +msgstr "Día(s)" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_kanban +msgid "Delete" +msgstr "Borrar" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__description +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__description +msgid "Description" +msgstr "Descripción" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__discount +msgid "Discount (%)" +msgstr "(%) Descuento" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__display_name +msgid "Display name" +msgstr "Mostrar nombre" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__invoicing_mode__draft +msgid "Draft" +msgstr "Borrador" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__recurring_rule_boundary +msgid "Duration" +msgstr "Duración" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_kanban +msgid "Edit" +msgstr "Editar" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__stage_str +msgid "Etapa" +msgstr "Etapa" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__date +msgid "Finish date" +msgstr "Fecha de fin" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__fiscal_position_id +msgid "Fiscal Position" +msgstr "Posición Fiscal" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_boundary__limited +msgid "Fixed" +msgstr "Fijado" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_follower_ids +msgid "Followers" +msgstr "Seguidores" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores/as (Empresas)" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icono de fuente impresionante, por ejemplo fa-tasks" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_boundary__unlimited +msgid "Forever" +msgstr "Para Siempre" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__has_message +msgid "Has Message" +msgstr "Tiene Mensaje" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_exception_icon +msgid "Icon" +msgstr "Icono" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icono para indicar la excepción de la actividad." + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_needaction +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_unread +msgid "If checked, new messages require your attention." +msgstr "Si está marcada, nuevos mensajes requieren tu atención." + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Si está marcada, algunos mensajes tienen error de entrega." + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__image +msgid "Image" +msgstr "Imagen" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__in_progress +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__in_progress +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_stage__type__in_progress +#: model:sale.subscription.stage,name:subscription_oca.subscription_stage_in_progress +msgid "In progress" +msgstr "En progreso" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__invoicing_mode__invoice +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Invoice" +msgstr "Factura" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__invoicing_mode__invoice_send +msgid "Invoice & send" +msgstr "Facturar y enviar" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__account_invoice_ids_count +msgid "Invoice Count" +msgstr "Conteo de Facturas" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__invoice_mail_template_id +msgid "Invoice Email" +msgstr "Correo Electrónico de Facturación" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__invoice_ids +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Invoices" +msgstr "Facturas" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Invoicing" +msgstr "Facturación" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__invoicing_mode +msgid "Invoicing mode" +msgstr "Modo de facturación" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_is_follower +msgid "Is Follower" +msgstr "Es Seguidor/a" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__journal_id +msgid "Journal" +msgstr "Dario" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_account_move +msgid "Journal Entry" +msgstr "Entrada Diaria" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__fold +msgid "Kanban folded" +msgstr "Kanban plegado" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__write_uid +msgid "Last Updated by" +msgstr "Última Actualización por" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__write_date +msgid "Last Updated on" +msgstr "Ultima Actualización el" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_main_attachment_id +msgid "Main Attachment" +msgstr "Adjunto Principal" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_kanban +msgid "Menú desplegable" +msgstr "Menú desplegable" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_has_error +msgid "Message Delivery error" +msgstr "Error en Entrega del Mensaje" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_ids +msgid "Messages" +msgstr "Mensajes" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Misc" +msgstr "Misc" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_type__months +msgid "Month(s)" +msgstr "Mes(es)" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Fecha Límite de Mi Actividad" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__name +msgid "Name" +msgstr "Nombre" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "New subscription" +msgstr "Nueva suscripción" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Fecha Límite para la siguiente Actividad" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_summary +msgid "Next Activity Summary" +msgstr "Resumen de la Siguiente Actividad" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo Siguiente Actividad" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__recurring_next_date +msgid "Next invoice date" +msgstr "Fecha siguiente factura" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de acciones" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_has_error_counter +msgid "Number of errors" +msgstr "Número de errores" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Número de mensajes que requieren una acción" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensajes con error de entrega" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_unread_counter +msgid "Number of unread messages" +msgstr "Número de mensajes no leídos" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sale_order_ids +msgid "Orders" +msgstr "Órdenes" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sale_order_id +msgid "Origin sale order" +msgstr "Orden de venta en origen" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Other info" +msgstr "Otra información" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__partner_id +msgid "Partner" +msgstr "Socio" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_sale_order_pending_filter +msgid "Pending subscriptions" +msgstr "Subscripciones pendientes" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__pricelist_id +msgid "Pricelist" +msgstr "Lista de Precios" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__product_id +msgid "Product" +msgstr "Producto" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_product_template +msgid "Product Template" +msgstr "Plantilla del Producto" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.subscription_product_template_action +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__product_ids +#: model:ir.ui.menu,name:subscription_oca.product_subscription_menu +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Products" +msgstr "Productos" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__product_uom_qty +msgid "Quantity" +msgstr "Cantidad" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_stage__type__pre +#: model:sale.subscription.stage,name:subscription_oca.subscription_stage_draft +msgid "Ready to start" +msgstr "Listo para empezar" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__close_reason_id +msgid "Reason" +msgstr "Razón" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__recurring_rule_type +msgid "Recurrence" +msgstr "Recurrencia" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__recurring_total +msgid "Recurring price" +msgstr "Precio recurrente" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__code +msgid "Reference" +msgstr "Referencia" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__recurring_interval +msgid "Repeat every" +msgstr "Repetir cada" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_user_id +msgid "Responsible User" +msgstr "Usuario Responsable" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__recurring_rule_count +msgid "Rule count" +msgstr "Conteo de reglas" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sale_subscription_line_ids +msgid "Sale Subscription Line" +msgstr "Línea de Suscripciones de Venta" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__invoicing_mode__sale_and_invoice +msgid "Sale order & Invoice" +msgstr "Orden de venta y factura" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sale_order_ids_count +msgid "Sale orders" +msgstr "Pedidos de venta" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__crm_team_id +msgid "Sale team" +msgstr "Equipo de venta" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Sales" +msgstr "Ventas" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_order +msgid "Sales Order" +msgstr "Orden de Venta" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de Orden de Venta" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sequence +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__stage_id +msgid "Stage" +msgstr "Etapa" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_subscription_stage_form +msgid "" +"Stages define the life-cycle of a given subscription; this is," +" a subscription can be a 'Ready to start', 'In progress' or " +"'Closed' type of stage. Bear in mind that there can only be " +"one 'Closed'-type stage." +msgstr "" +"Las etapas definen el ciclo de vida de una suscripción determinada; es " +"decir, una suscripción puede ser de tipo " +"\"Lista para empezar\", \"En curso\" o \"Cerrada\". Tenga en " +"cuenta que sólo puede haber una etapa de tipo \"Cerrada\"." + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__date_start +msgid "Start date" +msgstr "Fecha inicio" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Estados basados en actividades\n" +"Retrasada: La fecha límite ya ha pasado\n" +"Hoy: La fecha límite de la actividad es hoy\n" +"Futuras: Actividades futuras." + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_product_product__subscribable +#: model:ir.model.fields,field_description:subscription_oca.field_product_template__subscribable +msgid "Subscribable product" +msgstr "Producto suscribible" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription +#: model:ir.model.fields,field_description:subscription_oca.field_account_bank_statement_line__subscription_id +#: model:ir.model.fields,field_description:subscription_oca.field_account_move__subscription_id +#: model:ir.model.fields,field_description:subscription_oca.field_account_payment__subscription_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_order__order_subscription_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__sale_subscription_id +msgid "Subscription" +msgstr "Suscripción" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_res_partner__subscription_count +#: model:ir.model.fields,field_description:subscription_oca.field_res_users__subscription_count +msgid "Subscription Count" +msgstr "Conteo de Suscripciones" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Subscription lines" +msgstr "Líneas de suscripción" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription_line +msgid "Subscription lines added to a given subscription" +msgstr "Líneas de suscripción agregadas a una suscripción determinada" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription_stage +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_subscription_stage_form +msgid "Subscription stage" +msgstr "Nombre de suscripción" + +#. module: subscription_oca +#: model:ir.ui.menu,name:subscription_oca.subscription_stage_menu +msgid "Subscription stages" +msgstr "Etapas de suscripción" + +#. module: subscription_oca +#: model:ir.ui.menu,name:subscription_oca.subscription_tag_menu +msgid "Subscription tags" +msgstr "Etiquetas de suscripción" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_product_product__subscription_template_id +#: model:ir.model.fields,field_description:subscription_oca.field_product_template__subscription_template_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__template_id +msgid "Subscription template" +msgstr "Plantilla de suscripción" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.sale_subscription_template_act_window +#: model:ir.model,name:subscription_oca.model_sale_subscription_template +#: model:ir.ui.menu,name:subscription_oca.sale_template_subscription_menu +msgid "Subscription templates" +msgstr "Plantillas de suscripción" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.sale_subscription_action +#: model:ir.model.fields,field_description:subscription_oca.field_res_partner__subscription_ids +#: model:ir.model.fields,field_description:subscription_oca.field_res_users__subscription_ids +#: model:ir.model.fields,field_description:subscription_oca.field_sale_order__subscription_ids +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__subscription_ids +#: model:ir.ui.menu,name:subscription_oca.sale_subscription_menu +#: model:ir.ui.menu,name:subscription_oca.sale_subscription_root +#: model:ir.ui.menu,name:subscription_oca.subscription_menu +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_sale_order_form +msgid "Subscriptions" +msgstr "Suscripciones" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_order__subscriptions_count +msgid "Subscriptions Count" +msgstr "Conteo de Suscripciones" + +#. module: subscription_oca +#: model:ir.actions.server,name:subscription_oca.ir_cron_subscription_management_ir_actions_server +#: model:ir.cron,cron_name:subscription_oca.ir_cron_subscription_management +#: model:ir.cron,name:subscription_oca.ir_cron_subscription_management +msgid "Subscriptions management" +msgstr "Gestión de suscripciones" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__price_subtotal +msgid "Subtotal" +msgstr "Subtotal" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.subscription_stage_action +msgid "Susbcription stages" +msgstr "Etapas de suscripción" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_product_suscribable_filter +msgid "Suscribable products" +msgstr "Producto suscribible" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__name +msgid "Tag name" +msgstr "Nombre de Etiqueta" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.subscription_tag_action +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__tag_ids +msgid "Tags" +msgstr "Categorías" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription_tag +msgid "Tags for sale subscription" +msgstr "Etiquetas para la venta de suscripción" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__tax_ids +msgid "Taxes" +msgstr "Impuestos" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__amount_tax_line_amount +msgid "Taxes Amount" +msgstr "Importe de impuestos" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Terms and Conditions" +msgstr "Términos y Condiciones" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__terms +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__description +msgid "Terms and conditions" +msgstr "Términos y condiciones" + +#. module: subscription_oca +#: code:addons/subscription_oca/models/sale_subscription_stage.py:0 +#, python-format +msgid "There is already a Closed-type stage declared" +msgstr "Ya se ha declarado una etapa de tipo Cerrado" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_kanban +msgid "" +"This bar allows to filter the opportunities based on scheduled activities." +msgstr "" +"Esta barra permite filtrar las oportunidades en función de las actividades " +"programadas." + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_subscription_stage_form +msgid "" +"This field dictates the stages' visual order on the Kanban and form view. " +"Although is purely visual, mind that if the order isn't " +"consequent with your needs, you could have a 'Closed'-type stage before a " +"'Ready to start' one." +msgstr "" +"Este campo dicta el orden visual de las etapas en la vista Kanban y " +"formulario. Aunque es puramente visual, tenga en cuenta que si el orden no " +"es consecuente con sus necesidades, podría " +"tener una etapa de tipo 'Cerrada' antes de una 'Lista para empezar'." + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__to_renew +msgid "To renew" +msgstr "Para renovar" + +#. module: subscription_oca +#: code:addons/subscription_oca/models/sale_subscription.py:0 +#, python-format +msgid "To validate" +msgstr "Para Validar" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__price_total +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_tree +msgid "Total" +msgstr "Total" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_tree +msgid "Total Tax" +msgstr "Impuesto Total" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_tree +msgid "Total subtotal" +msgstr "Subtotal total" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__type +msgid "Type" +msgstr "Tipo" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo (o clase) de actividad excepcional registrada." + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__price_unit +msgid "Unit price" +msgstr "Precio unitario" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_unread +msgid "Unread Messages" +msgstr "Mensajes no Leídos" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_unread_counter +msgid "Unread Messages Counter" +msgstr "Contador de Mensajes no Leídos" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__website_message_ids +msgid "Website Messages" +msgstr "Mensajes del sitio Web" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__website_message_ids +msgid "Website communication history" +msgstr "Historial de la comunicación en el sitio web" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_type__weeks +msgid "Week(s)" +msgstr "Semana(s)" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_type__years +msgid "Year(s)" +msgstr "Año(s)" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "e.g. Monthly Subscription" +msgstr "p. ej. Suscripción Mensual" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "month(s)" +msgstr "Mes(es)" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__product_ids_count +msgid "product_ids" +msgstr "product_ids" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__subscription_count +msgid "subscription_ids" +msgstr "subscription_ids" diff --git a/subscription_oca/i18n/subscription_oca.pot b/subscription_oca/i18n/subscription_oca.pot new file mode 100644 index 0000000000..b638e8a902 --- /dev/null +++ b/subscription_oca/i18n/subscription_oca.pot @@ -0,0 +1,961 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * subscription_oca +# +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: subscription_oca +#: model:sale.subscription.stage,description:subscription_oca.subscription_stage_in_progress +msgid "" +"\n" +" As an 'In progress'-type of stage, it will trigger the recurring invoicing process if applicable. If this stage is the first - sequence order - of the available 'In progress' types and there's a stage change from any other non-'In progress' types to this one, an invoice will be created automatically if the start date is the present day.\n" +" " +msgstr "" + +#. module: subscription_oca +#: model:sale.subscription.stage,description:subscription_oca.subscription_stage_draft +msgid "" +"\n" +" Draft equivalent, a subscription is ready to start when is not marked as in progress but it can be at any moment. If there's no 'Closed'-type stage defined, when a subscription comes to an end by automatic means, it will be marked with this stage.\n" +" " +msgstr "" + +#. module: subscription_oca +#: model:sale.subscription.stage,description:subscription_oca.subscription_stage_closed +msgid "" +"\n" +" The final stage of a subscription. There are two ways to mark a subscription as closed. The easiest one is using the kanban card-moving capabilities, pressing the 'Close subscription' button (only available if a subscription is in progress).\n" +" " +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Every" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "For" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.res_partner_view_form +msgid "Subscriptions" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "" +"A given subscription can be marked as closed when, for example, renewal is " +"not desired." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__active +msgid "Active" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_ids +msgid "Activities" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_state +msgid "Activity State" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_subscription_stage_form +msgid "Add new description..." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__amount_tax +msgid "Amount Tax" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__amount_total +msgid "Amount Total" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__recurring_rule_boundary +msgid "Boundary" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.close_reason_wizard_view +msgid "Cancel" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.actions.act_window,help:subscription_oca.subscription_stage_action +msgid "Click to create a new subscription stage." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__close_reason_id +msgid "Close Reason" +msgstr "" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.close_reason_wizard_act_window +#: model_terms:ir.ui.view,arch_db:subscription_oca.close_reason_wizard_view +msgid "Close reason" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription_close_reason +msgid "Close reason model" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_close_reason_wizard +msgid "Close reason wizard" +msgstr "" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.subscription_close_reason_action +#: model:ir.ui.menu,name:subscription_oca.subscription_close_reason_menu +msgid "Close reasons" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Close subscription" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_stage__type__post +#: model:sale.subscription.stage,name:subscription_oca.subscription_stage_closed +msgid "Closed" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__code +msgid "Code" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__color +msgid "Color Index" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__user_id +msgid "Commercial agent" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__company_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__company_id +msgid "Company" +msgstr "" + +#. module: subscription_oca +#: model:ir.ui.menu,name:subscription_oca.sale_subscription_configuration_menu +msgid "Configuration" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.close_reason_wizard_view +msgid "Confirm" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_res_partner +msgid "Contact" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Create Invoice" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__create_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__create_uid +msgid "Created by" +msgstr "" + +#. module: subscription_oca +#. odoo-python +#: code:addons/subscription_oca/models/sale_subscription.py:0 +#, python-format +msgid "Created invoice with reference" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__create_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__create_date +msgid "Created on" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__currency_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__currency_id +msgid "Currency" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_type__days +msgid "Day(s)" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_kanban +msgid "Delete" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__description +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__description +msgid "Description" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__discount +msgid "Discount (%)" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__display_name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__display_name +msgid "Display Name" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__display_name +msgid "Display name" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__invoicing_mode__draft +msgid "Draft" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__recurring_rule_boundary +msgid "Duration" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_kanban +msgid "Edit" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__stage_str +msgid "Etapa" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__date +msgid "Finish date" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__fiscal_position_id +msgid "Fiscal Position" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_boundary__limited +msgid "Fixed" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_boundary__unlimited +msgid "Forever" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__has_message +msgid "Has Message" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__id +msgid "ID" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__image +msgid "Image" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__in_progress +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__in_progress +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_stage__type__in_progress +#: model:sale.subscription.stage,name:subscription_oca.subscription_stage_in_progress +msgid "In progress" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__invoicing_mode__invoice +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Invoice" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__invoicing_mode__invoice_send +msgid "Invoice & send" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__account_invoice_ids_count +msgid "Invoice Count" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__invoice_mail_template_id +msgid "Invoice Email" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__invoice_ids +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Invoices" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Invoicing" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__invoicing_mode +msgid "Invoicing mode" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__journal_id +msgid "Journal" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__fold +msgid "Kanban folded" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag____last_update +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template____last_update +msgid "Last Modified on" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__write_uid +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__write_date +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__write_date +msgid "Last Updated on" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_kanban +msgid "Menú desplegable" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_ids +msgid "Messages" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Misc" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_type__months +msgid "Month(s)" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_close_reason__name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__name +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__name +msgid "Name" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "New subscription" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__recurring_next_date +msgid "Next invoice date" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sale_order_ids +msgid "Orders" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sale_order_id +msgid "Origin sale order" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Other info" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__partner_id +msgid "Partner" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_sale_order_pending_filter +msgid "Pending subscriptions" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__pricelist_id +msgid "Pricelist" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_product_template +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__product_id +msgid "Product" +msgstr "" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.subscription_product_template_action +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__product_ids +#: model:ir.ui.menu,name:subscription_oca.product_subscription_menu +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Products" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__product_uom_qty +msgid "Quantity" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_stage__type__pre +#: model:sale.subscription.stage,name:subscription_oca.subscription_stage_draft +msgid "Ready to start" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_close_reason_wizard__close_reason_id +msgid "Reason" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__recurring_rule_type +msgid "Recurrence" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__recurring_total +msgid "Recurring price" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__code +msgid "Reference" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__recurring_interval +msgid "Repeat every" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__recurring_rule_count +msgid "Rule count" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sale_subscription_line_ids +msgid "Sale Subscription Line" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__invoicing_mode__sale_and_invoice +msgid "Sale order & Invoice" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sale_order_ids_count +msgid "Sale orders" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__crm_team_id +msgid "Sale team" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Sales" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__sequence +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__sequence +msgid "Sequence" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__stage_id +msgid "Stage" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_subscription_stage_form +msgid "" +"Stages define the life-cycle of a given subscription; this is," +" a subscription can be a 'Ready to start', 'In progress' or " +"'Closed' type of stage. Bear in mind that there can only be " +"one 'Closed'-type stage." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__date_start +msgid "Start date" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_product_product__subscribable +#: model:ir.model.fields,field_description:subscription_oca.field_product_template__subscribable +msgid "Subscribable product" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription +#: model:ir.model.fields,field_description:subscription_oca.field_account_bank_statement_line__subscription_id +#: model:ir.model.fields,field_description:subscription_oca.field_account_move__subscription_id +#: model:ir.model.fields,field_description:subscription_oca.field_account_payment__subscription_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_order__order_subscription_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__sale_subscription_id +msgid "Subscription" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_res_partner__subscription_count +#: model:ir.model.fields,field_description:subscription_oca.field_res_users__subscription_count +msgid "Subscription Count" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_form +msgid "Subscription lines" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription_line +msgid "Subscription lines added to a given subscription" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription_stage +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_subscription_stage_form +msgid "Subscription stage" +msgstr "" + +#. module: subscription_oca +#: model:ir.ui.menu,name:subscription_oca.subscription_stage_menu +msgid "Subscription stages" +msgstr "" + +#. module: subscription_oca +#: model:ir.ui.menu,name:subscription_oca.subscription_tag_menu +msgid "Subscription tags" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_product_product__subscription_template_id +#: model:ir.model.fields,field_description:subscription_oca.field_product_template__subscription_template_id +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__template_id +msgid "Subscription template" +msgstr "" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.sale_subscription_template_act_window +#: model:ir.model,name:subscription_oca.model_sale_subscription_template +#: model:ir.ui.menu,name:subscription_oca.sale_template_subscription_menu +msgid "Subscription templates" +msgstr "" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.sale_subscription_action +#: model:ir.model.fields,field_description:subscription_oca.field_res_partner__subscription_ids +#: model:ir.model.fields,field_description:subscription_oca.field_res_users__subscription_ids +#: model:ir.model.fields,field_description:subscription_oca.field_sale_order__subscription_ids +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__subscription_ids +#: model:ir.ui.menu,name:subscription_oca.sale_subscription_menu +#: model:ir.ui.menu,name:subscription_oca.sale_subscription_root +#: model:ir.ui.menu,name:subscription_oca.subscription_menu +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_sale_order_form +msgid "Subscriptions" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_order__subscriptions_count +msgid "Subscriptions Count" +msgstr "" + +#. module: subscription_oca +#: model:ir.actions.server,name:subscription_oca.ir_cron_subscription_management_ir_actions_server +#: model:ir.cron,cron_name:subscription_oca.ir_cron_subscription_management +msgid "Subscriptions management" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__price_subtotal +msgid "Subtotal" +msgstr "" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.subscription_stage_action +msgid "Susbcription stages" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_product_suscribable_filter +msgid "Suscribable products" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_tag__name +msgid "Tag name" +msgstr "" + +#. module: subscription_oca +#: model:ir.actions.act_window,name:subscription_oca.subscription_tag_action +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__tag_ids +msgid "Tags" +msgstr "" + +#. module: subscription_oca +#: model:ir.model,name:subscription_oca.model_sale_subscription_tag +msgid "Tags for sale subscription" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__tax_ids +msgid "Taxes" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__amount_tax_line_amount +msgid "Taxes Amount" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "Terms and Conditions" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__terms +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__description +msgid "Terms and conditions" +msgstr "" + +#. module: subscription_oca +#. odoo-python +#: code:addons/subscription_oca/models/sale_subscription_stage.py:0 +#, python-format +msgid "There is already a Closed-type stage declared" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_kanban +msgid "" +"This bar allows to filter the opportunities based on scheduled activities." +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.view_subscription_stage_form +msgid "" +"This field dictates the stages' visual order on the Kanban and form view. " +"Although is purely visual, mind that if the order isn't " +"consequent with your needs, you could have a 'Closed'-type stage before a " +"'Ready to start' one." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__to_renew +msgid "To renew" +msgstr "" + +#. module: subscription_oca +#. odoo-python +#: code:addons/subscription_oca/models/sale_subscription.py:0 +#, python-format +msgid "To validate" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__price_total +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_tree +msgid "Total" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_tree +msgid "Total Tax" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_tree +msgid "Total subtotal" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_stage__type +msgid "Type" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_line__price_unit +msgid "Unit price" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,help:subscription_oca.field_sale_subscription__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_type__weeks +msgid "Week(s)" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields.selection,name:subscription_oca.selection__sale_subscription_template__recurring_rule_type__years +msgid "Year(s)" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "e.g. Monthly Subscription" +msgstr "" + +#. module: subscription_oca +#: model_terms:ir.ui.view,arch_db:subscription_oca.sale_subscription_template_form +msgid "month(s)" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__product_ids_count +msgid "product_ids" +msgstr "" + +#. module: subscription_oca +#: model:ir.model.fields,field_description:subscription_oca.field_sale_subscription_template__subscription_count +msgid "subscription_ids" +msgstr "" diff --git a/subscription_oca/models/__init__.py b/subscription_oca/models/__init__.py new file mode 100644 index 0000000000..6fa4481885 --- /dev/null +++ b/subscription_oca/models/__init__.py @@ -0,0 +1,11 @@ +from . import account_move +from . import product_template +from . import res_partner +from . import sale_order +from . import sale_order_line +from . import sale_subscription +from . import sale_subscription_close_reason +from . import sale_subscription_line +from . import sale_subscription_stage +from . import sale_subscription_tag +from . import sale_subscription_template diff --git a/subscription_oca/models/account_move.py b/subscription_oca/models/account_move.py new file mode 100644 index 0000000000..570a02f29a --- /dev/null +++ b/subscription_oca/models/account_move.py @@ -0,0 +1,12 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountMove(models.Model): + _inherit = "account.move" + + subscription_id = fields.Many2one( + comodel_name="sale.subscription", string="Subscription" + ) diff --git a/subscription_oca/models/product_template.py b/subscription_oca/models/product_template.py new file mode 100644 index 0000000000..c866cfa3ed --- /dev/null +++ b/subscription_oca/models/product_template.py @@ -0,0 +1,12 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class Product(models.Model): + _inherit = "product.template" + + subscribable = fields.Boolean(string="Subscribable product") + subscription_template_id = fields.Many2one( + comodel_name="sale.subscription.template", string="Subscription template" + ) diff --git a/subscription_oca/models/res_partner.py b/subscription_oca/models/res_partner.py new file mode 100644 index 0000000000..e4107108e3 --- /dev/null +++ b/subscription_oca/models/res_partner.py @@ -0,0 +1,33 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class Partner(models.Model): + _inherit = "res.partner" + + subscription_ids = fields.One2many( + comodel_name="sale.subscription", + inverse_name="partner_id", + string="Subscriptions", + ) + subscription_count = fields.Integer( + required=False, + compute="_compute_subscription_count", + ) + + def _compute_subscription_count(self): + for record in self: + record.subscription_count = len(record.subscription_ids) + + def action_view_subscription_ids(self): + return { + "type": "ir.actions.act_window", + "res_model": "sale.subscription", + "domain": [("id", "in", self.subscription_ids.ids)], + "name": self.name, + "view_mode": "tree,form", + "context": { + "default_partner_id": self.id, + }, + } diff --git a/subscription_oca/models/sale_order.py b/subscription_oca/models/sale_order.py new file mode 100644 index 0000000000..0aabac0cb8 --- /dev/null +++ b/subscription_oca/models/sale_order.py @@ -0,0 +1,83 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from collections import defaultdict +from datetime import date + +from dateutil.relativedelta import relativedelta + +from odoo import api, fields, models + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + subscription_ids = fields.One2many( + comodel_name="sale.subscription", + inverse_name="sale_order_id", + string="Subscriptions", + ) + subscriptions_count = fields.Integer(compute="_compute_subscriptions_count") + order_subscription_id = fields.Many2one( + comodel_name="sale.subscription", string="Subscription" + ) + + @api.depends("subscription_ids") + def _compute_subscriptions_count(self): + for record in self: + record.subscriptions_count = len(record.subscription_ids) + + def action_view_subscriptions(self): + return { + "type": "ir.actions.act_window", + "res_model": "sale.subscription", + "domain": [("id", "in", self.subscription_ids.ids)], + "name": self.name, + "view_mode": "tree,form", + } + + def get_next_interval(self, type_interval, interval): + date_start = date.today() + date_start += relativedelta(**{type_interval: interval}) + return date_start + + def create_subscription(self, lines, subscription_tmpl): + subscription_lines = [] + for line in lines: + subscription_lines.append((0, 0, line.get_subscription_line_values())) + + if subscription_tmpl: + rec = self.env["sale.subscription"].create( + { + "partner_id": self.partner_id.id, + "user_id": self._context["uid"], + "template_id": subscription_tmpl.id, + "pricelist_id": self.partner_id.property_product_pricelist.id, + "date_start": date.today(), + "sale_order_id": self.id, + "sale_subscription_line_ids": subscription_lines, + } + ) + rec.action_start_subscription() + self.subscription_ids = [(4, rec.id)] + rec.recurring_next_date = self.get_next_interval( + subscription_tmpl.recurring_rule_type, + subscription_tmpl.recurring_interval, + ) + + def group_subscription_lines(self): + grouped = defaultdict(list) + for order_line in self.order_line.filtered( + lambda line: line.product_id.subscribable + ): + grouped[ + order_line.product_id.product_tmpl_id.subscription_template_id + ].append(order_line) + return grouped + + def action_confirm(self): + res = super(SaleOrder, self).action_confirm() + for record in self: + grouped = self.group_subscription_lines() + for tmpl, lines in grouped.items(): + record.create_subscription(lines, tmpl) + return res diff --git a/subscription_oca/models/sale_order_line.py b/subscription_oca/models/sale_order_line.py new file mode 100644 index 0000000000..b843e48f7f --- /dev/null +++ b/subscription_oca/models/sale_order_line.py @@ -0,0 +1,17 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + def get_subscription_line_values(self): + return { + "product_id": self.product_id.id, + "name": self.product_id.name, + "product_uom_qty": self.product_uom_qty, + "price_unit": self.price_unit, + "discount": self.discount, + "price_subtotal": self.price_subtotal, + } diff --git a/subscription_oca/models/sale_subscription.py b/subscription_oca/models/sale_subscription.py new file mode 100644 index 0000000000..6845706840 --- /dev/null +++ b/subscription_oca/models/sale_subscription.py @@ -0,0 +1,470 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import logging +from datetime import date, datetime + +from dateutil.relativedelta import relativedelta + +from odoo import _, api, fields, models +from odoo.exceptions import AccessError + +logger = logging.getLogger(__name__) + + +class SaleSubscription(models.Model): + _name = "sale.subscription" + _description = "Subscription" + _inherit = ["mail.thread", "mail.activity.mixin"] + _order = "id desc" + + color = fields.Integer("Color Index") + name = fields.Char( + compute="_compute_name", + store=True, + ) + sequence = fields.Integer() + company_id = fields.Many2one( + "res.company", + "Company", + required=True, + index=True, + default=lambda self: self.env.company, + ) + partner_id = fields.Many2one( + comodel_name="res.partner", required=True, string="Partner", index=True + ) + fiscal_position_id = fields.Many2one( + "account.fiscal.position", + string="Fiscal Position", + domain="[('company_id', '=', company_id)]", + check_company=True, + ) + active = fields.Boolean(default=True) + template_id = fields.Many2one( + comodel_name="sale.subscription.template", + required=True, + string="Subscription template", + ) + code = fields.Char( + string="Reference", + default=lambda self: self.env["ir.sequence"].next_by_code("sale.subscription"), + ) + in_progress = fields.Boolean(string="In progress", default=False) + recurring_rule_boundary = fields.Boolean( + string="Boundary", compute="_compute_rule_boundary", store=True + ) + pricelist_id = fields.Many2one( + comodel_name="product.pricelist", required=True, string="Pricelist" + ) + recurring_next_date = fields.Date(string="Next invoice date", default=date.today()) + user_id = fields.Many2one( + comodel_name="res.users", + string="Commercial agent", + default=lambda self: self.env.user.id, + ) + date_start = fields.Date(string="Start date", default=date.today()) + date = fields.Date( + string="Finish date", + compute="_compute_rule_boundary", + store=True, + readonly=False, + ) + description = fields.Text() + sale_order_id = fields.Many2one( + comodel_name="sale.order", string="Origin sale order" + ) + terms = fields.Text( + string="Terms and conditions", + compute="_compute_terms", + store=True, + readonly=False, + ) + invoice_ids = fields.One2many( + comodel_name="account.move", + inverse_name="subscription_id", + string="Invoices", + ) + sale_order_ids = fields.One2many( + comodel_name="sale.order", + inverse_name="order_subscription_id", + string="Orders", + ) + recurring_total = fields.Monetary( + compute="_compute_total", string="Recurring price", store=True + ) + amount_tax = fields.Monetary(compute="_compute_total", store=True) + amount_total = fields.Monetary(compute="_compute_total", store=True) + tag_ids = fields.Many2many(comodel_name="sale.subscription.tag", string="Tags") + image = fields.Binary("Image", related="user_id.image_512", store=True) + journal_id = fields.Many2one(comodel_name="account.journal", string="Journal") + currency_id = fields.Many2one( + related="pricelist_id.currency_id", + depends=["pricelist_id"], + store=True, + ondelete="restrict", + ) + + @api.model + def _read_group_stage_ids(self, stages, domain, order): + stage_ids = stages.search([], order=order) + return stage_ids + + stage_id = fields.Many2one( + comodel_name="sale.subscription.stage", + string="Stage", + tracking=True, + group_expand="_read_group_stage_ids", + store=True, + ) + stage_str = fields.Char( + related="stage_id.name", + string="Etapa", + store=True, + ) + sale_subscription_line_ids = fields.One2many( + comodel_name="sale.subscription.line", + inverse_name="sale_subscription_id", + ) + sale_order_ids_count = fields.Integer( + compute="_compute_sale_order_ids_count", string="Sale orders" + ) + account_invoice_ids_count = fields.Integer( + compute="_compute_account_invoice_ids_count", string="Invoice Count" + ) + close_reason_id = fields.Many2one( + comodel_name="sale.subscription.close.reason", string="Close Reason" + ) + crm_team_id = fields.Many2one(comodel_name="crm.team", string="Sale team") + to_renew = fields.Boolean(default=False, string="To renew") + + def cron_subscription_management(self): + today = date.today() + for subscription in self.search([]): + if subscription.in_progress: + if ( + subscription.recurring_next_date == today + and subscription.sale_subscription_line_ids + ): + try: + subscription.generate_invoice() + except Exception: + logger.exception("Error on subscription invoice generate") + if not subscription.recurring_rule_boundary: + if subscription.date == today: + subscription.action_close_subscription() + + else: + if subscription.date_start == today: + subscription.action_start_subscription() + subscription.generate_invoice() + + @api.depends("sale_subscription_line_ids") + def _compute_total(self): + for record in self: + recurring_total = amount_tax = 0.0 + for order_line in record.sale_subscription_line_ids: + recurring_total += order_line.price_subtotal + amount_tax += order_line.amount_tax_line_amount + record.update( + { + "recurring_total": recurring_total, + "amount_tax": amount_tax, + "amount_total": recurring_total + amount_tax, + } + ) + + @api.depends("template_id", "code") + def _compute_name(self): + for record in self: + template_code = record.template_id.code if record.template_id.code else "" + code = record.code if record.code else "" + slash = "/" if template_code and code else "" + record.name = "{}{}{}".format(template_code, slash, code) + + @api.depends("template_id", "date_start") + def _compute_rule_boundary(self): + for record in self: + if record.template_id.recurring_rule_boundary == "unlimited": + record.date = False + record.recurring_rule_boundary = True + else: + record.date = ( + relativedelta(months=+record.template_id.recurring_rule_count) + + record.date_start + ) + record.recurring_rule_boundary = False + + @api.depends("template_id") + def _compute_terms(self): + for record in self: + record.terms = record.template_id.description + + @api.onchange("template_id", "date_start") + def _onchange_template_id(self): + today = date.today() + if self.date_start: + today = self.date_start + if self.template_id and self.account_invoice_ids_count > 0: + self.calculate_recurring_next_date(self.recurring_next_date) + else: + self.calculate_recurring_next_date(today) + + def calculate_recurring_next_date(self, start_date): + if self.account_invoice_ids_count == 0: + self.recurring_next_date = date.today() + else: + type_interval = self.template_id.recurring_rule_type + interval = int(self.template_id.recurring_interval) + self.recurring_next_date = start_date + relativedelta( + **{type_interval: interval} + ) + + @api.onchange("partner_id") + def onchange_partner_id(self): + self.pricelist_id = self.partner_id.property_product_pricelist + + @api.onchange("partner_id", "company_id") + def onchange_partner_id_fpos(self): + self.fiscal_position_id = ( + self.env["account.fiscal.position"] + .with_company(self.company_id) + ._get_fiscal_position(self.partner_id) + ) + + def action_start_subscription(self): + self.close_reason_id = False + in_progress_stage = self.env["sale.subscription.stage"].search( + [("type", "=", "in_progress")], limit=1 + ) + self.stage_id = in_progress_stage + + def action_close_subscription(self): + self.recurring_next_date = False + return { + "view_type": "form", + "view_mode": "form", + "res_model": "close.reason.wizard", + "type": "ir.actions.act_window", + "target": "new", + "res_id": False, + } + + def _prepare_sale_order(self, line_ids=False): + self.ensure_one() + return { + "partner_id": self.partner_id.id, + "fiscal_position_id": self.fiscal_position_id.id, + "date_order": datetime.now(), + "payment_term_id": self.partner_id.property_payment_term_id.id, + "user_id": self.user_id.id, + "origin": self.name, + "order_line": line_ids, + } + + def _prepare_account_move(self, line_ids): + self.ensure_one() + values = { + "partner_id": self.partner_id.id, + "invoice_date": self.recurring_next_date, + "invoice_payment_term_id": self.partner_id.property_payment_term_id.id, + "invoice_origin": self.name, + "invoice_user_id": self.user_id.id, + "partner_bank_id": self.company_id.partner_id.bank_ids[:1].id, + "invoice_line_ids": line_ids, + } + if self.journal_id: + values["journal_id"] = self.journal_id.id + return values + + def create_invoice(self): + if not self.env["account.move"].check_access_rights("create", False): + try: + self.check_access_rights("write") + self.check_access_rule("write") + except AccessError: + return self.env["account.move"] + line_ids = [] + for line in self.sale_subscription_line_ids: + line_values = line._prepare_account_move_line() + line_ids.append((0, 0, line_values)) + invoice_values = self._prepare_account_move(line_ids) + invoice_id = ( + self.env["account.move"] + .sudo() + .with_context(default_move_type="out_invoice", journal_type="sale") + .create(invoice_values) + ) + self.write({"invoice_ids": [(4, invoice_id.id)]}) + return invoice_id + + def create_sale_order(self): + if not self.env["sale.order"].check_access_rights("create", False): + try: + self.check_access_rights("write") + self.check_access_rule("write") + except AccessError: + return self.env["sale.order"] + line_ids = [] + for line in self.sale_subscription_line_ids: + line_values = line._prepare_sale_order_line() + line_ids.append((0, 0, line_values)) + values = self._prepare_sale_order(line_ids) + order_id = self.env["sale.order"].sudo().create(values) + self.write({"sale_order_ids": [(4, order_id.id)]}) + return order_id + + def generate_invoice(self): + invoice_number = "" + msg_static = _("Created invoice with reference") + if self.template_id.invoicing_mode in ["draft", "invoice", "invoice_send"]: + invoice = self.create_invoice() + if self.template_id.invoicing_mode != "draft": + invoice.action_post() + if self.template_id.invoicing_mode == "invoice_send": + mail_template = self.template_id.invoice_mail_template_id + invoice.with_context(force_send=True).message_post_with_template( + mail_template.id, + composition_mode="comment", + email_layout_xmlid="mail.mail_notification_paynow", + ) + invoice_number = invoice.name + message_body = ( + "%s %s" + % (msg_static, invoice.id, invoice_number) + ) + + if self.template_id.invoicing_mode == "sale_and_invoice": + order_id = self.create_sale_order() + order_id.action_done() + new_invoice = order_id._create_invoices() + new_invoice.action_post() + new_invoice.invoice_origin = order_id.name + ", " + self.name + invoice_number = new_invoice.name + message_body = ( + "%s %s" + % (msg_static, new_invoice.id, invoice_number) + ) + if not invoice_number: + invoice_number = _("To validate") + message_body = "%s %s" % (msg_static, invoice_number) + self.calculate_recurring_next_date(self.recurring_next_date) + self.message_post(body=message_body) + + def manual_invoice(self): + invoice_id = self.create_invoice() + self.calculate_recurring_next_date(self.recurring_next_date) + context = dict(self.env.context) + context["form_view_initial_mode"] = "edit" + return { + "name": self.name, + "views": [ + (self.env.ref("account.view_move_form").id, "form"), + (self.env.ref("account.view_move_tree").id, "tree"), + ], + "view_type": "form", + "view_mode": "form", + "res_model": "account.move", + "res_id": invoice_id.id, + "type": "ir.actions.act_window", + "context": context, + } + + @api.depends("invoice_ids", "sale_order_ids.invoice_ids") + def _compute_account_invoice_ids_count(self): + for record in self: + record.account_invoice_ids_count = len(self.invoice_ids) + len( + self.sale_order_ids.invoice_ids + ) + + def action_view_account_invoice_ids(self): + return { + "name": self.name, + "views": [ + (self.env.ref("account.view_move_tree").id, "tree"), + (self.env.ref("account.view_move_form").id, "form"), + ], + "view_type": "form", + "view_mode": "tree,form", + "res_model": "account.move", + "type": "ir.actions.act_window", + "domain": [ + ("id", "in", self.invoice_ids.ids + self.sale_order_ids.invoice_ids.ids) + ], + "context": self.env.context, + } + + def _compute_sale_order_ids_count(self): + data = self.env["sale.order"].read_group( + domain=[("order_subscription_id", "in", self.ids)], + fields=["order_subscription_id"], + groupby=["order_subscription_id"], + ) + count_dict = { + item["order_subscription_id"][0]: item["order_subscription_id_count"] + for item in data + } + for record in self: + record.sale_order_ids_count = count_dict.get(record.id, 0) + + def action_view_sale_order_ids(self): + active_ids = self.sale_order_ids.ids + return { + "name": self.name, + "view_type": "form", + "view_mode": "tree,form", + "res_model": "sale.order", + "type": "ir.actions.act_window", + "domain": [("id", "in", active_ids)], + "context": self.env.context, + } + + def _check_dates(self, start, next_invoice): + if start and next_invoice: + date_start = start + date_next_invoice = next_invoice + if not isinstance(date_start, date) and not isinstance( + date_next_invoice, date + ): + date_start = fields.Date.to_date(start) + date_next_invoice = fields.Date.to_date(next_invoice) + if date_start > date_next_invoice: + return True + return False + + def write(self, values): + res = super().write(values) + if "stage_id" in values: + for record in self: + if record.stage_id: + if record.stage_id.type == "in_progress": + record.in_progress = True + record.date_start = date.today() + elif record.stage_id.type == "post": + record.close_reason_id = False + record.in_progress = False + else: + record.in_progress = False + + return res + + @api.model + def create(self, values): + if "recurring_rule_boundary" in values: + if not values["recurring_rule_boundary"]: + template_id = self.env["sale.subscription.template"].browse( + values["template_id"] + ) + date_start = values["date_start"] + if not isinstance(values["date_start"], date): + date_start = fields.Date.to_date(values["date_start"]) + values["date"] = template_id._get_date(date_start) + if "date_start" in values and "recurring_next_date" in values: + res = self._check_dates(values["date_start"], values["recurring_next_date"]) + if res: + values["date_start"] = values["recurring_next_date"] + values["stage_id"] = ( + self.env["sale.subscription.stage"] + .search([("type", "=", "pre")], order="sequence desc", limit=1) + .id + ) + return super(SaleSubscription, self).create(values) diff --git a/subscription_oca/models/sale_subscription_close_reason.py b/subscription_oca/models/sale_subscription_close_reason.py new file mode 100644 index 0000000000..36107a0296 --- /dev/null +++ b/subscription_oca/models/sale_subscription_close_reason.py @@ -0,0 +1,10 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class SaleSubscriptionCloseReason(models.Model): + _name = "sale.subscription.close.reason" + _description = "Close reason model" + + name = fields.Char(required=True) diff --git a/subscription_oca/models/sale_subscription_line.py b/subscription_oca/models/sale_subscription_line.py new file mode 100644 index 0000000000..a780e4075b --- /dev/null +++ b/subscription_oca/models/sale_subscription_line.py @@ -0,0 +1,319 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models +from odoo.tools.misc import get_lang + + +class SaleSubscriptionLine(models.Model): + _name = "sale.subscription.line" + _description = "Subscription lines added to a given subscription" + + product_id = fields.Many2one( + comodel_name="product.product", + domain=[("sale_ok", "=", True)], + string="Product", + ) + currency_id = fields.Many2one( + "res.currency", + related="sale_subscription_id.currency_id", + store=True, + readonly=True, + ) + name = fields.Char( + string="Description", compute="_compute_name", store=True, readonly=False + ) + product_uom_qty = fields.Float(default=1.0, string="Quantity") + price_unit = fields.Float( + string="Unit price", compute="_compute_price_unit", store=True, readonly=False + ) + discount = fields.Float( + string="Discount (%)", compute="_compute_discount", store=True, readonly=False + ) + tax_ids = fields.Many2many( + comodel_name="account.tax", + relation="subscription_line_tax", + column1="subscription_line_id", + column2="tax_id", + string="Taxes", + compute="_compute_tax_ids", + store=True, + readonly=False, + ) + + @api.depends("product_id", "price_unit", "product_uom_qty", "discount", "tax_ids") + def _compute_subtotal(self): + for record in self: + price = record.price_unit * (1 - (record.discount or 0.0) / 100.0) + taxes = record.tax_ids.compute_all( + price, + record.currency_id, + record.product_uom_qty, + product=record.product_id, + partner=record.sale_subscription_id.partner_id, + ) + record.update( + { + "amount_tax_line_amount": sum( + t.get("amount", 0.0) for t in taxes.get("taxes", []) + ), + "price_total": taxes["total_included"], + "price_subtotal": taxes["total_excluded"], + } + ) + + price_subtotal = fields.Monetary( + string="Subtotal", readonly="True", compute=_compute_subtotal, store=True + ) + price_total = fields.Monetary( + string="Total", readonly="True", compute=_compute_subtotal, store=True + ) + amount_tax_line_amount = fields.Float( + string="Taxes Amount", compute="_compute_subtotal", store=True + ) + sale_subscription_id = fields.Many2one( + comodel_name="sale.subscription", string="Subscription" + ) + company_id = fields.Many2one( + related="sale_subscription_id.company_id", + string="Company", + store=True, + index=True, + ) + + @api.depends("product_id") + def _compute_name(self): + for record in self: + if not record.product_id: + record.name = False + lang = get_lang(self.env, record.sale_subscription_id.partner_id.lang).code + product = record.product_id.with_context(lang=lang) + record.name = product.with_context( + lang=lang + ).get_product_multiline_description_sale() + + @api.depends("product_id", "sale_subscription_id.fiscal_position_id") + def _compute_tax_ids(self): + for line in self: + fpos = ( + line.sale_subscription_id.fiscal_position_id + or line.sale_subscription_id.fiscal_position_id._get_fiscal_position( + line.sale_subscription_id.partner_id + ) + ) + # If company_id is set, always filter taxes by the company + taxes = line.product_id.taxes_id.filtered( + lambda t: t.company_id == line.env.company + ) + line.tax_ids = fpos.map_tax(taxes) + + @api.depends( + "product_id", + "sale_subscription_id.partner_id", + "sale_subscription_id.pricelist_id", + ) + def _compute_price_unit(self): + for record in self: + if not record.product_id: + continue + if ( + record.sale_subscription_id.pricelist_id + and record.sale_subscription_id.partner_id + ): + product = record.product_id.with_context( + partner=record.sale_subscription_id.partner_id, + quantity=record.product_uom_qty, + date=fields.datetime.now(), + pricelist=record.sale_subscription_id.pricelist_id.id, + uom=record.product_id.uom_id.id, + ) + record.price_unit = product._get_tax_included_unit_price( + record.company_id, + record.sale_subscription_id.currency_id, + fields.datetime.now(), + "sale", + fiscal_position=record.sale_subscription_id.fiscal_position_id, + product_price_unit=record._get_display_price(product), + product_currency=record.sale_subscription_id.currency_id, + ) + + @api.depends( + "product_id", + "price_unit", + "product_uom_qty", + "tax_ids", + "sale_subscription_id.partner_id", + "sale_subscription_id.pricelist_id", + ) + def _compute_discount(self): + for record in self: + if not ( + record.product_id + and record.product_id.uom_id + and record.sale_subscription_id.partner_id + and record.sale_subscription_id.pricelist_id + and record.sale_subscription_id.pricelist_id.discount_policy + == "without_discount" + and self.env.user.has_group("product.group_discount_per_so_line") + ): + record.discount = 0.0 + continue + + record.discount = 0.0 + product = record.product_id.with_context( + lang=record.sale_subscription_id.partner_id.lang, + partner=record.sale_subscription_id.partner_id, + quantity=record.product_uom_qty, + date=fields.Datetime.now(), + pricelist=record.sale_subscription_id.pricelist_id.id, + uom=record.product_id.uom_id.id, + fiscal_position=record.sale_subscription_id.fiscal_position_id + or self.env.context.get("fiscal_position"), + ) + + price, rule_id = record.sale_subscription_id.pricelist_id.with_context( + partner_id=record.sale_subscription_id.partner_id.id, + date=fields.Datetime.now(), + uom=record.product_id.uom_id.id, + )._get_product_price_rule( + record.product_id, + record.product_uom_qty or 1.0, + ) + new_list_price, currency = record.with_context( + partner_id=record.sale_subscription_id.partner_id.id, + date=fields.Datetime.now(), + uom=record.product_id.uom_id.id, + )._get_real_price_currency( + product, rule_id, record.product_uom_qty, record.product_id.uom_id + ) + + if new_list_price != 0: + if record.sale_subscription_id.pricelist_id.currency_id != currency: + new_list_price = currency._convert( + new_list_price, + record.sale_subscription_id.pricelist_id.currency_id, + record.sale_subscription_id.company_id or self.env.company, + fields.Date.today(), + ) + discount = (new_list_price - price) / new_list_price * 100 + if (discount > 0 and new_list_price > 0) or ( + discount < 0 and new_list_price < 0 + ): + record.discount = discount + + def _get_real_price_currency(self, product, rule_id, qty, uom): + PricelistItem = self.env["product.pricelist.item"] + product_price = product.lst_price + currency_id = None + product_currency = product.currency_id + if rule_id: + pricelist_item = PricelistItem.browse(rule_id) + if pricelist_item.pricelist_id.discount_policy == "without_discount": + while ( + pricelist_item.base == "pricelist" + and pricelist_item.base_pricelist_id + and pricelist_item.base_pricelist_id.discount_policy + == "without_discount" + ): + _price, rule_id = pricelist_item.base_pricelist_id.with_context( + uom=uom.id + )._get_product_price_rule(product, qty) + pricelist_item = PricelistItem.browse(rule_id) + + if pricelist_item.base == "standard_price": + product_price = product.standard_price + product_currency = product.cost_currency_id + elif ( + pricelist_item.base == "pricelist" and pricelist_item.base_pricelist_id + ): + product_price = pricelist_item.base_pricelist_id._get_product_price( + product, self.product_uom_qty or 1.0, uom=self.product_id.uom_id + ) + product = product.with_context( + pricelist=pricelist_item.base_pricelist_id.id + ) + product_currency = pricelist_item.base_pricelist_id.currency_id + currency_id = pricelist_item.pricelist_id.currency_id + + if not currency_id: + currency_id = product_currency + cur_factor = 1.0 + else: + if currency_id.id == product_currency.id: + cur_factor = 1.0 + else: + cur_factor = currency_id._get_conversion_rate( + product_currency, + currency_id, + self.company_id or self.env.company, + fields.Date.today(), + ) + + product_uom = self.env.context.get("uom") or product.uom_id.id + if uom and uom.id != product_uom: + # the unit price is in a different uom + uom_factor = uom._compute_price(1.0, product.uom_id) + else: + uom_factor = 1.0 + + return product_price * uom_factor * cur_factor, currency_id + + def _get_display_price(self, product): + if self.sale_subscription_id.pricelist_id.discount_policy == "with_discount": + return self.sale_subscription_id.pricelist_id._get_product_price( + product, self.product_uom_qty or 1.0, uom=self.product_id.uom_id + ) + + final_price, rule_id = self.sale_subscription_id.pricelist_id.with_context( + partner_id=self.sale_subscription_id.partner_id.id, + date=fields.Datetime.now(), + uom=self.product_id.uom_id.id, + )._get_product_price_rule( + product or self.product_id, + self.product_uom_qty or 1.0, + ) + base_price, currency = self.with_context( + partner_id=self.sale_subscription_id.partner_id.id, + date=fields.Datetime.now(), + uom=self.product_id.uom_id.id, + )._get_real_price_currency( + product, rule_id, self.product_uom_qty, self.product_id.uom_id + ) + if currency != self.sale_subscription_id.pricelist_id.currency_id: + base_price = currency._convert( + base_price, + self.sale_subscription_id.pricelist_id.currency_id, + self.sale_subscription_id.company_id or self.env.company, + fields.Date.today(), + ) + return max(base_price, final_price) + + def _prepare_sale_order_line(self): + self.ensure_one() + return { + "product_id": self.product_id.id, + "name": self.name, + "product_uom_qty": self.product_uom_qty, + "price_unit": self.price_unit, + "discount": self.discount, + "price_subtotal": self.price_subtotal, + "tax_id": self.tax_ids, + "product_uom": self.product_id.uom_id.id, + } + + def _prepare_account_move_line(self): + self.ensure_one() + account = ( + self.product_id.property_account_income_id + or self.product_id.categ_id.property_account_income_categ_id + ) + return { + "product_id": self.product_id.id, + "name": self.name, + "quantity": self.product_uom_qty, + "price_unit": self.price_unit, + "discount": self.discount, + "price_subtotal": self.price_subtotal, + "tax_ids": [(6, 0, self.tax_ids.ids)], + "product_uom_id": self.product_id.uom_id.id, + "account_id": account.id, + } diff --git a/subscription_oca/models/sale_subscription_stage.py b/subscription_oca/models/sale_subscription_stage.py new file mode 100644 index 0000000000..8bc3961788 --- /dev/null +++ b/subscription_oca/models/sale_subscription_stage.py @@ -0,0 +1,34 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class SaleSubscriptionStage(models.Model): + _name = "sale.subscription.stage" + _description = "Subscription stage" + _order = "sequence, name, id" + + name = fields.Char(required=True, translate=True) + sequence = fields.Integer() + display_name = fields.Char(string="Display name", compute="_compute_display_name") + in_progress = fields.Boolean(string="In progress", default=False) + fold = fields.Boolean(string="Kanban folded") + description = fields.Text(translate=True) + type = fields.Selection( + [("pre", "Ready to start"), ("in_progress", "In progress"), ("post", "Closed")], + default="pre", + ) + + @api.constrains("type") + def _check_lot_product(self): + post_stages = self.env["sale.subscription.stage"].search( + [("type", "=", "post")] + ) + if len(post_stages) > 1: + raise ValidationError(_("There is already a Closed-type stage declared")) + + @api.depends("name") + def _compute_display_name(self): + for stage in self: + stage.display_name = stage.name diff --git a/subscription_oca/models/sale_subscription_tag.py b/subscription_oca/models/sale_subscription_tag.py new file mode 100644 index 0000000000..19101a160f --- /dev/null +++ b/subscription_oca/models/sale_subscription_tag.py @@ -0,0 +1,10 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class SaleSubscriptionTag(models.Model): + _name = "sale.subscription.tag" + _description = "Tags for sale subscription" + + name = fields.Char("Tag name", required=True) diff --git a/subscription_oca/models/sale_subscription_template.py b/subscription_oca/models/sale_subscription_template.py new file mode 100644 index 0000000000..df89f401b0 --- /dev/null +++ b/subscription_oca/models/sale_subscription_template.py @@ -0,0 +1,102 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from dateutil.relativedelta import relativedelta + +from odoo import api, fields, models + + +class SaleSubscriptionTemplate(models.Model): + _name = "sale.subscription.template" + _description = "Subscription templates" + + name = fields.Char(required=True) + description = fields.Text(string="Terms and conditions") + recurring_interval = fields.Integer(string="Repeat every", default=1) + recurring_rule_type = fields.Selection( + [ + ("days", "Day(s)"), + ("weeks", "Week(s)"), + ("months", "Month(s)"), + ("years", "Year(s)"), + ], + string="Recurrence", + default="months", + ) + recurring_rule_boundary = fields.Selection( + [("unlimited", "Forever"), ("limited", "Fixed")], + string="Duration", + default="unlimited", + ) + invoicing_mode = fields.Selection( + default="draft", + string="Invoicing mode", + selection=[ + ("draft", "Draft"), + ("invoice", "Invoice"), + ("invoice_send", "Invoice & send"), + ("sale_and_invoice", "Sale order & Invoice"), + ], + ) + code = fields.Char() + recurring_rule_count = fields.Integer(default=1, string="Rule count") + invoice_mail_template_id = fields.Many2one( + comodel_name="mail.template", + string="Invoice Email", + domain="[('model', '=', 'account.move')]", + ) + product_ids = fields.One2many( + comodel_name="product.template", + inverse_name="subscription_template_id", + string="Products", + ) + product_ids_count = fields.Integer( + compute="_compute_product_ids_count", string="product_ids" + ) + subscription_ids = fields.One2many( + comodel_name="sale.subscription", + inverse_name="template_id", + string="Subscriptions", + ) + subscription_count = fields.Integer( + compute="_compute_subscription_count", string="subscription_ids" + ) + + def _compute_subscription_count(self): + data = self.env["sale.subscription"].read_group( + domain=[("template_id", "in", self.ids)], + fields=["template_id"], + groupby=["template_id"], + ) + count_dict = { + item["template_id"][0]: item["template_id_count"] for item in data + } + for record in self: + record.subscription_count = count_dict.get(record.id, 0) + + def action_view_subscription_ids(self): + return { + "name": self.name, + "view_mode": "tree,form", + "res_model": "sale.subscription", + "type": "ir.actions.act_window", + "domain": [("id", "in", self.subscription_ids.ids)], + } + + def _get_date(self, date_start): + self.ensure_one() + return relativedelta(months=+self.recurring_rule_count) + date_start + + @api.depends("product_ids") + def _compute_product_ids_count(self): + for record in self: + record.product_ids_count = len(self.product_ids) + + def action_view_product_ids(self): + return { + "name": self.name, + "view_type": "form", + "view_mode": "tree,form", + "res_model": "product.template", + "type": "ir.actions.act_window", + "domain": [("id", "in", self.product_ids.ids)], + } diff --git a/subscription_oca/readme/CONTRIBUTORS.rst b/subscription_oca/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..8ddfb05210 --- /dev/null +++ b/subscription_oca/readme/CONTRIBUTORS.rst @@ -0,0 +1,7 @@ +* Carlos Martínez +* Carolina Ferrer + + +* `Ooops404 `__: + + * Ilyas diff --git a/subscription_oca/readme/DESCRIPTION.rst b/subscription_oca/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..648d69835f --- /dev/null +++ b/subscription_oca/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows creating subscriptions that generate recurring invoices or orders. It also enables the sale of products that generate subscriptions. diff --git a/subscription_oca/readme/ROADMAP.rst b/subscription_oca/readme/ROADMAP.rst new file mode 100644 index 0000000000..c6355d44b0 --- /dev/null +++ b/subscription_oca/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* Refactor all the onchanges that have business logic to computed write-able fields when possible. Keep onchanges only for UI purposes. +* Add tests. diff --git a/subscription_oca/readme/USAGE.rst b/subscription_oca/readme/USAGE.rst new file mode 100644 index 0000000000..f3ef9cf85a --- /dev/null +++ b/subscription_oca/readme/USAGE.rst @@ -0,0 +1,13 @@ +To make a subscription: + +#. Go to *Subscriptions > Configuration > Subscription templates*. +#. Create the templates you consider, choosing the billing frequency: daily, monthly... and the method of creating the invoice and/or order. +#. Go to *Subscription > Subscriptions*. +#. Create a subscription and indicate the start date. When the *Subscriptions Management* cron job is executed, the subscription will begin and the first invoice will be created if the execution date matches the start date. The invoice will also be created when the execution date matches the next invoice date. Additionally, you can manually change the subscription status and create an invoice by using the *Create Invoice* button. This action creates just an invoice even if the subscription template has the *Sale Order & Invoice* option selected, because the *Invoicing mode* option is triggered through the cron job. +#. The cron job will also end the subscription if its end date has been reached. + +To create subscriptions with the sale of a product: + +#. Go to *Subscriptions > Subscriptions > Products*. +#. Create the product and in the sales tab, complete the fields *Subscribable product* and *Subscription template* +#. Create a sales order with the product and confirm it. diff --git a/subscription_oca/security/ir.model.access.csv b/subscription_oca/security/ir.model.access.csv new file mode 100644 index 0000000000..cd0f7dba90 --- /dev/null +++ b/subscription_oca/security/ir.model.access.csv @@ -0,0 +1,8 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink +access_custom_sale_subscription_template,sale.subscription.template,model_sale_subscription_template,sales_team.group_sale_salesman,1,1,1,1 +access_custom_sale_subscription,sale.subscription,model_sale_subscription,sales_team.group_sale_salesman,1,1,1,1 +access_custom_sale_subscription_close_reason,sale.subscription.close.reason,model_sale_subscription_close_reason,sales_team.group_sale_salesman,1,1,1,1 +access_custom_sale_subscription_stage,sale.subscription.stage,model_sale_subscription_stage,sales_team.group_sale_salesman,1,1,1,1 +access_custom_sale_subscription_line,sale.subscription.line,model_sale_subscription_line,sales_team.group_sale_salesman,1,1,1,1 +access_custom_sale_subscription_tag,sale.subscription.tag,model_sale_subscription_tag,sales_team.group_sale_salesman,1,1,1,1 +access_close_subscription,Close subscription access,model_close_reason_wizard,sales_team.group_sale_salesman,1,1,1,1 diff --git a/subscription_oca/static/description/icon.png b/subscription_oca/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/subscription_oca/static/description/index.html b/subscription_oca/static/description/index.html new file mode 100644 index 0000000000..2f09cbdd62 --- /dev/null +++ b/subscription_oca/static/description/index.html @@ -0,0 +1,451 @@ + + + + + +Subscription management + + + +

    +

    Subscription management

    + + +

    Beta License: AGPL-3 OCA/contract Translate me on Weblate Try me on Runboat

    +

    This module allows creating subscriptions that generate recurring invoices or orders. It also enables the sale of products that generate subscriptions.

    +

    Table of contents

    + +
    +

    Usage

    +

    To make a subscription:

    +
      +
    1. Go to Subscriptions > Configuration > Subscription templates.
    2. +
    3. Create the templates you consider, choosing the billing frequency: daily, monthly… and the method of creating the invoice and/or order.
    4. +
    5. Go to Subscription > Subscriptions.
    6. +
    7. Create a subscription and indicate the start date. When the Subscriptions Management cron job is executed, the subscription will begin and the first invoice will be created if the execution date matches the start date. The invoice will also be created when the execution date matches the next invoice date. Additionally, you can manually change the subscription status and create an invoice by using the Create Invoice button. This action creates just an invoice even if the subscription template has the Sale Order & Invoice option selected, because the Invoicing mode option is triggered through the cron job.
    8. +
    9. The cron job will also end the subscription if its end date has been reached.
    10. +
    +

    To create subscriptions with the sale of a product:

    +
      +
    1. Go to Subscriptions > Subscriptions > Products.
    2. +
    3. Create the product and in the sales tab, complete the fields Subscribable product and Subscription template
    4. +
    5. Create a sales order with the product and confirm it.
    6. +
    +
    +
    +

    Known issues / Roadmap

    +
      +
    • Refactor all the onchanges that have business logic to computed write-able fields when possible. Keep onchanges only for UI purposes.
    • +
    • Add tests.
    • +
    +
    +
    +

    Bug Tracker

    +

    Bugs are tracked on GitHub 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.

    +

    Do not contact contributors directly about support or help with technical issues.

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Domatix
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

    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/contract project on GitHub.

    +

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    +
    +
    +
    + + diff --git a/subscription_oca/static/img/icon.png b/subscription_oca/static/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bab981dd92b92c32d5d27f100be3ff90bfa3b561 GIT binary patch literal 16096 zcmcIr1ydYNw8hmWR}cAIb8`#!clxHO2MIK+u13;gvaNHg%!QWgFOMv|kXrG;x=TT`G6`X&e> zjB>1QmQAi?s~oMW|9#iVJ%viO^UHv{jr+H^7)95`j-R>YuHx zv}vR(5h!wU^1oZblYQLCfBxS-vG%;6gvTY~@$#{8wk%KDZNOB}aVki)sqd9JXcypp z${u69@5)G`esFK%Z~^}sUVt&&mIE5lW@r0&2_?F*9BjD_gz3?*Fw$k=fHMw5f;~1Ta;k4gEPnc@*()pzF2Ot3kVD@GxM>kswSp_ssKx} z69_eu5(|llNP!CiEoR$Dj&|c#P+g5{KsIr3W-Y;SP*UXAq8Ri`jg@)q2jldZ)nNjI z2z~H0CfVUonU>7&kN8D;EV}yAt5LW#OlWBCGc&x9H)u>#TKE9*u%Aa|scK?`n)9>& zp4Xr!GfS2hKr8p}5p@MbWT&6`=UX6F&bW`)Zi#0M;&L z;Yi;XXN>ROIT|#6=d^Wi!`|XynQxef*O^uku6jlcRCRHQ{iAWr0TX}}p}@@PGYD2p z6D0hh{_PX<-kah_o~78oxSp2S~@Zsgx%WmmFmc1o%CLh zhq&im_?ZKPVl7+C2)!;+#mGXoymI19Y6n@UFan1~*Olons}6EyBju^1GEb|Zvgu|v zD}Rms2VrsxEuUd?)44?=l`m%gvcss^81zBY@L*1Y>KFKa9P{3fv_yTge$R9<&SA26z?F`*z7;^KOM6DN1NtI zp;m^aUIJ1zvf1sp8XO72YAv%QFP?0nGjFrxiRgOYgU+-RO#Q_wfu++~NJ=+wRA<

    Ui*J$|ByCo)v~>D%$XS<*DoC_r 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 MPD)9#3TzDdAGpB)Gynhq literal 0 HcmV?d00001 diff --git a/subscription_oca/tests/__init__.py b/subscription_oca/tests/__init__.py new file mode 100644 index 0000000000..f445239d7f --- /dev/null +++ b/subscription_oca/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_subscription_oca diff --git a/subscription_oca/tests/test_subscription_oca.py b/subscription_oca/tests/test_subscription_oca.py new file mode 100644 index 0000000000..0169960633 --- /dev/null +++ b/subscription_oca/tests/test_subscription_oca.py @@ -0,0 +1,657 @@ +# Copyright 2023 ooops404 +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import uuid + +from dateutil.relativedelta import relativedelta + +from odoo import exceptions, fields +from odoo.tests import TransactionCase + + +class TestSubscriptionOCA(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.portal_user = cls.env.ref("base.demo_user0") + cls.cash_journal = cls.env["account.journal"].search( + [ + ("type", "=", "cash"), + ("company_id", "=", cls.env.ref("base.main_company").id), + ] + )[0] + cls.sale_journal = cls.env["account.journal"].search( + [ + ("type", "=", "sale"), + ("company_id", "=", cls.env.ref("base.main_company").id), + ] + )[0] + cls.pricelist1 = cls.env["product.pricelist"].create( + { + "name": "pricelist for contract test", + } + ) + cls.pricelist2 = cls.env["product.pricelist"].create( + { + "name": "pricelist for contract test 2", + "discount_policy": "with_discount", + } + ) + cls.partner = cls.env["res.partner"].create( + { + "name": "partner test subscription_oca", + "property_product_pricelist": cls.pricelist1.id, + "email": "demo1@demo.com", + } + ) + cls.partner_2 = cls.env["res.partner"].create( + { + "name": "partner test subscription_oca 2", + "property_product_pricelist": cls.pricelist1.id, + "email": "demo2@demo.com", + } + ) + cls.tax_10pc_incl = cls.env["account.tax"].create( + { + "name": "10% Tax incl", + "amount_type": "percent", + "amount": 10, + "price_include": True, + } + ) + cls.product_1 = cls.env.ref("product.product_product_1") + cls.product_1.subscribable = True + cls.product_1.taxes_id = [(6, 0, cls.tax_10pc_incl.ids)] + cls.product_2 = cls.env.ref("product.product_product_2") + cls.product_2.subscribable = True + + cls.country = cls.env["res.country"].search([], limit=1) + cls.fiscal = cls.env["account.fiscal.position"].create( + { + "name": "Regime National", + "auto_apply": True, + "country_id": cls.country.id, + "vat_required": True, + "sequence": 10, + } + ) + + cls.tmpl1 = cls.create_sub_template({}) + cls.tmpl2 = cls.create_sub_template( + { + "recurring_rule_boundary": "limited", + "recurring_rule_type": "days", + } + ) + cls.tmpl3 = cls.create_sub_template( + { + "recurring_rule_boundary": "unlimited", + "recurring_rule_type": "weeks", + } + ) + cls.tmpl4 = cls.create_sub_template( + { + "recurring_rule_boundary": "limited", + "invoicing_mode": "invoice", + "recurring_rule_type": "years", + } + ) + cls.tmpl5 = cls.create_sub_template( + { + "recurring_rule_boundary": "unlimited", + "invoicing_mode": "invoice", + "recurring_rule_type": "days", + } + ) + + cls.stage = cls.env["sale.subscription.stage"].create( + { + "name": "Test Sub Stage", + } + ) + cls.stage_2 = cls.env["sale.subscription.stage"].create( + { + "name": "Test Sub Stage 2", + "type": "pre", + } + ) + cls.tag = cls.env["sale.subscription.tag"].create( + { + "name": "Test Tag", + } + ) + + cls.sub1 = cls.create_sub({}) + cls.sub2 = cls.create_sub( + { + "template_id": cls.tmpl3.id, + } + ) + cls.sub3 = cls.create_sub( + { + "template_id": cls.tmpl2.id, + "pricelist_id": cls.pricelist2.id, + } + ) + cls.sub4 = cls.create_sub( + { + "template_id": cls.tmpl3.id, + "recurring_rule_boundary": False, + "date_start": fields.Date.today(), + } + ) + cls.sub5 = cls.create_sub( + { + "template_id": cls.tmpl4.id, + "pricelist_id": cls.pricelist2.id, + "date_start": fields.Date.today(), + "recurring_next_date": fields.Date.today() - relativedelta(days=1), + } + ) + cls.sub6 = cls.create_sub( + { + "template_id": cls.tmpl5.id, + "recurring_rule_boundary": False, + "date_start": "2099-01-01", + } + ) + cls.sub7 = cls.create_sub( + { + "template_id": cls.tmpl2.id, + "pricelist_id": cls.pricelist2.id, + "date_start": fields.Date.today() - relativedelta(days=100), + "in_progress": True, + } + ) + cls.sub8 = cls.create_sub( + { + "template_id": cls.tmpl2.id, + "pricelist_id": cls.pricelist2.id, + "date_start": fields.Date.today() - relativedelta(days=100), + "in_progress": True, + "journal_id": cls.cash_journal.id, + } + ) + + cls.sub_line = cls.create_sub_line(cls.sub1) + cls.sub_line2 = cls.env["sale.subscription.line"].create( + { + "company_id": 1, + "sale_subscription_id": cls.sub1.id, + } + ) + cls.sub_line21 = cls.create_sub_line(cls.sub2) + cls.sub_line22 = cls.create_sub_line(cls.sub2, cls.product_2.id) + cls.sub_line31 = cls.create_sub_line(cls.sub3) + cls.sub_line32 = cls.create_sub_line(cls.sub3, cls.product_2.id) + cls.sub_line41 = cls.create_sub_line(cls.sub4) + cls.sub_line42 = cls.create_sub_line(cls.sub4, cls.product_2.id) + cls.sub_line51 = cls.create_sub_line(cls.sub5) + cls.sub_line52 = cls.create_sub_line(cls.sub5, cls.product_2.id) + cls.sub_line71 = cls.create_sub_line(cls.sub7) + cls.sub_line72 = cls.create_sub_line(cls.sub7, cls.product_2.id) + + cls.close_reason = cls.env["sale.subscription.close.reason"].create( + { + "name": "Test Close Reason", + } + ) + cls.sub_line2.read(["name", "price_unit"]) + cls.sub_line2.unlink() + + # Pricelists. + cls.pricelist_default = cls.env.ref("product.list0") + cls.pricelist_l1 = cls._create_price_list("Level 1") + cls.pricelist_l2 = cls._create_price_list("Level 2") + cls.pricelist_l3 = cls._create_price_list("Level 3") + cls.env["product.pricelist.item"].create( + { + "pricelist_id": cls.pricelist_l3.id, + "applied_on": "0_product_variant", + "compute_price": "formula", + "base": "pricelist", + "base_pricelist_id": cls.pricelist_l1.id, + "product_id": cls.product_1.id, + } + ) + cls.env["product.pricelist.item"].create( + { + "pricelist_id": cls.pricelist_l2.id, + "applied_on": "3_global", + "compute_price": "formula", + "base": "pricelist", + "base_pricelist_id": cls.pricelist_l1.id, + } + ) + cls.env["product.pricelist.item"].create( + { + "pricelist_id": cls.pricelist_l1.id, + "applied_on": "3_global", + "compute_price": "formula", + "base": "standard_price", + "fixed_price": 1000, + } + ) + + @classmethod + def create_sub_template(cls, vals): + code = str(uuid.uuid4().hex) + default_vals = { + "name": "Test Template " + code, + "code": code, + "description": "Some sort of subscription terms", + "product_ids": [(6, 0, [cls.product_1.id, cls.product_2.id])], + } + default_vals.update(vals) + rec = cls.env["sale.subscription.template"].create(default_vals) + return rec + + @classmethod + def create_sub(cls, vals): + default_vals = { + "company_id": 1, + "partner_id": cls.partner.id, + "template_id": cls.tmpl1.id, + "tag_ids": [(6, 0, [cls.tag.id])], + "stage_id": cls.stage.id, + "pricelist_id": cls.pricelist1.id, + "fiscal_position_id": cls.fiscal.id, + } + default_vals.update(vals) + rec = cls.env["sale.subscription"].create(default_vals) + return rec + + @classmethod + def create_sub_line(cls, sub, prod=None): + ssl = cls.env["sale.subscription.line"].create( + { + "company_id": 1, + "sale_subscription_id": sub.id, + "product_id": prod or cls.product_1.id, + } + ) + return ssl + + @classmethod + def _create_price_list(cls, name): + return cls.env["product.pricelist"].create( + { + "name": name, + "active": True, + "currency_id": cls.env.ref("base.USD").id, + "company_id": cls.env.user.company_id.id, + } + ) + + def test_subscription_oca_sale_order(self): + # SO standard flow + so = self.env["sale.order"].create( + { + "partner_id": self.partner.id, + "partner_invoice_id": self.partner.id, + "partner_shipping_id": self.partner.id, + "order_line": [ + ( + 0, + 0, + { + "name": self.product_1.name, + "product_id": self.product_1.id, + "product_uom_qty": 2, + "product_uom": self.product_1.uom_id.id, + "price_unit": self.product_1.list_price, + }, + ) + ], + } + ) + so._compute_subscriptions_count() + self.assertEqual(so.subscriptions_count, 0) + action = so.action_view_subscriptions() + self.assertIsInstance(action, dict) + so.with_context(uid=1).action_confirm() # without subs. + + def test_subscription_oca_sub_lines(self): + # sale.subscription.line + self.assertEqual(self.sub_line.name, self.sub_line.product_id.name) + self.assertIsNotNone(self.sub_line.tax_ids) + self.assertEqual(self.sub_line.price_unit, 30.75) + self.assertEqual(self.sub_line.discount, 0) + res = self.sub_line._get_display_price(self.product_2) + self.assertEqual(res, 38.25) + sol_res = self.sub_line._prepare_sale_order_line() + self.assertIsInstance(sol_res, dict) + move_res = self.sub_line._prepare_account_move_line() + self.assertIsInstance(move_res, dict) + + def test_subscription_oca_sub_cron(self): + # sale.subscription + self.sub1.cron_subscription_management() + # invoice should be created by cron + inv_id = self.env["account.move"].search( + [("subscription_id", "=", self.sub1.id)] + ) + self.assertEqual(len(inv_id), 1) + self.assertEqual(self.sub1.recurring_total, 27.95) + self.assertEqual(self.sub1.amount_total, 30.75) + self.assertEqual(self.sub2.recurring_total, 66.2) + self.assertEqual(self.sub2.amount_total, 69) + + def test_subscription_oca_sub1_workflow(self): + res = self._collect_all_sub_test_results(self.sub1) + self.assertTrue(res[0]) + self.assertTrue(res[1]) + self.assertEqual(res[3], 2) + self.assertEqual(res[4], 2 * 30.75) + self.assertEqual(res[5], 2) + self.assertEqual(res[7], 1) + self.assertEqual( + res[9], + fields.Date.today() + relativedelta(months=1), + ) + self.assertEqual(res[10], self.partner_2.property_product_pricelist.id) + self.assertFalse(res[11]) + self.assertEqual(res[12], "ir.actions.act_window") + + def test_subscription_oca_sub2_workflow(self): + res = self._collect_all_sub_test_results(self.sub2) + self.assertTrue(res[0]) + self.assertTrue(res[1]) + self.assertEqual(res[3], 2) + self.assertEqual(res[4], 138) + self.assertEqual(res[5], 2) + self.assertEqual(res[7], 1) + self.assertEqual( + res[9], + fields.Date.today() + relativedelta(weeks=1), + ) + self.assertEqual(res[10], self.partner_2.property_product_pricelist.id) + self.assertFalse(res[11]) + + def test_subscription_oca_sub3_workflow(self): + res = self._collect_all_sub_test_results(self.sub3) + self.assertTrue(res[0]) + self.assertTrue(res[1]) + self.assertEqual(res[3], 2) + self.assertEqual(res[4], 138) + self.assertEqual(res[5], 2) + self.assertEqual(res[6], "ir.actions.act_window") + self.assertEqual(res[7], 1) + self.assertEqual( + res[9], + fields.Date.today() + relativedelta(days=1), + ) + self.assertEqual(res[10], self.partner_2.property_product_pricelist.id) + self.assertFalse(res[11]) + + def test_subscription_oca_sub4_workflow(self): + res = self._collect_all_sub_test_results(self.sub4) + self.assertTrue(res[0]) + self.assertTrue(res[1]) + self.assertEqual(res[2], "ir.actions.act_window") + self.assertEqual(res[3], 2) + self.assertEqual(res[4], 138) + self.assertEqual(res[5], 2) + self.assertEqual(res[7], 1) + self.assertEqual( + res[9], + fields.Date.today() + relativedelta(weeks=1), + ) + self.assertEqual(res[10], self.partner_2.property_product_pricelist.id) + self.assertFalse(res[11]) + + def test_subscription_oca_sub5_workflow(self): + res = self._collect_all_sub_test_results(self.sub5) + self.assertTrue(res[0]) + self.assertTrue(res[1]) + self.assertEqual(res[3], 2) + self.assertEqual(res[4], 138) + self.assertEqual(res[5], 2) + self.assertEqual(res[7], 1) + self.assertEqual( + res[9], + fields.Date.today() + relativedelta(years=1), + ) + self.assertEqual(res[10], self.partner_2.property_product_pricelist.id) + self.assertFalse(res[11]) + self.sub5.recurring_next_date = fields.Date.today() + self.sub5.template_id = self.tmpl5 + self.sub5._onchange_template_id() + self.sub5.invoice_ids.unlink() + self.sub5._onchange_template_id() + + def test_subscription_oca_sub7_workflow(self): + res = self._collect_all_sub_test_results(self.sub7.with_context(uom=2)) + self.assertTrue(res[0]) + self.assertTrue(res[1]) + self.assertEqual(res[3], 2) + self.assertEqual(res[4], 138) + self.assertEqual(res[5], 2) + self.assertEqual(res[7], 1) + self.assertEqual( + res[9], + fields.Date.today() + relativedelta(days=1), + ) + self.assertEqual(res[10], self.partner_2.property_product_pricelist.id) + self.assertFalse(res[11]) + + def test_subscription_oca_sub8_workflow(self): + subscription = self.sub8 + subscription.create_sale_order() + with self.assertRaises(exceptions.UserError): + subscription.create_invoice() + self.sub8.journal_id = self.sale_journal + subscription.create_invoice() + self.sub8.template_id.invoicing_mode = "invoice" + with self.assertRaises(exceptions.UserError): + subscription.generate_invoice() + self.sub8.template_id.invoicing_mode = "invoice_send" + with self.assertRaises(exceptions.UserError): + subscription.generate_invoice() + self.sub8.template_id.invoicing_mode = "sale_and_invoice" + with self.assertRaises(exceptions.UserError): + subscription.generate_invoice() + # add lines and repeat + self.sub_line81 = self.env["sale.subscription.line"].create( + { + "company_id": 1, + "sale_subscription_id": self.sub8.id, + "product_id": self.product_1.id, + } + ) + self.sub_line82 = self.env["sale.subscription.line"].create( + { + "company_id": 1, + "sale_subscription_id": self.sub8.id, + "product_id": self.product_2.id, + } + ) + subscription.create_sale_order() + subscription.create_invoice() + subscription.journal_id = self.sale_journal + subscription.create_invoice() + subscription.template_id.invoicing_mode = "invoice" + subscription.generate_invoice() + subscription.template_id.invoicing_mode = "invoice_send" + subscription.generate_invoice() + subscription.template_id.invoicing_mode = "sale_and_invoice" + order = subscription.create_sale_order() + order.with_context(uid=1).action_confirm() + subscription.sale_subscription_line_ids.mapped("product_id").write( + {"invoice_policy": "order"} + ) + subscription.generate_invoice() + subscription._check_dates("2099-01-01", "2099-01-01") + subscription._check_dates("2098-01-01", "2099-01-01") + subscription._check_dates("2098-01-01", "2097-01-01") + subscription._check_dates(fields.Date.today(), fields.Date.today()) + subscription._check_dates(fields.Datetime.now(), fields.Datetime.now()) + subscription.write({"stage_id": self.stage_2}) + + def test_subscription_oca_sub8_workflow_portal(self): + # portal user + subscription = self.sub8.with_user(self.portal_user) + sale_order = subscription.create_sale_order() + self.assertFalse(sale_order) + move_id = subscription.with_user(self.portal_user).create_invoice() + self.assertFalse(move_id) + with self.assertRaises(exceptions.AccessError): + subscription.manual_invoice() + with self.assertRaises(exceptions.AccessError): + subscription.calculate_recurring_next_date(fields.Datetime.now()) + with self.assertRaises(exceptions.AccessError): + subscription.partner_id = self.partner_2 + + def test_subscription_oca_sub_stage(self): + # sale.subscription.stage + self.stage._check_lot_product() # should not raise + + def test_x_subscription_oca_pricelist_related(self): + res = self.partner.read(["subscription_count", "subscription_ids"]) + self.assertEqual(res[0]["subscription_count"], 8) + res = self.partner.action_view_subscription_ids() + self.assertIsInstance(res, dict) + sale_order = self.sub1.create_sale_order() + sale_order.with_context(uid=1).create_subscription( + sale_order.order_line, self.tmpl1 + ) + sale_order.get_next_interval( + self.tmpl1.recurring_rule_type, self.tmpl1.recurring_interval + ) + self.sub_line.sale_subscription_id.pricelist_id.discount_policy = ( + "without_discount" + ) + self.sub_line.product_uom_qty = 100 + self.env.user.groups_id = [ + (4, self.env.ref("product.group_discount_per_so_line").id) + ] + disc = self.sub_line.read(["discount"]) + self.assertEqual(disc[0]["discount"], 0) + wiz = self.env["close.reason.wizard"].create({}) + wiz.with_context(active_id=self.sub1.id).button_confirm() + self.assertEqual(self.sub1.stage_id.name, "Closed") + self.assertFalse(self.sub1.active) + self.tmpl1.action_view_subscription_ids() + self.tmpl1.action_view_product_ids() + self.tmpl1.read(["product_ids_count", "subscription_count"]) + with self.assertRaises(exceptions.ValidationError): + self.env["sale.subscription.stage"].create( + { + "name": "Test Sub Stage", + "type": "post", + } + ) + pricelist = self.sub_line.sale_subscription_id.pricelist_id.copy( + {"currency_id": self.env.ref("base.THB").id} + ) + item1 = self.env["product.pricelist.item"].create( + { + "pricelist_id": pricelist.id, + "product_id": self.product_1.product_variant_id.id, + "name": "Test special rule 1", + "applied_on": "0_product_variant", + "price": 3, + } + ) + self.sub_line.sale_subscription_id.pricelist_id = pricelist + self.sub_line.product_uom_qty = 200 + res = self.sub_line.read(["discount"]) + self.assertEqual(res[0]["discount"], 100) + item1.unlink() + self.env["product.pricelist.item"].create( + { + "pricelist_id": pricelist.id, + "product_id": self.product_1.product_variant_id.id, + "name": "Test special rule 2", + "base": "pricelist", + "base_pricelist_id": self.pricelist1.id, + "applied_on": "0_product_variant", + } + ) + self.env["product.pricelist.item"].create( + { + "pricelist_id": self.pricelist1.id, + "product_id": self.product_1.product_variant_id.id, + "name": "Test special rule 3", + "applied_on": "0_product_variant", + "base": "standard_price", + } + ) + self.sub_line.sale_subscription_id.pricelist_id = pricelist + self.sub_line.product_uom_qty = 300 + res = self.sub_line.read(["discount"]) + self.assertEqual(res[0]["discount"], 100) + + def test_x_subscription_oca_pricelist_related_2(self): + self.pricelist_l3.discount_policy = "without_discount" + self.pricelist_l3.currency_id = self.env.ref("base.THB") + self.sub_line.sale_subscription_id.pricelist_id = self.pricelist_l3 + res = self.sub_line._get_display_price(self.product_1) + self.assertAlmostEqual(int(res), 514) + self.sub_line.product_uom_qty = 300 + res = self.sub_line.read(["discount"]) + self.assertEqual(res[0]["discount"], 0) + + def test_compute_display_name(self): + stage = self.env["sale.subscription.stage"].create( + { + "name": "Test Stage", + "type": "pre", + } + ) + self.assertEqual(stage.display_name, "Test Stage", "display_name not computed") + stage.name = "Updated Test Stage" + stage._compute_display_name() + self.assertEqual( + stage.display_name, "Updated Test Stage", "display_name not computed" + ) + + def _collect_all_sub_test_results(self, subscription): + test_res = [] + sale_order = subscription.create_sale_order() + test_res.append(sale_order) + move_id = subscription.create_invoice() + test_res.append(move_id) + res = subscription.manual_invoice() + test_res.append(res["type"]) + inv_ids = self.env["account.move"].search( + [("subscription_id", "=", subscription.id)] + ) + # self.assertEqual(len(inv_ids), 2) + # self.assertEqual(sum(inv_ids.mapped("amount_total")), 2 * 30.75) + # self.assertEqual(subscription.account_invoice_ids_count, 2) + test_res.append(len(inv_ids)) + test_res.append(sum(inv_ids.mapped("amount_total"))) + test_res.append(subscription.account_invoice_ids_count) + res = subscription.action_view_account_invoice_ids() + # self.assertEqual(res["type"], "ir.actions.act_window") + # self.assertEqual(subscription.sale_order_ids_count, 1) + test_res.append(res["type"]) + test_res.append(subscription.sale_order_ids_count) + subscription.action_view_sale_order_ids() + # self.assertIn(str(subscription.sale_order_ids.id), str(res["domain"])) + test_res.append(subscription.sale_order_ids.id) + subscription.calculate_recurring_next_date(fields.Datetime.now()) + # self.assertEqual( + # subscription.recurring_next_date, + # fields.Date.today() + relativedelta(months=1), + # ) + test_res.append(subscription.recurring_next_date) + subscription.partner_id = self.partner_2 + subscription.onchange_partner_id() + # self.assertEqual( + # subscription.pricelist_id.id, self.partner_2.property_product_pricelist.id + # ) + test_res.append(subscription.pricelist_id.id) + subscription.onchange_partner_id_fpos() + # self.assertFalse(subscription.fiscal_position_id) + test_res.append(subscription.fiscal_position_id) + res = subscription.action_close_subscription() + self.assertEqual(res["type"], "ir.actions.act_window") + test_res.append(res["type"]) + group_stage_ids = subscription._read_group_stage_ids( + stages=self.env["sale.subscription.stage"].search([]), domain=[], order="id" + ) + test_res.append(group_stage_ids) + return test_res diff --git a/subscription_oca/views/product_template_views.xml b/subscription_oca/views/product_template_views.xml new file mode 100644 index 0000000000..0ef00a86bc --- /dev/null +++ b/subscription_oca/views/product_template_views.xml @@ -0,0 +1,20 @@ + + + + product.template.sub.form + product.template + + + + + + + + + + + + diff --git a/subscription_oca/views/res_partner_views.xml b/subscription_oca/views/res_partner_views.xml new file mode 100644 index 0000000000..3be7a6690a --- /dev/null +++ b/subscription_oca/views/res_partner_views.xml @@ -0,0 +1,28 @@ + + + + + res.partner.form + res.partner + + + + + + + diff --git a/subscription_oca/views/sale_order_views.xml b/subscription_oca/views/sale_order_views.xml new file mode 100644 index 0000000000..674776bf1c --- /dev/null +++ b/subscription_oca/views/sale_order_views.xml @@ -0,0 +1,29 @@ + + + + view.sale_order.form + sale.order + + + + +

    + +
    + + + + + diff --git a/subscription_oca/views/sale_subscription_stage_views.xml b/subscription_oca/views/sale_subscription_stage_views.xml new file mode 100644 index 0000000000..7ef0d8ad79 --- /dev/null +++ b/subscription_oca/views/sale_subscription_stage_views.xml @@ -0,0 +1,71 @@ + + + + + view.subscription.stage.form + sale.subscription.stage + +
    + + + + + + + + + + + + + +
    +
    +
    + + + view.subscription.stage.tree + sale.subscription.stage + + + + + + + + + + Susbcription stages + sale.subscription.stage + tree,form + +

    + Click to create a new subscription stage. +

    +
    +
    + + + +
    diff --git a/subscription_oca/views/sale_subscription_tag_views.xml b/subscription_oca/views/sale_subscription_tag_views.xml new file mode 100644 index 0000000000..d5997c98c1 --- /dev/null +++ b/subscription_oca/views/sale_subscription_tag_views.xml @@ -0,0 +1,27 @@ + + + + view.sale.subscription.tag.tree + sale.subscription.tag + + + + + + + + + Tags + sale.subscription.tag + tree + + + + + diff --git a/subscription_oca/views/sale_subscription_template_views.xml b/subscription_oca/views/sale_subscription_template_views.xml new file mode 100644 index 0000000000..f6ac959cea --- /dev/null +++ b/subscription_oca/views/sale_subscription_template_views.xml @@ -0,0 +1,131 @@ + + + + + sale.subscription.template.form + sale.subscription.template + + +
    + +
    + + +
    +
    +

    + +

    +
    + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + sale.subscription.template.tree + sale.subscription.template + + + + + + + + + + + Subscription templates + sale.subscription.template + tree,form + + + +
    diff --git a/subscription_oca/views/sale_subscription_views.xml b/subscription_oca/views/sale_subscription_views.xml new file mode 100644 index 0000000000..9a7dafa0a9 --- /dev/null +++ b/subscription_oca/views/sale_subscription_views.xml @@ -0,0 +1,473 @@ + + + + + sale.subscription.form + sale.subscription + +
    +
    +
    + + +
    + + + + +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +
    +
    + + + sale.subscription.tree + sale.subscription + + + + + + + + + + + + + + + + + + + sale.subscription.kanban + sale.subscription + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    +
    + +
    + +
    + +
    + + + , + + + + +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + + sale.order.pending.filter + sale.subscription + + + + + + + + + + product.suscribable.filter + product.template + + + + + + + + + + view.subscription.close.reason.tree + sale.subscription.close.reason + + + + + + + + + Close reasons + sale.subscription.close.reason + tree + + + + Subscriptions + sale.subscription + tree,kanban,form + + + + Products + product.template + tree,form + + {'search_default_subsproducts': True, "default_type": "service", "default_subscribable": True} + + + + + + + + + + + + + + + +
    diff --git a/subscription_oca/wizard/__init__.py b/subscription_oca/wizard/__init__.py new file mode 100644 index 0000000000..a1aca59def --- /dev/null +++ b/subscription_oca/wizard/__init__.py @@ -0,0 +1 @@ +from . import close_subscription_wizard diff --git a/subscription_oca/wizard/close_subscription_wizard.py b/subscription_oca/wizard/close_subscription_wizard.py new file mode 100644 index 0000000000..1f38879e40 --- /dev/null +++ b/subscription_oca/wizard/close_subscription_wizard.py @@ -0,0 +1,25 @@ +# Copyright 2023 Domatix - Carlos Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class CloseSubscriptionWizard(models.TransientModel): + _name = "close.reason.wizard" + _description = "Close reason wizard" + + close_reason_id = fields.Many2one( + comodel_name="sale.subscription.close.reason", string="Reason" + ) + + def button_confirm(self): + sale_subscription = self.env["sale.subscription"].browse( + self.env.context["active_id"] + ) + sale_subscription.close_reason_id = self.close_reason_id.id + stage = sale_subscription.stage_id + closed_stage = self.env["sale.subscription.stage"].search( + [("type", "=", "post")], limit=1 + ) + if stage != closed_stage: + sale_subscription.stage_id = closed_stage + sale_subscription.active = False diff --git a/subscription_oca/wizard/close_subscription_wizard.xml b/subscription_oca/wizard/close_subscription_wizard.xml new file mode 100644 index 0000000000..132a897227 --- /dev/null +++ b/subscription_oca/wizard/close_subscription_wizard.xml @@ -0,0 +1,30 @@ + + + + close.reason.wizard.view + close.reason.wizard + +
    + + + +
    +
    +
    +
    +
    + + + Close reason + close.reason.wizard + form + new + +
    diff --git a/web_widget_datepicker_fulloptions/README.rst b/web_widget_datepicker_fulloptions/README.rst new file mode 100644 index 0000000000..6c079a274a --- /dev/null +++ b/web_widget_datepicker_fulloptions/README.rst @@ -0,0 +1,85 @@ +================================== +Web Widget DatePicker Full Options +================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5cc5388c1796a804d92121313d4d48a9080f3173acf9dbafe6b2da73f9ae2241 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/16.0/web_widget_datepicker_fulloptions + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_widget_datepicker_fulloptions + :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/web&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module enables full options in datepicker used in date fields : +- Choose today's date in one click +- Two buttons enabled : choosing today and closing datepicker with selected date + +.. figure:: https://raw.githubusercontent.com/OCA/web/16.0/web_widget_datepicker_fulloptions/static/description/change.png + +Clearing field doesn't work because there is a left 'todo' in Odoo core code +here : https://github.com/odoo/odoo/blob/16.0/addons/web/static/lib/tempusdominus/tempusdominus.js#L1341 + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* `GRAP `_: + + * Quentin DUPONT + +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/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_widget_datepicker_fulloptions/__init__.py b/web_widget_datepicker_fulloptions/__init__.py new file mode 100644 index 0000000000..ef5ae3587f --- /dev/null +++ b/web_widget_datepicker_fulloptions/__init__.py @@ -0,0 +1 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/web_widget_datepicker_fulloptions/__manifest__.py b/web_widget_datepicker_fulloptions/__manifest__.py new file mode 100644 index 0000000000..013d12c2cb --- /dev/null +++ b/web_widget_datepicker_fulloptions/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2021 Quentin DUPONT +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Web Widget DatePicker Full Options", + "version": "16.0.1.0.0", + "author": "GRAP, " "Odoo Community Association (OCA)", + "license": "AGPL-3", + "category": "Web", + "website": "https://github.com/OCA/web", + "installable": True, + "depends": [ + "web", + ], + "assets": { + "web.assets_backend": [ + "web_widget_datepicker_fulloptions/static/src/js/" + "web_widget_datepicker_fulloptions.esm.js" + ], + }, +} diff --git a/web_widget_datepicker_fulloptions/i18n/it.po b/web_widget_datepicker_fulloptions/i18n/it.po new file mode 100644 index 0000000000..73388557f6 --- /dev/null +++ b/web_widget_datepicker_fulloptions/i18n/it.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" diff --git a/web_widget_datepicker_fulloptions/i18n/pt_BR.po b/web_widget_datepicker_fulloptions/i18n/pt_BR.po new file mode 100644 index 0000000000..e69de29bb2 diff --git a/web_widget_datepicker_fulloptions/i18n/web_widget_datepicker_fulloptions.pot b/web_widget_datepicker_fulloptions/i18n/web_widget_datepicker_fulloptions.pot new file mode 100644 index 0000000000..78d58d53fe --- /dev/null +++ b/web_widget_datepicker_fulloptions/i18n/web_widget_datepicker_fulloptions.pot @@ -0,0 +1,13 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +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" diff --git a/web_widget_datepicker_fulloptions/readme/CONTRIBUTORS.rst b/web_widget_datepicker_fulloptions/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..65f8f81d13 --- /dev/null +++ b/web_widget_datepicker_fulloptions/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `GRAP `_: + + * Quentin DUPONT diff --git a/web_widget_datepicker_fulloptions/readme/DESCRIPTION.rst b/web_widget_datepicker_fulloptions/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..eb5d551295 --- /dev/null +++ b/web_widget_datepicker_fulloptions/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +This module enables full options in datepicker used in date fields : +- Choose today's date in one click +- Two buttons enabled : choosing today and closing datepicker with selected date + +.. figure:: ../static/description/change.png + +Clearing field doesn't work because there is a left 'todo' in Odoo core code +here : https://github.com/odoo/odoo/blob/16.0/addons/web/static/lib/tempusdominus/tempusdominus.js#L1341 diff --git a/web_widget_datepicker_fulloptions/static/description/change.png b/web_widget_datepicker_fulloptions/static/description/change.png new file mode 100644 index 0000000000000000000000000000000000000000..f12696272ca7e82ff7c70d1fa3df37879ad093e9 GIT binary patch literal 31877 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 MQi_tr;=11d2lo-p6951J literal 0 HcmV?d00001 diff --git a/web_widget_datepicker_fulloptions/static/description/icon.png b/web_widget_datepicker_fulloptions/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1807ff86b71890d230b7521667f570bf8064e7f0 GIT binary patch literal 16484 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 KD-$sY{67HLe&f>s literal 0 HcmV?d00001 diff --git a/web_widget_datepicker_fulloptions/static/description/index.html b/web_widget_datepicker_fulloptions/static/description/index.html new file mode 100644 index 0000000000..96697d5103 --- /dev/null +++ b/web_widget_datepicker_fulloptions/static/description/index.html @@ -0,0 +1,431 @@ + + + + + + +Web Widget DatePicker Full Options + + + + + + diff --git a/web_widget_datepicker_fulloptions/static/src/js/web_widget_datepicker_fulloptions.esm.js b/web_widget_datepicker_fulloptions/static/src/js/web_widget_datepicker_fulloptions.esm.js new file mode 100644 index 0000000000..6b67a15c97 --- /dev/null +++ b/web_widget_datepicker_fulloptions/static/src/js/web_widget_datepicker_fulloptions.esm.js @@ -0,0 +1,11 @@ +/* @odoo-module */ + +import {DatePicker} from "@web/core/datepicker/datepicker"; + +Object.assign(DatePicker.defaultProps, { + buttons: { + showClear: true, + showClose: true, + showToday: true, + }, +}); diff --git a/website_require_login/i18n/de.po b/website_require_login/i18n/de.po new file mode 100644 index 0000000000..11ccbf51c7 --- /dev/null +++ b/website_require_login/i18n/de.po @@ -0,0 +1,88 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-19 09:36+0000\n" +"Last-Translator: jappi00 \n" +"Language-Team: none\n" +"Language: de\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: website_require_login +#: model:ir.actions.act_window,name:website_require_login.action_website_auth_url +#: model:ir.model,name:website_require_login.model_website_auth_url +#: model:ir.ui.menu,name:website_require_login.menu_website_auth_url +msgid "Authorization required URLs" +msgstr "Autorisierungspflichtige URLs" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: website_require_login +#: model:ir.model,name:website_require_login.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Route" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__id +msgid "ID" +msgstr "" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url____last_update +msgid "Last Modified on" +msgstr "" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__write_date +msgid "Last Updated on" +msgstr "" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__path +msgid "Path" +msgstr "Pfad" + +#. module: website_require_login +#: model:ir.model.fields,help:website_require_login.field_website_auth_url__path +msgid "" +"Relative URL path and subpath. Ex.: /shop will restrict /shop, " +"/shop/product, etc." +msgstr "" +"Relativer URL-Pfad und Unterpfad. Beispiel: /shop schränkt /shop, /shop/" +"product, etc. ein." + +#. module: website_require_login +#: model:ir.model.constraint,message:website_require_login.constraint_website_auth_url_path_unique +msgid "The path must be unique per website!" +msgstr "Der Pfad muss pro Website eindeutig sein!" + +#. module: website_require_login +#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__website_id +msgid "Website" +msgstr ""
    +

    Web Widget DatePicker Full Options

    + + +

    Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runboat

    +

    This module enables full options in datepicker used in date fields : +- Choose today’s date in one click +- Two buttons enabled : choosing today and closing datepicker with selected date

    +
    +https://raw.githubusercontent.com/OCA/web/16.0/web_widget_datepicker_fulloptions/static/description/change.png +
    +

    Clearing field doesn’t work because there is a left ‘todo’ in Odoo core code +here : https://github.com/odoo/odoo/blob/16.0/addons/web/static/lib/tempusdominus/tempusdominus.js#L1341

    +

    Table of contents

    + +
    +

    Bug Tracker

    +

    Bugs are tracked on GitHub 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.

    +

    Do not contact contributors directly about support or help with technical issues.

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • GRAP
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

    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/web project on GitHub.

    +

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    +
    +
    +