├── .gitignore ├── account_invoice_margin ├── __init__.py ├── __manifest__.py ├── account_invoice.py ├── account_invoice_report.py └── account_invoice_view.xml ├── account_invoice_update_wizard ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── account_move.py ├── security │ └── ir.model.access.csv ├── tests │ ├── __init__.py │ └── test_account_move_update_wizard.py ├── views │ └── account_move.xml └── wizard │ ├── __init__.py │ ├── account_move_update.py │ └── account_move_update_view.xml ├── account_invoice_update_wizard_payment_mode ├── README.rst ├── __init__.py ├── __manifest__.py ├── views │ └── account_move.xml └── wizard │ ├── __init__.py │ ├── account_move_update.py │ └── account_move_update_view.xml ├── account_move_label_copy ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── account_move.py └── views │ └── account_move.xml ├── account_product_fiscal_classification_pos_sale ├── __init__.py ├── __manifest__.py └── report │ ├── __init__.py │ ├── sale_report.py │ └── sale_report_view.xml ├── account_usability_akretion ├── README.rst ├── __init__.py ├── __manifest__.py ├── account-oca_localization.diff ├── dashboard-balance_plus_outstanding.diff ├── hooks.py ├── i18n │ └── fr.po ├── invoice_register_payment_writeoff_analytic.diff ├── models │ ├── __init__.py │ ├── account_analytic_account.py │ ├── account_incoterms.py │ ├── account_invoice_report.py │ ├── account_journal.py │ ├── account_move.py │ ├── account_move_line.py │ ├── account_partial_reconcile.py │ ├── product.py │ ├── res_company.py │ └── res_partner.py ├── pyproject.toml ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst ├── report │ └── invoice_report.xml ├── security │ └── ir.model.access.csv ├── static │ ├── description │ │ ├── icon.png │ │ └── index.html │ └── src │ │ └── xml │ │ └── account_payment.xml ├── views │ ├── account_account.xml │ ├── account_analytic_line.xml │ ├── account_bank_statement.xml │ ├── account_group.xml │ ├── account_invoice_report.xml │ ├── account_journal.xml │ ├── account_menu.xml │ ├── account_move.xml │ ├── account_move_line.xml │ ├── account_payment.xml │ ├── account_report.xml │ ├── account_tax.xml │ ├── product.xml │ ├── res_company.xml │ └── res_partner.xml └── wizards │ ├── __init__.py │ ├── account_group_generate.py │ ├── account_group_generate_view.xml │ ├── account_invoice_mark_sent.py │ ├── account_invoice_mark_sent_view.xml │ ├── account_move_reversal.py │ └── account_move_reversal.xml ├── base_company_extension ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── res_company.py ├── pyproject.toml ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst ├── static │ └── description │ │ ├── icon.png │ │ └── index.html └── views │ └── res_company.xml ├── base_dynamic_list ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── dynamic_list.py ├── security │ └── ir.model.access.csv └── views │ └── dynamic_list.xml ├── base_mail_sender_bcc ├── __init__.py ├── __manifest__.py └── models │ ├── __init__.py │ └── ir_mail_server.py ├── base_partner_one2many_phone ├── __init__.py ├── __manifest__.py ├── i18n │ ├── base_partner_one2many_phone.pot │ └── fr.po ├── models │ ├── __init__.py │ ├── res_partner.py │ └── res_partner_phone.py ├── post_install.py ├── security │ └── ir.model.access.csv ├── tests │ ├── __init__.py │ └── test_partner_phone.py └── views │ ├── res_partner.xml │ └── res_partner_phone.xml ├── base_partner_ref ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── res_partner.py ├── post_install.py ├── pyproject.toml ├── static │ └── description │ │ └── icon.png └── views │ └── res_partner.xml ├── base_profile_akretion ├── __init__.py ├── __manifest__.py ├── pyproject.toml └── static │ └── description │ └── icon.png ├── base_usability_akretion ├── README.rst ├── __init__.py ├── __manifest__.py ├── fix-odoo-base-multi-company-partners-not-shared.diff ├── i18n │ ├── base_usability.pot │ └── fr.po ├── models │ ├── __init__.py │ ├── ir_mail_server.py │ ├── ir_model.py │ ├── res_company.py │ ├── res_partner.py │ ├── res_partner_bank.py │ └── res_users.py ├── pyproject.toml ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst ├── security │ ├── group.xml │ └── ir.model.access.csv ├── static │ └── description │ │ ├── icon.png │ │ └── index.html ├── views │ ├── ir_config_parameter.xml │ ├── ir_module.xml │ ├── ir_sequence.xml │ ├── res_company.xml │ ├── res_country.xml │ ├── res_partner.xml │ └── res_partner_bank.xml └── web-buttons_14_max_instead_of_7.diff ├── commission_simple ├── __init__.py ├── __manifest__.py ├── data │ └── decimal_precision.xml ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── account_move_line.py │ ├── commission_profile.py │ ├── commission_result.py │ ├── commission_rule.py │ ├── res_company.py │ └── res_users.py ├── security │ ├── ir.model.access.csv │ └── rule.xml ├── views │ ├── account_move_line.xml │ ├── commission.xml │ ├── commission_profile.xml │ ├── commission_result.xml │ ├── commission_rule.xml │ ├── res_config_settings.xml │ └── res_users.xml └── wizards │ ├── __init__.py │ ├── commission_compute.py │ ├── commission_compute_view.xml │ └── res_config_settings.py ├── commission_simple_agent ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ └── commission_profile_assignment.py └── views │ ├── commission_profile.xml │ └── commission_result.xml ├── commission_simple_agent_purchase ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── commission_result.py │ └── res_company.py ├── views │ └── commission_result.xml └── wizards │ ├── __init__.py │ ├── res_config_settings.py │ └── res_config_settings.xml ├── company_code ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── company.py ├── readme │ ├── CONTRIBUTORS.rst │ ├── DESCRIPTION.rst │ └── USAGE.rst ├── static │ └── description │ │ └── index.html └── views │ └── company_view.xml ├── crm_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ └── crm_lead.py ├── static │ └── description │ │ └── icon.png └── views │ └── crm_lead.xml ├── delivery_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ └── stock_picking.py └── views │ └── stock_picking.xml ├── eradicate_quick_create ├── __init__.py ├── __manifest__.py ├── hooks.py ├── pyproject.toml └── static │ └── description │ └── icon.png ├── hr_contract_usability_akretion ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── hr_payroll_structure_type.py └── views │ └── hr_payroll_structure_type.xml ├── intrastat_product_type ├── README.rst ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── intrastat_product_declaration.py │ ├── l10n_fr_intrastat_service_declaration.py │ └── product.py └── views │ └── product.xml ├── l10n_fr_account_profile_akretion ├── __init__.py ├── __manifest__.py ├── pyproject.toml └── static │ └── description │ └── icon.png ├── link_tracker_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po └── views │ └── link_tracker_click.xml ├── mail_no_portal ├── __init__.py ├── __manifest__.py └── data │ └── mail.xml ├── mail_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── mail_template.py │ └── res_partner.py ├── pyproject.toml └── static │ └── description │ └── icon.png ├── mass_mailing_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po └── views │ └── link_tracker.xml ├── mrp_product_tree_default ├── __init__.py ├── __manifest__.py └── views │ └── product_template.xml ├── mrp_subcontracting_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ └── mrp_bom.py └── views │ ├── mrp_bom.xml │ └── stock_warehouse.xml ├── mrp_usability_akretion ├── README.rst ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── mrp_bom.py │ ├── mrp_production.py │ └── product.py ├── pyproject.toml ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst ├── report │ └── mrp_report.xml ├── static │ └── description │ │ ├── icon.png │ │ └── index.html └── views │ ├── mrp_production.xml │ ├── product_template.xml │ └── stock_move.xml ├── partner_products_shortcut ├── __init__.py ├── __manifest__.py ├── res_partner.py ├── res_partner_view.xml └── static │ └── description │ └── icon.png ├── partner_tree_default_account ├── __init__.py ├── __manifest__.py ├── pyproject.toml ├── static │ └── description │ │ └── icon.png └── views │ └── res_partner.xml ├── partner_tree_default_base ├── __init__.py ├── __manifest__.py ├── pyproject.toml ├── static │ └── description │ │ └── icon.png └── views │ └── res_partner.xml ├── partner_tree_default_contacts ├── __init__.py ├── __manifest__.py ├── pyproject.toml ├── static │ └── description │ │ └── icon.png └── views │ └── res_partner.xml ├── pos_check_deposit ├── README.rst ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ └── pos_payment_method.py ├── odoo-pos_check_deposit.diff ├── pyproject.toml ├── static │ └── description │ │ └── icon.png └── views │ └── pos_payment_method.xml ├── pos_config_single_user ├── __init__.py ├── __manifest__.py ├── pos.py ├── pos_view.xml └── static │ └── description │ └── icon.png ├── pos_product_tree_default ├── __init__.py ├── __manifest__.py └── views │ └── product_template.xml ├── pos_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── pos_category.py │ ├── pos_order.py │ ├── pos_payment_method.py │ └── product.py ├── pos-always_open_cashbox.diff ├── pyproject.toml ├── report │ └── pos.xml ├── static │ └── description │ │ └── icon.png └── views │ ├── pos_category.xml │ ├── pos_order.xml │ ├── pos_payment_method.xml │ ├── pos_session.xml │ └── report_pos_order.xml ├── product_category_tax ├── README.rst ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── product.py └── product_view.xml ├── product_manager_group ├── __init__.py ├── __manifest__.py └── security │ ├── ir.model.access.csv │ └── product_security.xml ├── product_manager_group_stock ├── __init__.py ├── __manifest__.py └── security │ └── ir.model.access.csv ├── product_print_zpl_barcode ├── __init__.py ├── __manifest__.py ├── data │ └── barcode_sequence.xml ├── i18n │ ├── fr.po │ └── product_print_zpl_barcode.pot ├── models │ ├── __init__.py │ ├── product.py │ └── stock_picking.py ├── security │ └── ir.model.access.csv ├── views │ ├── product.xml │ └── stock_picking.xml └── wizard │ ├── __init__.py │ ├── product_print_zpl_barcode.py │ ├── product_print_zpl_barcode_view.xml │ ├── res_config_settings.py │ └── res_config_settings_view.xml ├── product_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ ├── fr.po │ └── product_usability.pot ├── models │ ├── __init__.py │ ├── product_category.py │ ├── product_product.py │ ├── product_supplierinfo.py │ └── product_template.py ├── pyproject.toml ├── static │ └── description │ │ ├── icon.png │ │ └── index.html └── views │ ├── product_config_menu.xml │ ├── product_pricelist.xml │ ├── product_pricelist_item.xml │ ├── product_product.xml │ ├── product_supplierinfo.xml │ └── product_template.xml ├── purchase_product_tree_default ├── __init__.py ├── __manifest__.py └── views │ └── product_template.xml ├── purchase_stock_generic_product ├── README.rst ├── __init__.py ├── __manifest__.py └── models │ ├── __init__.py │ └── purchase_order_line.py ├── purchase_stock_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── purchase.py │ ├── stock_move.py │ └── stock_move_line.py ├── pyproject.toml ├── static │ └── description │ │ └── icon.png └── views │ ├── purchase_order.xml │ ├── stock_move.xml │ ├── stock_move_line.xml │ └── stock_picking.xml ├── purchase_usability_akretion ├── README.rst ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── account_move.py │ ├── product_template.py │ ├── purchase_order.py │ └── res_partner.py ├── pyproject.toml ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst ├── static │ └── description │ │ ├── icon.png │ │ └── index.html └── views │ ├── account_move.xml │ ├── purchase_order.xml │ └── purchase_report.xml ├── sale_agent ├── __init__.py ├── __manifest__.py ├── demo │ └── demo.xml ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── account_invoice_report.py │ ├── account_move.py │ ├── res_partner.py │ ├── sale_order.py │ └── sale_report.py └── views │ ├── account_invoice_report.xml │ ├── account_move.xml │ ├── res_partner.xml │ ├── sale_order.xml │ └── sale_report.xml ├── sale_confirm_wizard ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ └── sale_order.py ├── security │ └── ir.model.access.csv ├── views │ └── sale_order.xml └── wizard │ ├── __init__.py │ ├── sale_confirm.py │ └── sale_confirm_view.xml ├── sale_down_payment ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ ├── account_move_line.py │ ├── account_payment.py │ └── sale.py ├── views │ ├── account_bank_statement.xml │ ├── account_move_line.xml │ ├── account_payment.xml │ └── sale.xml └── wizard │ ├── __init__.py │ ├── account_bank_statement_sale.py │ └── account_bank_statement_sale_view.xml ├── sale_margin_no_onchange ├── __init__.py ├── __manifest__.py ├── sale.py ├── sale_report.py └── sale_view.xml ├── sale_no_optional_product ├── __init__.py ├── __manifest__.py └── views │ └── sale_order_view.xml ├── sale_no_preview_button ├── __init__.py ├── __manifest__.py └── views │ └── sale_view.xml ├── sale_order_add_bom ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── mrp_bom.py ├── security │ └── ir.model.access.csv ├── views │ ├── sale_order.xml │ └── stock_picking.xml └── wizard │ ├── __init__.py │ ├── sale_add_phantom_bom.py │ └── sale_add_phantom_bom_view.xml ├── sale_order_route ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ ├── sale_order.py │ └── sale_report.py └── views │ ├── sale_order.xml │ └── sale_report.xml ├── sale_product_tree_default ├── __init__.py ├── __manifest__.py └── views │ └── product_template.xml ├── sale_quotation_title ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── sale.py └── sale_view.xml ├── sale_remove_my_quotation_filter ├── README.rst ├── __init__.py ├── __manifest__.py └── views │ └── sale_order.xml ├── sale_stock_generic_product ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ ├── sale_order_line.py │ ├── stock_move.py │ └── stock_rule.py └── views │ └── stock_move_line.xml ├── sale_stock_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── account_move.py │ ├── sale_order.py │ └── stock_picking.py ├── pyproject.toml ├── static │ └── description │ │ └── icon.png └── views │ ├── procurement_group.xml │ ├── sale_report.xml │ ├── stock_move.xml │ └── stock_picking.xml ├── sale_usability_akretion ├── README.rst ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── account_move.py │ ├── product_template.py │ ├── res_company.py │ ├── res_partner.py │ └── sale_order.py ├── pyproject.toml ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst ├── static │ └── description │ │ ├── icon.png │ │ └── index.html └── views │ ├── account_move.xml │ ├── product_pricelist_item.xml │ ├── res_company.xml │ ├── sale_order.xml │ └── sale_report.xml ├── service_line_qty_update_base ├── __init__.py ├── __manifest__.py └── wizard │ ├── __init__.py │ ├── service_qty_update.py │ └── service_qty_update_view.xml ├── service_line_qty_update_purchase ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── purchase_order.py ├── views │ └── purchase_order.xml └── wizard │ ├── __init__.py │ └── service_qty_update.py ├── service_line_qty_update_sale ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── sale_order.py ├── views │ └── sale_order.xml └── wizard │ ├── __init__.py │ └── service_qty_update.py ├── setup └── _metapackage │ └── pyproject.toml ├── shopinvader_usability_akretion ├── __init__.py ├── __manifest__.py └── views │ └── sale_views.xml ├── stock_account_usability_akretion ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── product.py └── views │ ├── product.xml │ └── stock_move.xml ├── stock_picking_type_default_partner ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── stock_picking.py └── views │ └── stock_picking_type.xml ├── stock_product_tree_default ├── __init__.py ├── __manifest__.py └── views │ └── product_template.xml ├── stock_quant_package_move_wizard ├── README.rst ├── __init__.py ├── __manifest__.py ├── i18n │ ├── fr.po │ └── stock_quant_package_move_wizard.pot ├── models │ ├── __init__.py │ └── stock_quant.py ├── security │ └── ir.model.access.csv ├── views │ └── stock_quant.xml └── wizards │ ├── __init__.py │ ├── stock_quant_move_wizard.py │ └── stock_quant_move_wizard_view.xml ├── stock_usability_akretion ├── __init__.py ├── __manifest__.py ├── i18n │ └── fr.po ├── models │ ├── __init__.py │ ├── procurement_group.py │ ├── procurement_scheduler_log.py │ ├── product.py │ ├── res_partner.py │ ├── stock_lot.py │ ├── stock_move.py │ ├── stock_move_line.py │ ├── stock_picking.py │ ├── stock_picking_type.py │ ├── stock_quant.py │ └── stock_warehouse_orderpoint.py ├── pyproject.toml ├── security │ └── ir.model.access.csv ├── static │ └── description │ │ └── icon.png ├── stock_add_product_reserved_qty_free_qty.diff └── views │ ├── procurement_group.xml │ ├── procurement_scheduler_log.xml │ ├── product.xml │ ├── stock_location.xml │ ├── stock_lot.xml │ ├── stock_move.xml │ ├── stock_move_line.xml │ ├── stock_picking.xml │ ├── stock_picking_type.xml │ ├── stock_quant.xml │ ├── stock_warehouse.xml │ └── stock_warehouse_orderpoint.xml ├── stock_user_default_warehouse_base ├── README.rst ├── __init__.py ├── __manifest__.py ├── i18n │ └── es.po ├── models │ ├── __init__.py │ └── res_users.py ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst ├── static │ └── description │ │ ├── icon.png │ │ └── index.html ├── views │ └── users_view.xml └── wizard │ ├── __init__.py │ └── stock_change_product_qty.py ├── stock_user_default_warehouse_mrp ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── mrp.py ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst └── static │ └── description │ ├── icon.png │ └── index.html ├── stock_user_default_warehouse_purchase ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── purchase.py ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst └── static │ └── description │ ├── icon.png │ └── index.html ├── stock_user_default_warehouse_sale ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── sale.py ├── readme │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst └── static │ └── description │ ├── icon.png │ └── index.html ├── stock_valuation_xlsx ├── __init__.py ├── __manifest__.py ├── i18n │ ├── fr.po │ └── stock_valuation_xlsx.pot ├── models │ ├── __init__.py │ └── stock_expiry_depreciation_rule.py ├── security │ └── ir.model.access.csv ├── views │ └── stock_expiry_depreciation_rule.xml └── wizard │ ├── __init__.py │ ├── stock_valuation_xlsx.py │ ├── stock_valuation_xlsx_view.xml │ ├── stock_variation_xlsx.py │ └── stock_variation_xlsx_view.xml ├── volume_precision ├── README.rst ├── __init__.py ├── __manifest__.py ├── data │ └── precision.xml ├── models │ ├── __init__.py │ └── precision.py ├── readme │ ├── CONFIGURE.rst │ ├── CONTRIBUTORS.rst │ └── DESCRIPTION.rst └── static │ └── description │ └── index.html └── web_tab_title ├── __init__.py ├── __manifest__.py ├── static └── src │ └── js │ ├── abstract_web_client.js │ └── form_controller.js └── views └── web_tab_title.xml /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | bin/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | eggs/ 16 | lib/ 17 | lib64/ 18 | parts/ 19 | sdist/ 20 | var/ 21 | *.egg-info/ 22 | .installed.cfg 23 | *.egg 24 | 25 | # Installer logs 26 | pip-log.txt 27 | pip-delete-this-directory.txt 28 | 29 | # Unit test / coverage reports 30 | htmlcov/ 31 | .tox/ 32 | .coverage 33 | .cache 34 | nosetests.xml 35 | coverage.xml 36 | 37 | # Translations 38 | *.mo 39 | 40 | # Pycharm 41 | .idea 42 | 43 | # Mr Developer 44 | .mr.developer.cfg 45 | .project 46 | .pydevproject 47 | 48 | # Rope 49 | .ropeproject 50 | 51 | # Sphinx documentation 52 | docs/_build/ 53 | 54 | # Backup files 55 | *~ 56 | *.swp 57 | -------------------------------------------------------------------------------- /account_invoice_margin/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_invoice 2 | from . import account_invoice_report 3 | -------------------------------------------------------------------------------- /account_invoice_margin/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2019 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Account Invoice Margin', 7 | 'version': '12.0.1.0.0', 8 | 'category': 'Invoicing Management', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Copy standard price on invoice line and compute margins', 11 | 'description': """ 12 | This module copies the field *standard_price* of the product on the invoice line when the invoice line is created. The allows the computation of the margin of the invoice. 13 | 14 | This module has been written by Alexis de Lattre from Akretion 15 | . 16 | """, 17 | 'author': 'Akretion', 18 | 'website': 'http://www.akretion.com', 19 | 'depends': ['account'], 20 | 'data': [ 21 | 'account_invoice_view.xml', 22 | ], 23 | 'installable': False, 24 | } 25 | -------------------------------------------------------------------------------- /account_invoice_update_wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /account_invoice_update_wizard/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017 Akretion (Alexis de Lattre ) 2 | # Copyright 2018-2019 Camptocamp 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Account Invoice Update Wizard', 7 | 'version': '14.0.1.0.0', 8 | 'category': 'Accounting & Finance', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Wizard to update non-legal fields of an open/paid invoice', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': [ 14 | 'account', 15 | ], 16 | 'data': [ 17 | 'security/ir.model.access.csv', 18 | 'wizard/account_move_update_view.xml', 19 | 'views/account_move.xml', 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /account_invoice_update_wizard/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_move 2 | -------------------------------------------------------------------------------- /account_invoice_update_wizard/models/account_move.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2022 Camptocamp 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | from odoo import models 5 | 6 | 7 | class AccountMove(models.Model): 8 | _inherit = 'account.move' 9 | 10 | def prepare_update_wizard(self): 11 | self.ensure_one() 12 | wizard = self.env['account.move.update'] 13 | res = wizard._prepare_default_get(self) 14 | action = self.env["ir.actions.actions"]._for_xml_id( 15 | 'account_invoice_update_wizard.account_invoice_update_action') 16 | action['name'] = "Update Wizard" 17 | action['res_id'] = wizard.create(res).id 18 | return action 19 | -------------------------------------------------------------------------------- /account_invoice_update_wizard/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_account_move_update,account.move.update.user,model_account_move_update,account.group_account_invoice,1,1,1,1 3 | access_account_move_line_update,account.move.line.update.user,model_account_move_line_update,account.group_account_invoice,1,1,1,1 4 | -------------------------------------------------------------------------------- /account_invoice_update_wizard/tests/__init__.py: -------------------------------------------------------------------------------- 1 | from . import test_account_move_update_wizard 2 | -------------------------------------------------------------------------------- /account_invoice_update_wizard/views/account_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | account.move 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /account_invoice_update_wizard/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_move_update 2 | -------------------------------------------------------------------------------- /account_invoice_update_wizard_payment_mode/__init__.py: -------------------------------------------------------------------------------- 1 | from . import wizard 2 | -------------------------------------------------------------------------------- /account_invoice_update_wizard_payment_mode/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2022 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Account Invoice Update Wizard Payment Mode', 7 | 'version': '14.0.1.0.0', 8 | 'category': 'Accounting & Finance', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Add Payment Mode to Invoice Update Wizard', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': ['account_invoice_update_wizard', 'account_payment_partner'], 14 | 'data': ['wizard/account_move_update_view.xml'], 15 | 'installable': False, 16 | 'auto_install': True, 17 | } 18 | -------------------------------------------------------------------------------- /account_invoice_update_wizard_payment_mode/views/account_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | account.move 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /account_invoice_update_wizard_payment_mode/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_move_update 2 | -------------------------------------------------------------------------------- /account_move_label_copy/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /account_move_label_copy/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_move 2 | -------------------------------------------------------------------------------- /account_move_label_copy/models/account_move.py: -------------------------------------------------------------------------------- 1 | # Copyright 2022 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class AccountMove(models.Model): 9 | _inherit = "account.move" 10 | 11 | default_move_line_name = fields.Char( 12 | related='line_ids.name', 13 | string='Default Journal Item Label') 14 | -------------------------------------------------------------------------------- /account_move_label_copy/views/account_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | account.move 12 | 13 | 14 | 15 | 16 | 17 | 18 | default_move_line_name 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /account_product_fiscal_classification_pos_sale/__init__.py: -------------------------------------------------------------------------------- 1 | from . import report 2 | -------------------------------------------------------------------------------- /account_product_fiscal_classification_pos_sale/report/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_report 2 | -------------------------------------------------------------------------------- /account_product_fiscal_classification_pos_sale/report/sale_report_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | sale.report 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /account_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizards 3 | # from .hooks import post_init_hook 4 | -------------------------------------------------------------------------------- /account_usability_akretion/account-oca_localization.diff: -------------------------------------------------------------------------------- 1 | diff --git a/addons/account/__init__.py b/addons/account/__init__.py 2 | index 138004b0849..07e6475f760 100644 3 | --- a/addons/account/__init__.py 4 | +++ b/addons/account/__init__.py 5 | @@ -45,7 +45,9 @@ def _auto_install_l10n(env): 6 | module_list.append('l10n_de_skr03') 7 | module_list.append('l10n_de_skr04') 8 | else: 9 | - if env['ir.module.module'].search([('name', '=', 'l10n_' + country_code.lower())]): 10 | + if env['ir.module.module'].search([('name', '=', 'l10n_%s_oca' % country_code.lower())]): 11 | + module_list.append('l10n_%s_oca' % country_code.lower()) 12 | + elif env['ir.module.module'].search([('name', '=', 'l10n_' + country_code.lower())]): 13 | module_list.append('l10n_' + country_code.lower()) 14 | else: 15 | module_list.append('l10n_generic_coa') 16 | -------------------------------------------------------------------------------- /account_usability_akretion/hooks.py: -------------------------------------------------------------------------------- 1 | # Copyright 2022 Akretion (https://www.akretion.com). 2 | # @author Sébastien BEAU 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | # from odoo import SUPERUSER_ID, api 6 | 7 | # def post_init_hook(cr, registry): 8 | # env = api.Environment(cr, SUPERUSER_ID, {}) 9 | # env["account.move.line"].update_matching_number() 10 | -------------------------------------------------------------------------------- /account_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_analytic_account 2 | from . import account_incoterms 3 | from . import account_journal 4 | from . import account_move 5 | from . import account_move_line 6 | from . import account_partial_reconcile 7 | from . import res_partner 8 | from . import res_company 9 | #from . import product 10 | from . import account_invoice_report 11 | -------------------------------------------------------------------------------- /account_usability_akretion/models/account_analytic_account.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, models 6 | 7 | 8 | class AccountAnalyticAccount(models.Model): 9 | _inherit = 'account.analytic.account' 10 | 11 | @api.depends_context('analytic_account_show_code_only') 12 | def _compute_display_name(self): 13 | if self._context.get('analytic_account_show_code_only'): 14 | for rec in self: 15 | rec.display_name = rec.code or rec.name 16 | else: 17 | return super()._compute_display_name() 18 | 19 | _sql_constraints = [( 20 | 'code_company_unique', 21 | 'unique(code, company_id)', 22 | 'An analytic account with the same code already ' 23 | 'exists in the same company!')] 24 | -------------------------------------------------------------------------------- /account_usability_akretion/models/account_incoterms.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models 6 | 7 | 8 | class AccountIncoterms(models.Model): 9 | _inherit = 'account.incoterms' 10 | _rec_names_search = ["name", "code"] 11 | 12 | _sql_constraints = [( 13 | 'code_unique', 14 | 'unique(code)', 15 | 'This incoterm code already exists.')] 16 | -------------------------------------------------------------------------------- /account_usability_akretion/models/account_invoice_report.py: -------------------------------------------------------------------------------- 1 | # Copyright 2022-2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, fields, models 6 | from odoo.tools import SQL 7 | 8 | 9 | class AccountInvoiceReport(models.Model): 10 | _inherit = 'account.invoice.report' 11 | 12 | industry_id = fields.Many2one('res.partner.industry', string='Partner Industry', readonly=True) 13 | 14 | @api.model 15 | def _select(self): 16 | return SQL( 17 | "%s, COALESCE(partner.industry_id, commercial_partner.industry_id) AS industry_id", 18 | super()._select()) 19 | -------------------------------------------------------------------------------- /account_usability_akretion/models/account_partial_reconcile.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2022 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models 6 | # from odoo.tools.misc import formatLang 7 | 8 | 9 | class AccountPartialReconcile(models.Model): 10 | _inherit = "account.partial.reconcile" 11 | # _rec_name = "id" 12 | 13 | # def name_get(self): 14 | # res = [] 15 | # for rec in self: 16 | # There is no seq for partial rec, so I simulate one with the ID 17 | # Prefix for full rec: 'A' (upper case) 18 | # Prefix for partial rec: 'a' (lower case) 19 | # amount_fmt = formatLang( 20 | # self.env, rec.amount, currency_obj=rec.company_currency_id) 21 | # name = 'a%d (%s)' % (rec.id, amount_fmt) 22 | # res.append((rec.id, name)) 23 | # return res 24 | -------------------------------------------------------------------------------- /account_usability_akretion/models/res_partner.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2024 Akretion France (https://akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ResPartner(models.Model): 9 | _inherit = 'res.partner' 10 | 11 | invoice_warn = fields.Selection(tracking=True) 12 | property_account_position_id = fields.Many2one(tracking=True) 13 | -------------------------------------------------------------------------------- /account_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /account_usability_akretion/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * Alexis de Lattre 2 | * David Beal 3 | -------------------------------------------------------------------------------- /account_usability_akretion/report/invoice_report.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /account_usability_akretion/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_account_invoice_mark_sent_full,Full access on account.invoice.mark.sent,model_account_invoice_mark_sent,account.group_account_invoice,1,1,1,1 3 | -------------------------------------------------------------------------------- /account_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/account_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /account_usability_akretion/static/src/xml/account_payment.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 |
17 |
18 | 19 |
20 | -------------------------------------------------------------------------------- /account_usability_akretion/views/account_analytic_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | account.analytic.line 13 | 14 | 15 | 16 | show 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /account_usability_akretion/views/account_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /account_usability_akretion/views/account_payment.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | account.payment 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /account_usability_akretion/views/account_tax.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | account.tax 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /account_usability_akretion/views/res_company.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | account_usability.res.company.form 13 | res.company 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /account_usability_akretion/views/res_partner.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | res.partner 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /account_usability_akretion/wizards/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_invoice_mark_sent 2 | from . import account_move_reversal 3 | #from . import account_group_generate 4 | -------------------------------------------------------------------------------- /account_usability_akretion/wizards/account_move_reversal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | account.move.reversal 6 | 7 | 8 | 9 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /base_company_extension/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /base_company_extension/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014-2022 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Base Company Extension', 7 | 'version': '18.0.1.0.0', 8 | 'category': 'Partner', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Adds capital and title on company', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | # I depend on base_usability only for _report_company_legal_name() 14 | 'depends': ['base_usability_akretion'], 15 | 'data': ['views/res_company.xml'], 16 | 'installable': True, 17 | } 18 | -------------------------------------------------------------------------------- /base_company_extension/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_company 2 | -------------------------------------------------------------------------------- /base_company_extension/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /base_company_extension/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * Alexis de Lattre 2 | -------------------------------------------------------------------------------- /base_company_extension/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | This module adds the following fields to the ResCompany model: 2 | * Capital Amount 3 | * Legal Type 4 | 5 | This is useful to display the legal name of the company in reports 6 | -------------------------------------------------------------------------------- /base_company_extension/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/base_company_extension/static/description/icon.png -------------------------------------------------------------------------------- /base_company_extension/views/res_company.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | company.extension.form 12 | res.company 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /base_dynamic_list/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /base_dynamic_list/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import dynamic_list 2 | -------------------------------------------------------------------------------- /base_mail_sender_bcc/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /base_mail_sender_bcc/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2022 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Mail Sender Bcc', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Mail', 9 | 'license': 'AGPL-3', 10 | 'summary': "Always send a copy of the mail to the sender", 11 | 'description': """ 12 | Mail Sender Bcc 13 | =============== 14 | 15 | With this module, when Odoo sends an outgoing email, it adds the sender as Bcc (blind copy) of the email. 16 | """, 17 | 'author': 'Akretion', 18 | 'website': 'https://github.com/akretion/odoo-usability', 19 | 'depends': ['base'], 20 | 'installable': False, 21 | } 22 | -------------------------------------------------------------------------------- /base_mail_sender_bcc/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import ir_mail_server 2 | -------------------------------------------------------------------------------- /base_partner_one2many_phone/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from .post_install import migrate_to_partner_phone 3 | -------------------------------------------------------------------------------- /base_partner_one2many_phone/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_partner_phone 2 | from . import res_partner 3 | -------------------------------------------------------------------------------- /base_partner_one2many_phone/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_partner_phone_full,Full access on res.partner.phone to Contact Manager grp,model_res_partner_phone,base.group_partner_manager,1,1,1,1 3 | access_partner_phone_read,Read access on res.partner.phone to Employees grp,model_res_partner_phone,base.group_user,1,0,0,0 4 | -------------------------------------------------------------------------------- /base_partner_one2many_phone/tests/__init__.py: -------------------------------------------------------------------------------- 1 | from . import test_partner_phone 2 | -------------------------------------------------------------------------------- /base_partner_ref/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from .post_install import update_partner_display_name 3 | -------------------------------------------------------------------------------- /base_partner_ref/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Base Partner Reference', 7 | 'version': '18.0.1.0.0', 8 | 'category': 'Partner', 9 | 'license': 'AGPL-3', 10 | 'summary': "Improve usage of partner's Internal Reference", 11 | 'description': """ 12 | Base Partner Reference 13 | ====================== 14 | 15 | * Adds Internal Reference in partner tree view 16 | 17 | * Adds Internal Reference in name_get() 18 | 19 | * Adds unicity constraint on Internal Reference 20 | """, 21 | 'author': 'Akretion', 22 | 'website': 'https://github.com/akretion/odoo-usability', 23 | 'depends': ['base'], 24 | 'data': ['views/res_partner.xml'], 25 | 'post_init_hook': 'update_partner_display_name', 26 | 'installable': True, 27 | } 28 | -------------------------------------------------------------------------------- /base_partner_ref/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_partner 2 | -------------------------------------------------------------------------------- /base_partner_ref/post_install.py: -------------------------------------------------------------------------------- 1 | # Copyright 2023 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | 6 | def update_partner_display_name(env): 7 | partners = env['res.partner'].with_context(active_test=False).search( 8 | [('ref', '!=', False)]) 9 | partners.write({'invalidate_display_name': True}) 10 | -------------------------------------------------------------------------------- /base_partner_ref/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /base_partner_ref/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/base_partner_ref/static/description/icon.png -------------------------------------------------------------------------------- /base_profile_akretion/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/base_profile_akretion/__init__.py -------------------------------------------------------------------------------- /base_profile_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /base_profile_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/base_profile_akretion/static/description/icon.png -------------------------------------------------------------------------------- /base_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /base_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014-2022 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Base Usability', 7 | 'version': '18.0.1.0.0', 8 | 'category': 'Partner', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Better usability in base module', 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': ['base'], 14 | 'data': [ 15 | 'security/group.xml', 16 | 'security/ir.model.access.csv', 17 | 'views/res_partner.xml', 18 | 'views/res_partner_bank.xml', 19 | 'views/res_country.xml', 20 | 'views/res_company.xml', 21 | 'views/ir_config_parameter.xml', 22 | 'views/ir_module.xml', 23 | 'views/ir_sequence.xml', 24 | ], 25 | 'installable': True, 26 | } 27 | -------------------------------------------------------------------------------- /base_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_users 2 | from . import res_partner 3 | from . import res_partner_bank 4 | from . import res_company 5 | from . import ir_mail_server 6 | from . import ir_model 7 | -------------------------------------------------------------------------------- /base_usability_akretion/models/ir_model.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, models 6 | 7 | 8 | class IrModel(models.Model): 9 | _inherit = 'ir.model' 10 | 11 | @api.depends('name', 'model') 12 | def _compute_display_name(self): 13 | for rec in self: 14 | rec.display_name = f'{rec.name} ({rec.model})' 15 | -------------------------------------------------------------------------------- /base_usability_akretion/models/res_partner_bank.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, fields, models 6 | 7 | 8 | class ResPartnerBank(models.Model): 9 | _inherit = 'res.partner.bank' 10 | 11 | # In the 'base' module, they didn't put any string, so the bank name is 12 | # displayed as 'Name', which the string of the related field it 13 | # points to 14 | bank_name = fields.Char(string='Bank Name') 15 | 16 | @api.depends('currency_id') 17 | def _compute_display_name(self): 18 | for acc in self: 19 | name = acc.acc_number 20 | if acc.currency_id: 21 | name = f"{name} ({acc.currency_id.name})" 22 | if acc.bank_id: 23 | name = f"{name} - {acc.bank_id.name}" 24 | acc.display_name = name 25 | -------------------------------------------------------------------------------- /base_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /base_usability_akretion/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * Alexis de Lattre 2 | * Raphaël Valyi 3 | * David Beal 4 | -------------------------------------------------------------------------------- /base_usability_akretion/security/group.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 19 | 20 | Nobody (used to hide native menus) 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /base_usability_akretion/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | base.access_res_partner_title_group_user,Full access on res.partner.title to Settings group (instead of partner manager by default),base.model_res_partner_title,base.group_system,1,1,1,1 3 | -------------------------------------------------------------------------------- /base_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/base_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /base_usability_akretion/views/ir_config_parameter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ir.config_parameter 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /base_usability_akretion/views/ir_module.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | ir.module.module 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | {'search_default_installable': 1} 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /base_usability_akretion/views/ir_sequence.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ir.sequence 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /base_usability_akretion/views/res_company.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | res.company 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /base_usability_akretion/web-buttons_14_max_instead_of_7.diff: -------------------------------------------------------------------------------- 1 | diff --git a/addons/web/static/src/views/form/button_box/button_box.js b/addons/web/static/src/views/form/button_box/button_box.js 2 | index 0dd1184ca2b..43139ab6e58 100644 3 | --- a/addons/web/static/src/views/form/button_box/button_box.js 4 | +++ b/addons/web/static/src/views/form/button_box/button_box.js 5 | @@ -8,7 +8,8 @@ import { Component } from "@odoo/owl"; 6 | export class ButtonBox extends Component { 7 | setup() { 8 | const ui = useService("ui"); 9 | - this.getMaxButtons = () => [2, 2, 2, 4][ui.size] || 7; 10 | + /* HACK button box on 2 lines: || 7 => || 14 */ 11 | + this.getMaxButtons = () => [2, 2, 2, 4][ui.size] || 14; 12 | } 13 | 14 | getButtons() { 15 | -------------------------------------------------------------------------------- /commission_simple/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizards 3 | -------------------------------------------------------------------------------- /commission_simple/data/decimal_precision.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Commission Rate 7 | 2 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /commission_simple/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import commission_profile 2 | from . import commission_rule 3 | from . import commission_result 4 | from . import res_company 5 | from . import account_move_line 6 | -------------------------------------------------------------------------------- /commission_simple/models/res_company.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2024 Akretion France (https://www.akretion.com/) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | 6 | from odoo import fields, models 7 | 8 | 9 | class ResCompany(models.Model): 10 | _inherit = 'res.company' 11 | 12 | commission_date_range_type_id = fields.Many2one( 13 | 'date.range.type', string='Commission Periodicity', ondelete='restrict') 14 | -------------------------------------------------------------------------------- /commission_simple/models/res_users.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2024 Akretion France (https://www.akretion.com/) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | 6 | from odoo import fields, models 7 | 8 | 9 | class ResUsers(models.Model): 10 | _inherit = 'res.users' 11 | 12 | # TODO mon idée : déplacer ça dans une table dédiée 13 | # company_id oblig 14 | # partner_id (filtré... sur lien vers user ou agent petit difficulté) 15 | # profile_id 16 | # type agent ou user => ça donne le champ de recherche 17 | 18 | commission_profile_id = fields.Many2one( 19 | 'commission.profile', string='Commission Profile', 20 | company_dependent=True) 21 | -------------------------------------------------------------------------------- /commission_simple/wizards/__init__.py: -------------------------------------------------------------------------------- 1 | from . import commission_compute 2 | from . import res_config_settings 3 | -------------------------------------------------------------------------------- /commission_simple/wizards/res_config_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ResConfigSettings(models.TransientModel): 9 | _inherit = 'res.config.settings' 10 | 11 | commission_date_range_type_id = fields.Many2one( 12 | related='company_id.commission_date_range_type_id', readonly=False) 13 | -------------------------------------------------------------------------------- /commission_simple_agent/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /commission_simple_agent/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2024 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Commission Simple Agent', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Sales', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Glue module between commission_simple and sale_agent', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': [ 14 | 'commission_simple', 15 | 'sale_agent', 16 | ], 17 | 'data': [ 18 | 'views/commission_profile.xml', 19 | 'views/commission_result.xml', 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /commission_simple_agent/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import commission_profile_assignment 2 | -------------------------------------------------------------------------------- /commission_simple_agent/views/commission_profile.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | commission.profile 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /commission_simple_agent_purchase/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizards 3 | -------------------------------------------------------------------------------- /commission_simple_agent_purchase/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2024 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Commission Simple Agent Purchase', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Sales', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Glue module between commission_simple_agent and purchase', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': [ 14 | 'commission_simple_agent', 15 | 'purchase', 16 | ], 17 | 'data': [ 18 | 'views/commission_result.xml', 19 | 'wizards/res_config_settings.xml', 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /commission_simple_agent_purchase/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import commission_result 2 | from . import res_company 3 | -------------------------------------------------------------------------------- /commission_simple_agent_purchase/models/res_company.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (https://www.akretion.com/) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | 6 | from odoo import fields, models 7 | 8 | 9 | class ResCompany(models.Model): 10 | _inherit = 'res.company' 11 | 12 | commission_product_id = fields.Many2one( 13 | 'product.product', string='Commission Product', ondelete='restrict', check_company=True, 14 | domain=[('type', '=', 'service')]) 15 | -------------------------------------------------------------------------------- /commission_simple_agent_purchase/views/commission_result.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | commission.result 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /commission_simple_agent_purchase/wizards/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_config_settings 2 | -------------------------------------------------------------------------------- /commission_simple_agent_purchase/wizards/res_config_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ResConfigSettings(models.TransientModel): 9 | _inherit = 'res.config.settings' 10 | 11 | commission_product_id = fields.Many2one( 12 | related='company_id.commission_product_id', readonly=False) 13 | -------------------------------------------------------------------------------- /company_code/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /company_code/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019 David BEAL @ Akretion 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). 3 | 4 | { 5 | 'name': 'Company Code', 6 | 'summary': 'Add a code field in company', 7 | 'version': '12.0.0.0.1', 8 | 'author': 'Akretion', 9 | 'maintainer': 'Akretion', 10 | 'license': 'AGPL-3', 11 | 'category': 'base', 12 | 'depends': [ 13 | 'base', 14 | ], 15 | 'website': 'http://www.akretion.com/', 16 | 'data': [ 17 | 'views/company_view.xml', 18 | ], 19 | 'installable': False, 20 | } 21 | -------------------------------------------------------------------------------- /company_code/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import company 2 | -------------------------------------------------------------------------------- /company_code/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | David Beal 2 | -------------------------------------------------------------------------------- /company_code/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | - add `code` field to company. 2 | - update name_get with this field 3 | -------------------------------------------------------------------------------- /company_code/readme/USAGE.rst: -------------------------------------------------------------------------------- 1 | To display your company code with `name_get()` just 2 | write this in your custom code according to your model 3 | 4 | 5 | ```python 6 | 7 | class ResPartner(models.Model): 8 | _inherit = 'res.partner' 9 | 10 | def name_get(self): 11 | return self.env['res.company']._add_company_code(super()) 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /company_code/views/company_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | res.company 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /crm_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /crm_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2022 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | # @author Alexis de Lattre 4 | 5 | { 6 | 'name': 'CRM Usability', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Customer Relationship Management', 9 | 'license': 'AGPL-3', 10 | 'summary': 'CRM usability enhancements', 11 | 'description': """ 12 | CRM Usability 13 | ============= 14 | 15 | This module has been written by Alexis de Lattre from Akretion 16 | . 17 | """, 18 | 'author': 'Akretion', 19 | 'website': 'http://www.akretion.com', 20 | 'depends': ['crm'], 21 | 'data': [ 22 | 'views/crm_lead.xml', 23 | ], 24 | 'installable': False, 25 | } 26 | -------------------------------------------------------------------------------- /crm_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import crm_lead 2 | -------------------------------------------------------------------------------- /crm_usability_akretion/models/crm_lead.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2022 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | # @author Alexis de Lattre 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class CrmLead(models.Model): 9 | _inherit = 'crm.lead' 10 | 11 | probability = fields.Float(tracking=100) 12 | date_deadline = fields.Date(tracking=110) 13 | name = fields.Char(tracking=1) 14 | -------------------------------------------------------------------------------- /crm_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/crm_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /delivery_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /delivery_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018-2022 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Delivery Usability', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Stock', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Several usability enhancements in Delivery', 11 | 'description': """ 12 | Delivery Usability 13 | =================== 14 | 15 | The usability enhancements include: 16 | * allow modification of carrier and it's tracking ref. on a done picking 17 | 18 | This module has been written by Alexis de Lattre from Akretion . 19 | """, 20 | 'author': 'Akretion', 21 | 'website': 'http://www.akretion.com', 22 | 'depends': ['delivery'], 23 | 'data': [ 24 | 'views/stock_picking.xml', 25 | ], 26 | 'installable': False, 27 | } 28 | -------------------------------------------------------------------------------- /delivery_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import stock_picking 2 | -------------------------------------------------------------------------------- /delivery_usability_akretion/models/stock_picking.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018-2022 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class StockPicking(models.Model): 9 | _inherit = 'stock.picking' 10 | 11 | carrier_id = fields.Many2one(tracking=True) 12 | carrier_tracking_ref = fields.Char(tracking=True) 13 | -------------------------------------------------------------------------------- /eradicate_quick_create/__init__.py: -------------------------------------------------------------------------------- 1 | from .hooks import web_m2x_options_create 2 | -------------------------------------------------------------------------------- /eradicate_quick_create/hooks.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2023 Akretion France 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | 6 | def web_m2x_options_create(env): 7 | config_parameter = env['ir.config_parameter'].search( 8 | [('key', '=', 'web_m2x_options.create')]) 9 | if config_parameter and config_parameter.value != 'False': 10 | config_parameter.write({'value': 'False'}) 11 | else: 12 | env['ir.config_parameter'].create({ 13 | 'key': 'web_m2x_options.create', 14 | 'value': 'False', 15 | }) 16 | -------------------------------------------------------------------------------- /eradicate_quick_create/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /eradicate_quick_create/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/eradicate_quick_create/static/description/icon.png -------------------------------------------------------------------------------- /hr_contract_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /hr_contract_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'HR Contract Usability', 7 | 'version': '14.0.1.0.0', 8 | 'category': 'Human Resources/Contracts', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Usability improvements on HR Contract module', 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': [ 14 | 'hr_contract', 15 | ], 16 | 'data': [ 17 | 'views/hr_payroll_structure_type.xml', 18 | ], 19 | 'installable': False, 20 | } 21 | -------------------------------------------------------------------------------- /hr_contract_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import hr_payroll_structure_type 2 | -------------------------------------------------------------------------------- /hr_contract_usability_akretion/models/hr_payroll_structure_type.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | class HrPayrollStructureType(models.Model): 8 | _inherit = 'hr.payroll.structure.type' 9 | 10 | active = fields.Boolean(default=True) 11 | -------------------------------------------------------------------------------- /intrastat_product_type/README.rst: -------------------------------------------------------------------------------- 1 | Intrastat Product Type 2 | ====================== 3 | 4 | This module is designed for a very special usage scenario: some companies want to handle the delivery of services the same way as they handle the delivery of goods; they want to show the services in the delivery note. So, those companies configure the services with Type = *Consumable*. This works well to have the services on the outgoing pickings, but it is a problem for the intrastat declarations. 5 | 6 | This module adds a field *Intrastat Type* on *Consumable* products with 2 possible options: *Product* or *Service*. The intrastat declaration will use this field instead of the native *Type* field. 7 | 8 | Credits 9 | ======= 10 | 11 | Authors 12 | ~~~~~~~ 13 | 14 | * Akretion 15 | 16 | Contributors 17 | ~~~~~~~~~~~~ 18 | 19 | * Alexis de Lattre 20 | -------------------------------------------------------------------------------- /intrastat_product_type/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /intrastat_product_type/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2024 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Intrastat Product Type', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Accounting', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Adds a special field Intrastat Type on Products', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': ['intrastat_product', 'l10n_fr_intrastat_service'], 14 | 'data': ['views/product.xml'], 15 | 'installable': False, 16 | } 17 | -------------------------------------------------------------------------------- /intrastat_product_type/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product 2 | from . import intrastat_product_declaration 3 | from . import l10n_fr_intrastat_service_declaration 4 | -------------------------------------------------------------------------------- /intrastat_product_type/models/intrastat_product_declaration.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2024 Akretion France (https://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | # @author Alexis de Lattre 4 | 5 | from odoo import models 6 | 7 | 8 | class IntrastatProductDeclaration(models.Model): 9 | _inherit = 'intrastat.product.declaration' 10 | 11 | def _is_product(self, invoice_line): 12 | if ( 13 | invoice_line.product_id and 14 | invoice_line.product_id.intrastat_type == 'product'): 15 | return True 16 | else: 17 | return False 18 | -------------------------------------------------------------------------------- /intrastat_product_type/models/l10n_fr_intrastat_service_declaration.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2024 Akretion France (https://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | # @author Alexis de Lattre 4 | 5 | from odoo import models 6 | 7 | 8 | class L10nFrIntrastatServiceDeclaration(models.Model): 9 | _inherit = "l10n.fr.intrastat.service.declaration" 10 | 11 | def _is_service(self, invoice_line): 12 | if invoice_line.product_id.intrastat_type == 'service': 13 | return True 14 | else: 15 | return False 16 | -------------------------------------------------------------------------------- /l10n_fr_account_profile_akretion/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/l10n_fr_account_profile_akretion/__init__.py -------------------------------------------------------------------------------- /l10n_fr_account_profile_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /l10n_fr_account_profile_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/l10n_fr_account_profile_akretion/static/description/icon.png -------------------------------------------------------------------------------- /link_tracker_usability_akretion/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/link_tracker_usability_akretion/__init__.py -------------------------------------------------------------------------------- /link_tracker_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2023 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Link Tracker Usability', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Marketing', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Improve usability for link tracker', 11 | 'description': """ 12 | Link Tracker Usability 13 | ====================== 14 | 15 | Several small usability improvements. 16 | 17 | This module has been written by Alexis de Lattre from Akretion 18 | . 19 | """, 20 | 'author': 'Akretion', 21 | 'website': 'https://github.com/akretion/odoo-usability', 22 | 'depends': ['link_tracker'], 23 | 'data': [ 24 | 'views/link_tracker_click.xml', 25 | ], 26 | 'installable': False, 27 | } 28 | -------------------------------------------------------------------------------- /link_tracker_usability_akretion/i18n/fr.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * link_tracker_usability 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 16.0\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2024-07-07 14:42+0000\n" 10 | "PO-Revision-Date: 2024-07-07 14:42+0000\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: \n" 16 | "Plural-Forms: \n" 17 | 18 | #. module: link_tracker_usability 19 | #: model_terms:ir.ui.view,arch_db:link_tracker_usability.link_tracker_click_view_form 20 | #: model_terms:ir.ui.view,arch_db:link_tracker_usability.link_tracker_click_view_search 21 | #: model_terms:ir.ui.view,arch_db:link_tracker_usability.link_tracker_click_view_tree 22 | msgid "Click Date" 23 | msgstr "Date du clic" 24 | -------------------------------------------------------------------------------- /mail_no_portal/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/mail_no_portal/__init__.py -------------------------------------------------------------------------------- /mail_no_portal/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2022 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Mail no portal', 7 | 'version': '14.0.1.0.0', 8 | 'category': 'Productivity/Discuss', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Remove portal button in mails sent by Odoo', 11 | 'description': """ 12 | This module remove the buttons such as *View Request for Quotation* in emails sent by Odoo. 13 | 14 | This module has been written by Alexis de Lattre from Akretion 15 | . 16 | """, 17 | 'author': 'Akretion', 18 | 'maintainers': ['alexis-via'], 19 | 'website': 'https://www.akretion.com', 20 | 'depends': ['mail'], 21 | 'data': [ 22 | 'data/mail.xml', 23 | ], 24 | 'installable': False, 25 | } 26 | -------------------------------------------------------------------------------- /mail_no_portal/data/mail.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /mail_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /mail_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2022 Akretion France (http://www.akretion.com) 2 | # @author Benoît Guillot 3 | # @author Alexis de Lattre 4 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 5 | 6 | { 7 | 'name': 'Mail Usability', 8 | 'version': '18.0.1.0.0', 9 | 'category': 'Productivity/Discuss', 10 | 'license': 'AGPL-3', 11 | 'summary': 'Usability improvements on mails', 12 | 'description': """ 13 | Mail Usability 14 | ============== 15 | 16 | Small usability improvements on mails: 17 | 18 | * remove link in mail footer (TODO mig v14) 19 | 20 | * remove 'sent by' in notification footer (TODO mig v14) 21 | """, 22 | 'author': 'Akretion', 23 | 'website': 'https://github.com/akretion/odoo-usability', 24 | 'depends': ['mail'], 25 | 'data': [], 26 | 'installable': True, 27 | } 28 | -------------------------------------------------------------------------------- /mail_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_partner 2 | from . import mail_template 3 | -------------------------------------------------------------------------------- /mail_usability_akretion/models/mail_template.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018-2022 Akretion France (http://www.akretion.com). 2 | # @author Sébastien BEAU 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class MailTemplate(models.Model): 9 | _inherit = 'mail.template' 10 | 11 | auto_delete = fields.Boolean(default=False) 12 | -------------------------------------------------------------------------------- /mail_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /mail_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/mail_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /mass_mailing_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /mass_mailing_usability_akretion/i18n/fr.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # 4 | msgid "" 5 | msgstr "" 6 | "Project-Id-Version: Odoo Server 16.0\n" 7 | "Report-Msgid-Bugs-To: \n" 8 | "POT-Creation-Date: 2024-07-07 14:44+0000\n" 9 | "PO-Revision-Date: 2024-07-07 14:44+0000\n" 10 | "Last-Translator: \n" 11 | "Language-Team: \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: \n" 15 | "Plural-Forms: \n" 16 | -------------------------------------------------------------------------------- /mrp_product_tree_default/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/mrp_product_tree_default/__init__.py -------------------------------------------------------------------------------- /mrp_product_tree_default/__manifest__.py: -------------------------------------------------------------------------------- 1 | # © 2019 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | 5 | { 6 | 'name': 'MRP Product Tree Default', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Product', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Tree view by default instead of kanban for Products', 11 | 'description': """ 12 | Replace default kanban view by tree view for product menu in MRP 13 | main menu 14 | """, 15 | 'author': 'Akretion', 16 | 'website': 'http://www.akretion.com', 17 | 'depends': ['mrp'], 18 | 'data': [ 19 | 'views/product_template.xml' 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /mrp_product_tree_default/views/product_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | tree,form,kanban,activity 7 | 8 | 9 | 10 | tree,form,kanban,activity 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /mrp_subcontracting_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /mrp_subcontracting_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2023 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'MRP Subcontracting Usability', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Manufacturing', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Usability improvements on mrp_subcontracting', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': ['mrp_subcontracting', 'stock_usability'], 14 | 'data': [ 15 | 'views/mrp_bom.xml', 16 | 'views/stock_warehouse.xml', 17 | ], 18 | 'installable': False, 19 | } 20 | -------------------------------------------------------------------------------- /mrp_subcontracting_usability_akretion/i18n/fr.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * mrp_subcontracting_usability 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 16.0\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2024-07-07 14:38+0000\n" 10 | "PO-Revision-Date: 2024-07-07 14:38+0000\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: \n" 16 | "Plural-Forms: \n" 17 | 18 | #. module: mrp_subcontracting_usability 19 | #: model_terms:ir.ui.view,arch_db:mrp_subcontracting_usability.view_mrp_bom_filter 20 | msgid "Subcontracting" 21 | msgstr "Sous-traitance" 22 | -------------------------------------------------------------------------------- /mrp_subcontracting_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import mrp_bom 2 | -------------------------------------------------------------------------------- /mrp_subcontracting_usability_akretion/models/mrp_bom.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class MrpBom(models.Model): 9 | _inherit = 'mrp.bom' 10 | 11 | subcontractor_ids = fields.Many2many(domain=[('parent_id', '=', False)]) 12 | -------------------------------------------------------------------------------- /mrp_subcontracting_usability_akretion/views/mrp_bom.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | mrp.bom 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /mrp_subcontracting_usability_akretion/views/stock_warehouse.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | stock.warehouse 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /mrp_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /mrp_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'MRP Usability', 7 | 'version': '18.0.1.0.0', 8 | 'category': 'Manufacturing', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Usability improvements on manufacturing', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': ['mrp'], 14 | 'data': [ 15 | 'views/mrp_production.xml', 16 | 'views/product_template.xml', 17 | 'views/stock_move.xml', 18 | # 'report/mrp_report.xml' # TODO 19 | ], 20 | 'installable': True, 21 | } 22 | -------------------------------------------------------------------------------- /mrp_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import mrp_production 2 | from . import mrp_bom 3 | from . import product 4 | -------------------------------------------------------------------------------- /mrp_usability_akretion/models/mrp_bom.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021-2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | 6 | from odoo import fields, models 7 | 8 | 9 | class MrpBom(models.Model): 10 | _inherit = 'mrp.bom' 11 | 12 | code = fields.Char(tracking=50) 13 | type = fields.Selection(tracking=20) 14 | product_tmpl_id = fields.Many2one(tracking=10) 15 | product_id = fields.Many2one(tracking=15) 16 | product_qty = fields.Float(tracking=30) 17 | product_uom_id = fields.Many2one(tracking=35) 18 | ready_to_produce = fields.Selection(tracking=90) 19 | picking_type_id = fields.Many2one(tracking=60) 20 | consumption = fields.Selection(tracking=40) 21 | produce_delay = fields.Integer(tracking=100) 22 | -------------------------------------------------------------------------------- /mrp_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /mrp_usability_akretion/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | Alexis de Lattre 2 | David Béal 3 | -------------------------------------------------------------------------------- /mrp_usability_akretion/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | Small usability improvements on MRP: 2 | 3 | * order by id desc 4 | 5 | * show field date_start and date_finished on mrp.production form view 6 | 7 | * show more fields on stock move form 8 | 9 | * show bom type in tree view + add group by 10 | 11 | * complete Manufacturing Order report with unvailable products 12 | 13 | * improve smart button from products to BoMs (display BoM form if only one instead of displaying a list of one) 14 | -------------------------------------------------------------------------------- /mrp_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/mrp_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /mrp_usability_akretion/views/product_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | product.template.procurement 6 | product.template 7 | 8 | 9 | 10 | object 11 | action_view_bom 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /mrp_usability_akretion/views/stock_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | stock.move 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /partner_products_shortcut/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_partner 2 | -------------------------------------------------------------------------------- /partner_products_shortcut/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/partner_products_shortcut/static/description/icon.png -------------------------------------------------------------------------------- /partner_tree_default_account/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/partner_tree_default_account/__init__.py -------------------------------------------------------------------------------- /partner_tree_default_account/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2022 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | 6 | { 7 | 'name': 'Partner Tree Default - Account', 8 | 'version': '18.0.1.0.0', 9 | 'category': 'Partner', 10 | 'license': 'AGPL-3', 11 | 'summary': 'Tree view by default instead of kanban for partners', 12 | 'description': """ 13 | Partner Tree Default - Account 14 | =============================== 15 | 16 | With this module, when you select a *Customer* or *Vendors* menu entry, you will see the list view by default instead of the kanban view. 17 | 18 | This module has been written by Alexis de Lattre from Akretion. 19 | """, 20 | 'author': 'Akretion', 21 | 'website': 'http://www.akretion.com', 22 | 'depends': ['account'], 23 | 'data': ['views/res_partner.xml'], 24 | 'installable': True, 25 | } 26 | -------------------------------------------------------------------------------- /partner_tree_default_account/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /partner_tree_default_account/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/partner_tree_default_account/static/description/icon.png -------------------------------------------------------------------------------- /partner_tree_default_account/views/res_partner.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | list,form,kanban 12 | 13 | 14 | 15 | list,form,kanban 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /partner_tree_default_base/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/partner_tree_default_base/__init__.py -------------------------------------------------------------------------------- /partner_tree_default_base/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /partner_tree_default_base/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/partner_tree_default_base/static/description/icon.png -------------------------------------------------------------------------------- /partner_tree_default_contacts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/partner_tree_default_contacts/__init__.py -------------------------------------------------------------------------------- /partner_tree_default_contacts/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /partner_tree_default_contacts/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/partner_tree_default_contacts/static/description/icon.png -------------------------------------------------------------------------------- /partner_tree_default_contacts/views/res_partner.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | list,form,kanban,activity 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /pos_check_deposit/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /pos_check_deposit/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2022-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | "name": "POS Check Deposit", 7 | "version": "18.0.1.0.0", 8 | "category": "Point of sale", 9 | "license": "AGPL-3", 10 | "summary": "Make POS and Check Deposit modules work together", 11 | "author": "Akretion", 12 | "website": "https://github.com/akretion/odoo-usability", 13 | "depends": ["point_of_sale"], 14 | "data": ["views/pos_payment_method.xml"], 15 | "installable": True, 16 | } 17 | -------------------------------------------------------------------------------- /pos_check_deposit/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import pos_payment_method 2 | -------------------------------------------------------------------------------- /pos_check_deposit/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /pos_check_deposit/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/pos_check_deposit/static/description/icon.png -------------------------------------------------------------------------------- /pos_config_single_user/__init__.py: -------------------------------------------------------------------------------- 1 | from . import pos 2 | -------------------------------------------------------------------------------- /pos_config_single_user/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014-2020 Akretion France (http://www.akretion.com/) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'POS Config Single User', 7 | 'version': '14.0.1.0.0', 8 | 'category': 'Point Of Sale', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Configure on each pos.config a single user allowed to start it', 11 | 'description': """ 12 | POS Config Single User 13 | ====================== 14 | 15 | New parameter on pos.config: the (only) user allowed to start sessions of this pos.config. 16 | 17 | This module has been written by Alexis de Lattre from Akretion . 18 | """, 19 | 'author': 'Akretion', 20 | 'website': 'http://www.akretion.com', 21 | 'depends': ['point_of_sale'], 22 | 'data': ['pos_view.xml'], 23 | 'installable': False, 24 | } 25 | -------------------------------------------------------------------------------- /pos_config_single_user/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/pos_config_single_user/static/description/icon.png -------------------------------------------------------------------------------- /pos_product_tree_default/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/pos_product_tree_default/__init__.py -------------------------------------------------------------------------------- /pos_product_tree_default/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | 5 | { 6 | 'name': 'POS Product Tree Default', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Product', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Tree view by default instead of kanban for Products', 11 | 'description': """ 12 | Replace default kanban view by tree view for product menu in Point of Sale 13 | main menu 14 | """, 15 | 'author': 'Akretion', 16 | 'website': 'http://www.akretion.com', 17 | 'depends': ['point_of_sale'], 18 | 'data': [ 19 | 'views/product_template.xml' 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /pos_product_tree_default/views/product_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | tree,form,kanban,activity 7 | 8 | 9 | 10 | tree,form,kanban,activity 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /pos_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /pos_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product 2 | from . import pos_category 3 | from . import pos_payment_method 4 | from . import pos_order 5 | -------------------------------------------------------------------------------- /pos_usability_akretion/models/pos_category.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class PosCategory(models.Model): 9 | _inherit = 'pos.category' 10 | 11 | product_count = fields.Integer( 12 | '# Products', compute='_compute_product_count', 13 | help="The number of products under this point of sale category " 14 | "(children categories included)") 15 | 16 | def _compute_product_count(self): 17 | pto = self.env['product.template'] 18 | for categ in self: 19 | categ.product_count = pto.search_count([('pos_categ_ids', 'in', categ.id)]) 20 | -------------------------------------------------------------------------------- /pos_usability_akretion/models/pos_order.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, fields, models 6 | 7 | 8 | class PosOrder(models.Model): 9 | _inherit = 'pos.order' 10 | 11 | # field displayed in pos.order list view 12 | payments_char = fields.Char( 13 | string="Payment Methods", compute="_compute_payments_char", store=True) 14 | 15 | @api.depends('payment_ids') 16 | def _compute_payments_char(self): 17 | for order in self: 18 | payments = set() 19 | for pay in order.payment_ids: 20 | if pay.payment_method_id.name: 21 | # unfortunately, 'name' of pos.payment.method is translate=True 22 | payments.add(pay.payment_method_id.name) 23 | order.payments_char = ', '.join(payments) 24 | -------------------------------------------------------------------------------- /pos_usability_akretion/models/pos_payment_method.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class PosPaymentMethod(models.Model): 9 | _inherit = 'pos.payment.method' 10 | _check_company_auto = True 11 | 12 | outstanding_account_id = fields.Many2one(check_company=True) 13 | receivable_account_id = fields.Many2one(check_company=True) 14 | journal_id = fields.Many2one(check_company=True) 15 | -------------------------------------------------------------------------------- /pos_usability_akretion/models/product.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ProductTemplate(models.Model): 9 | _inherit = 'product.template' 10 | 11 | available_in_pos = fields.Boolean(tracking=True, default=True) 12 | to_weight = fields.Boolean(tracking=True) 13 | -------------------------------------------------------------------------------- /pos_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /pos_usability_akretion/report/pos.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /pos_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/pos_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /pos_usability_akretion/views/pos_order.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | pos.order 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /pos_usability_akretion/views/pos_payment_method.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | pos.payment.method 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /pos_usability_akretion/views/report_pos_order.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | report.pos.order 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | pivot,graph 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /product_category_tax/README.rst: -------------------------------------------------------------------------------- 1 | .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg 2 | :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html 3 | :alt: License: AGPL-3 4 | 5 | ==================== 6 | Product Category Tax 7 | ==================== 8 | 9 | This module will allow you to configure sale and purchase taxes on product categories. When you set the product category of a product, the taxes configured on the product category will be copied to the product. It also adds a constraint on products that checks that the taxes configured on the product are the same as the taxes configured on it's related product category. 10 | 11 | Configuration 12 | ============= 13 | 14 | Set the taxes on the product categories via the menu *Inventory > Configuration > Products > Product Categories*. 15 | 16 | Credits 17 | ======= 18 | 19 | Contributors 20 | ------------ 21 | 22 | * Alexis de Lattre 23 | -------------------------------------------------------------------------------- /product_category_tax/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product 2 | -------------------------------------------------------------------------------- /product_category_tax/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2020 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Product Category Tax', 7 | 'version': '14.0.1.0.0', 8 | 'category': 'Accounting & Finance', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Adds sale and purchase taxes on product category', 11 | 'description': "", 12 | 'author': 'Akretion', 13 | 'website': 'http://www.akretion.com', 14 | 'depends': ['account'], 15 | 'data': ['product_view.xml'], 16 | 'installable': False, 17 | } 18 | -------------------------------------------------------------------------------- /product_manager_group/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/product_manager_group/__init__.py -------------------------------------------------------------------------------- /product_manager_group/security/product_security.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Product Manager 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /product_manager_group_stock/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /product_manager_group_stock/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014-2023 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Product Manager Group Stock', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Hidden', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Extend the group Product Manager to Stock', 11 | 'description': """ 12 | Product Manager Group Stock 13 | =========================== 14 | 15 | Extends the group *Product Manager* to Stock Management. 16 | 17 | This module has been written by Alexis de Lattre from Akretion . 18 | """, 19 | 'author': 'Akretion', 20 | 'website': 'http://www.akretion.com', 21 | 'depends': ['product_manager_group', 'stock'], 22 | 'data': [ 23 | 'security/ir.model.access.csv', 24 | ], 25 | 'installable': False, 26 | 'auto_install': True, 27 | } 28 | -------------------------------------------------------------------------------- /product_manager_group_stock/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_product_manager_warehouse_orderpoint,Full access on orderpoints for Product Manager,stock.model_stock_warehouse_orderpoint,product_manager_group.group_product_manager,1,1,1,1 3 | -------------------------------------------------------------------------------- /product_print_zpl_barcode/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /product_print_zpl_barcode/data/barcode_sequence.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | Private Product Barcode 17 | private.product.barcode 18 | 298 19 | 9 20 | 1 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /product_print_zpl_barcode/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product 2 | from . import stock_picking 3 | -------------------------------------------------------------------------------- /product_print_zpl_barcode/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_product_print_zpl_barcode,Full access to product.print.zpl.barcode wizard,model_product_print_zpl_barcode,base.group_user,1,1,1,1 3 | access_product_print_zpl_barcode_line,Full access to product.print.zpl.barcode.line wizard,model_product_print_zpl_barcode_line,base.group_user,1,1,1,1 4 | -------------------------------------------------------------------------------- /product_print_zpl_barcode/views/stock_picking.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | stock.picking 12 | 13 | 14 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /product_print_zpl_barcode/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product_print_zpl_barcode 2 | from . import res_config_settings 3 | -------------------------------------------------------------------------------- /product_print_zpl_barcode/wizard/res_config_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright 2023 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, fields, models 6 | from odoo.exceptions import ValidationError 7 | import ipaddress 8 | 9 | 10 | class ResConfigSettings(models.TransientModel): 11 | _inherit = "res.config.settings" 12 | 13 | zpl_printer_ip = fields.Char( 14 | config_parameter="product_print_zpl_barcode.printer_ip", 15 | string="ZPL Printer IP Address") 16 | 17 | @api.constrains('zpl_printer_ip') 18 | def _check_zpl_printer_ip(self): 19 | for wiz in self: 20 | if wiz.zpl_printer_ip: 21 | try: 22 | ipaddress.ip_address(wiz.zpl_printer_ip) 23 | except Exception as e: 24 | raise ValidationError(str(e)) 25 | -------------------------------------------------------------------------------- /product_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /product_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product_product 2 | from . import product_template 3 | from . import product_supplierinfo 4 | from . import product_category 5 | -------------------------------------------------------------------------------- /product_usability_akretion/models/product_category.py: -------------------------------------------------------------------------------- 1 | # Copyright 2022-2024 Akretion (https://www.akretion.com). 2 | # @author Sébastien BEAU 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ProductCategory(models.Model): 9 | _inherit = 'product.category' 10 | 11 | name = fields.Char(tracking=10) 12 | parent_id = fields.Many2one(tracking=20) 13 | -------------------------------------------------------------------------------- /product_usability_akretion/models/product_supplierinfo.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2022 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # @author Raphaël Valyi 4 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 5 | 6 | from odoo import fields, models 7 | 8 | 9 | class ProductSupplierinfo(models.Model): 10 | _inherit = 'product.supplierinfo' 11 | 12 | partner_id = fields.Many2one(domain=[('parent_id', '=', False)], ondelete='restrict') 13 | -------------------------------------------------------------------------------- /product_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /product_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/product_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /product_usability_akretion/views/product_supplierinfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | product.supplierinfo 12 | 13 | 14 | 15 | show 16 | 17 | 18 | show 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /purchase_product_tree_default/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/purchase_product_tree_default/__init__.py -------------------------------------------------------------------------------- /purchase_product_tree_default/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2022 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | 5 | { 6 | 'name': 'Purchase Product Tree Default', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Product', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Tree view by default instead of kanban for Products', 11 | 'description': """ 12 | Replace default kanban view by tree view for product menu in Purchase 13 | main menu 14 | """, 15 | 'author': 'Akretion', 16 | 'website': 'http://www.akretion.com', 17 | 'depends': ['purchase'], 18 | 'data': [ 19 | 'views/product_template.xml' 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /purchase_product_tree_default/views/product_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | tree,form,kanban,activity 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /purchase_stock_generic_product/README.rst: -------------------------------------------------------------------------------- 1 | This module **purchase_stock_generic_product** allows the use of generic products whose exact properties is written in the description. With this module, the exact product description written in the *name* field of purchase.order.line is written in the field *description_picking* of stock.move. 2 | 3 | The module has a twin module for sale orders: **sale_stock_generic_product**. 4 | -------------------------------------------------------------------------------- /purchase_stock_generic_product/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /purchase_stock_generic_product/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Purchase Stock Generic Product', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Purchases', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Generic product for purchase orders', 11 | 'author': 'Akretion', 12 | 'maintainers': ['alexis-via'], 13 | "development_status": "Mature", 14 | 'website': 'https://github.com/akretion/odoo-usability', 15 | 'depends': ['purchase_stock'], 16 | 'data': [], 17 | 'installable': False, 18 | } 19 | -------------------------------------------------------------------------------- /purchase_stock_generic_product/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import purchase_order_line 2 | -------------------------------------------------------------------------------- /purchase_stock_generic_product/models/purchase_order_line.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models 6 | 7 | 8 | class PurchaseOrderLine(models.Model): 9 | _inherit = 'purchase.order.line' 10 | 11 | def _prepare_stock_move_vals( 12 | self, picking, price_unit, product_uom_qty, product_uom): 13 | vals = super()._prepare_stock_move_vals( 14 | picking, price_unit, product_uom_qty, product_uom) 15 | # native : product.description_pickingin or self.name 16 | vals['description_picking'] = self.name 17 | return vals 18 | -------------------------------------------------------------------------------- /purchase_stock_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /purchase_stock_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import purchase 2 | from . import stock_move 3 | from . import stock_move_line 4 | -------------------------------------------------------------------------------- /purchase_stock_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /purchase_stock_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/purchase_stock_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /purchase_stock_usability_akretion/views/stock_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | stock.move 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /purchase_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /purchase_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014-2024 Akretion (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Purchase Usability', 7 | 'version': '18.0.1.0.0', 8 | 'category': 'Purchases', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Usability improvements on purchase module', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': ['purchase'], 14 | 'data': [ 15 | 'views/purchase_order.xml', 16 | 'views/purchase_report.xml', 17 | 'views/account_move.xml', 18 | ], 19 | 'installable': True, 20 | } 21 | -------------------------------------------------------------------------------- /purchase_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import purchase_order 2 | from . import product_template 3 | from . import res_partner 4 | from . import account_move 5 | -------------------------------------------------------------------------------- /purchase_usability_akretion/models/account_move.py: -------------------------------------------------------------------------------- 1 | # Copyright 2022-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models 6 | 7 | 8 | class AccountMove(models.Model): 9 | _inherit = 'account.move' 10 | 11 | def delete_lines_qty_zero(self): 12 | # When a user pulls a PO from a supplier invoice, it creates 13 | # all lines including lines that haven't been received. It can be time-consuming 14 | # to delete all these lines with qty = 0 15 | self.ensure_one() 16 | lines = self.env['account.move.line'].search([ 17 | ('move_id', '=', self.id), 18 | ('quantity', '=', 0), 19 | ('display_type', '=', 'product'), 20 | ]) 21 | lines.unlink() 22 | -------------------------------------------------------------------------------- /purchase_usability_akretion/models/product_template.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ProductTemplate(models.Model): 9 | _inherit = 'product.template' 10 | 11 | purchase_method = fields.Selection(tracking=True) 12 | purchase_line_warn = fields.Selection(tracking=True) 13 | -------------------------------------------------------------------------------- /purchase_usability_akretion/models/res_partner.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ResPartner(models.Model): 9 | _inherit = 'res.partner' 10 | 11 | purchase_warn = fields.Selection(tracking=True) 12 | -------------------------------------------------------------------------------- /purchase_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /purchase_usability_akretion/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * Alexis de Lattre 2 | -------------------------------------------------------------------------------- /purchase_usability_akretion/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | This module adds the following functions: 2 | - Track visibility on partner and product purchase warning 3 | - Track visibility on Purchase Order warning 4 | - Methods to help generate py3o purchase reports 5 | - Use untaxed amount in name_get of purchase orders 6 | - Protect Cancel button with a confirmation pop-up 7 | - Misc. improvements to Purchase Order Line views 8 | -------------------------------------------------------------------------------- /purchase_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/purchase_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /purchase_usability_akretion/views/account_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /purchase_usability_akretion/views/purchase_report.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | pivot,graph,list 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /sale_agent/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /sale_agent/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Sale Agent', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Sales', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Add agent on partner, sale order and customer invoice/refund', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': ['sale'], 14 | 'data': [ 15 | "views/res_partner.xml", 16 | "views/sale_order.xml", 17 | "views/sale_report.xml", 18 | "views/account_move.xml", 19 | "views/account_invoice_report.xml", 20 | ], 21 | 'demo': ['demo/demo.xml'], 22 | 'installable': False, 23 | } 24 | -------------------------------------------------------------------------------- /sale_agent/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_partner 2 | from . import sale_order 3 | from . import sale_report 4 | from . import account_move 5 | from . import account_invoice_report 6 | -------------------------------------------------------------------------------- /sale_agent/models/account_invoice_report.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class AccountInvoiceReport(models.Model): 9 | _inherit = "account.invoice.report" 10 | 11 | invoice_agent_id = fields.Many2one("res.partner", string="Agent", readonly=True) 12 | 13 | def _select(self): 14 | select_str = super()._select() 15 | return f"{select_str}, move.invoice_agent_id AS invoice_agent_id" 16 | -------------------------------------------------------------------------------- /sale_agent/models/account_move.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, fields, models 6 | 7 | 8 | class AccountMove(models.Model): 9 | _inherit = 'account.move' 10 | 11 | invoice_agent_id = fields.Many2one( 12 | 'res.partner', domain=[('agent', '=', True)], string="Agent", 13 | ondelete='restrict', tracking=True, 14 | compute='_compute_invoice_agent_id', store=True, readonly=False, precompute=True) 15 | 16 | @api.depends('partner_id', 'move_type') 17 | def _compute_invoice_agent_id(self): 18 | for move in self: 19 | if move.is_sale_document() and move.partner_id: 20 | move.invoice_agent_id = move.partner_id.commercial_partner_id.agent_id.id or False 21 | else: 22 | move.invoice_agent_id = False 23 | -------------------------------------------------------------------------------- /sale_agent/models/res_partner.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ResPartner(models.Model): 9 | _inherit = 'res.partner' 10 | 11 | agent = fields.Boolean(string="Is an agent?", tracking=True) 12 | # agent_id is only displayed on parent partner 13 | # on sale.order and invoice, it uses commercial_partner_id.agent_id.id 14 | agent_id = fields.Many2one( 15 | 'res.partner', domain=[('agent', '=', True)], ondelete='restrict', 16 | copy=False, tracking=True) 17 | -------------------------------------------------------------------------------- /sale_agent/models/sale_report.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class SaleReport(models.Model): 9 | _inherit = "sale.report" 10 | 11 | agent_id = fields.Many2one("res.partner", readonly=True) 12 | 13 | def _select_additional_fields(self): 14 | res = super()._select_additional_fields() 15 | res["agent_id"] = "s.agent_id" 16 | return res 17 | -------------------------------------------------------------------------------- /sale_agent/views/sale_report.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | agent.sale.report.form 13 | sale.report 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /sale_confirm_wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /sale_confirm_wizard/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_order 2 | -------------------------------------------------------------------------------- /sale_confirm_wizard/models/sale_order.py: -------------------------------------------------------------------------------- 1 | # Copyright 2020-2021 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models 6 | 7 | 8 | class SaleOrder(models.Model): 9 | _inherit = 'sale.order' 10 | 11 | def sale_confirm_wizard_button(self): 12 | """This method is designed to be inherited. 13 | For example, inherit it if you don't want to start the wizard in 14 | some scenarios""" 15 | action = self.sudo().env.ref( 16 | 'sale_confirm_wizard.sale_confirm_action').read()[0] 17 | return action 18 | -------------------------------------------------------------------------------- /sale_confirm_wizard/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_sale_confirm_wizard,Full access on sale.confirm wizard,model_sale_confirm,sales_team.group_sale_salesman,1,1,1,1 3 | -------------------------------------------------------------------------------- /sale_confirm_wizard/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_confirm 2 | -------------------------------------------------------------------------------- /sale_down_payment/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /sale_down_payment/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale 2 | from . import account_move_line 3 | from . import account_payment 4 | -------------------------------------------------------------------------------- /sale_down_payment/views/account_bank_statement.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | advance_payment.account.bank.statement.form 13 | account.bank.statement 14 | 15 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /sale_down_payment/views/account_payment.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | account.payment.sale.form 13 | account.payment 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /sale_down_payment/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_bank_statement_sale 2 | -------------------------------------------------------------------------------- /sale_margin_no_onchange/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale 2 | from . import sale_report 3 | -------------------------------------------------------------------------------- /sale_margin_no_onchange/sale_report.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018-2019 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class SaleReport(models.Model): 9 | _inherit = 'sale.report' 10 | 11 | margin = fields.Float(string='Margin', readonly=True) 12 | 13 | def _query(self, with_clause='', fields={}, groupby='', from_clause=''): 14 | fields['margin_company_currency'] =\ 15 | ", SUM(l.margin_company_currency) AS margin" 16 | res = super(SaleReport, self)._query( 17 | with_clause=with_clause, fields=fields, groupby=groupby, 18 | from_clause=from_clause) 19 | return res 20 | -------------------------------------------------------------------------------- /sale_no_optional_product/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/sale_no_optional_product/__init__.py -------------------------------------------------------------------------------- /sale_no_optional_product/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2020 Akretion (https://www.akretion.com). 2 | # @author Sébastien BEAU 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | "name": "Sale no optional product", 7 | "summary": "Hide optional product", 8 | "version": "14.0.1.0.0", 9 | "category": "Usability", 10 | "website": "www.akretion.com", 11 | "author": " Akretion", 12 | "license": "AGPL-3", 13 | "application": False, 14 | "installable": False, 15 | "external_dependencies": { 16 | "python": [], 17 | "bin": [], 18 | }, 19 | "depends": [ 20 | "sale_management", 21 | ], 22 | "data": [ 23 | "views/sale_order_view.xml", 24 | ], 25 | "demo": [ 26 | ], 27 | "qweb": [ 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /sale_no_optional_product/views/sale_order_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | sale.order 6 | 7 | 8 | 9 | 1 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /sale_no_preview_button/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/sale_no_preview_button/__init__.py -------------------------------------------------------------------------------- /sale_no_preview_button/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2020 Akretion (https://www.akretion.com). 2 | # @author Sébastien BEAU 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | "name": "Sale no preview button", 7 | "summary": "Hide 'preview' from sale", 8 | "version": "14.0.1.0.0", 9 | "category": "Usabability", 10 | "website": "www.akretion.com", 11 | "author": " Akretion", 12 | "license": "AGPL-3", 13 | "application": False, 14 | "installable": False, 15 | "external_dependencies": { 16 | "python": [], 17 | "bin": [], 18 | }, 19 | "depends": [ 20 | "sale", 21 | ], 22 | "data": [ 23 | "views/sale_view.xml", 24 | ], 25 | "demo": [ 26 | ], 27 | "qweb": [ 28 | ] 29 | } 30 | 31 | 32 | -------------------------------------------------------------------------------- /sale_no_preview_button/views/sale_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | sale.order 6 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /sale_order_add_bom/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /sale_order_add_bom/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import mrp_bom 2 | -------------------------------------------------------------------------------- /sale_order_add_bom/models/mrp_bom.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2022 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models, fields 6 | 7 | 8 | class MrpBom(models.Model): 9 | _inherit = 'mrp.bom' 10 | 11 | sale_ok = fields.Boolean(related='product_tmpl_id.sale_ok', store=True) 12 | -------------------------------------------------------------------------------- /sale_order_add_bom/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_sale_add_phantom_bom_sale,Full access on sale.add.phantom.bom wizard to sale user,model_sale_add_phantom_bom,sales_team.group_sale_salesman,1,1,1,1 3 | access_sale_add_phantom_bom_stock,Full access on sale.add.phantom.bom wizard to stock user,model_sale_add_phantom_bom,stock.group_stock_user,1,1,1,1 4 | -------------------------------------------------------------------------------- /sale_order_add_bom/views/sale_order.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | add.bom.sale.order.form 12 | sale.order 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /sale_order_add_bom/views/stock_picking.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | add.bom.stock.picking.form 13 | stock.picking 14 | 15 | 16 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /sale_order_add_bom/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_add_phantom_bom 2 | -------------------------------------------------------------------------------- /sale_order_route/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /sale_order_route/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2021 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Sale Order Route', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Sales', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Set route on sale order', 11 | 'description': """ 12 | This small module adds the possibility to set a route on a sale order. Upon sale order confirmation, the route will be copied to all the sale order lines. 13 | 14 | This module has been written by Alexis de Lattre from Akretion 15 | . 16 | """, 17 | 'author': 'Akretion', 18 | 'website': 'http://www.akretion.com', 19 | 'depends': ['sale_stock'], 20 | 'data': ['views/sale_order.xml', 'views/sale_report.xml'], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /sale_order_route/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_order 2 | from . import sale_report 3 | -------------------------------------------------------------------------------- /sale_order_route/models/sale_report.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class SaleReport(models.Model): 9 | _inherit = "sale.report" 10 | 11 | route_id = fields.Many2one('stock.route', string='Route', readonly=True) 12 | 13 | def _select_additional_fields(self): 14 | res = super()._select_additional_fields() 15 | res['route_id'] = "s.route_id" 16 | return res 17 | 18 | def _group_by_sale(self): 19 | res = super()._group_by_sale() 20 | res += ', s.route_id' 21 | return res 22 | -------------------------------------------------------------------------------- /sale_order_route/views/sale_report.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | sale.report 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /sale_product_tree_default/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/sale_product_tree_default/__init__.py -------------------------------------------------------------------------------- /sale_product_tree_default/__manifest__.py: -------------------------------------------------------------------------------- 1 | # © 2019 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | 5 | { 6 | 'name': 'Sale Product Tree Default', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Product', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Tree view by default instead of kanban for Products', 11 | 'description': """ 12 | Replace default kanban view by tree view for product menu in sale 13 | main menu 14 | """, 15 | 'author': 'Akretion', 16 | 'website': 'http://www.akretion.com', 17 | 'depends': ['sale'], 18 | 'data': [ 19 | 'views/product_template.xml' 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /sale_product_tree_default/views/product_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | tree,form,kanban,activity 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /sale_quotation_title/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale 2 | -------------------------------------------------------------------------------- /sale_quotation_title/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2022 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | # @author Alexis de Lattre 4 | 5 | { 6 | 'name': 'Sale Quotation Title', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Sales', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Adds a title field on quotations', 11 | 'description': """ 12 | Sale Quotation Title 13 | ==================== 14 | 15 | This module only adds a field *quotation_title* on sale.order (to be displayed in report). 16 | 17 | This module has been written by Alexis de Lattre from Akretion 18 | . 19 | """, 20 | 'author': 'Akretion', 21 | 'website': 'http://www.akretion.com', 22 | 'depends': ['sale'], 23 | 'data': ['sale_view.xml'], 24 | 'installable': False, 25 | } 26 | -------------------------------------------------------------------------------- /sale_quotation_title/sale.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016-2022 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | # @author Alexis de Lattre 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class SaleOrder(models.Model): 9 | _inherit = 'sale.order' 10 | 11 | quotation_title = fields.Char(tracking=True) 12 | -------------------------------------------------------------------------------- /sale_remove_my_quotation_filter/README.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Sale Remove My Quotation Filter 3 | =============================== 4 | 5 | This module removes the default filter **My Quotations** in the menu entry *Sales > Orders > Quotations*. 6 | 7 | Credits 8 | ======= 9 | 10 | Authors 11 | ~~~~~~~ 12 | 13 | * Akretion 14 | 15 | Contributors 16 | ~~~~~~~~~~~~ 17 | 18 | * Alexis de Lattre 19 | -------------------------------------------------------------------------------- /sale_remove_my_quotation_filter/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/sale_remove_my_quotation_filter/__init__.py -------------------------------------------------------------------------------- /sale_remove_my_quotation_filter/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2023 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Sale remove My Quotations filter', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Sales', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Remove default filter My Quotations', 11 | 'author': 'Akretion', 12 | 'website': 'https://github.com/akretion/odoo-usability', 13 | 'depends': ['sale'], 14 | 'data': ['views/sale_order.xml'], 15 | 'installable': False, 16 | } 17 | -------------------------------------------------------------------------------- /sale_remove_my_quotation_filter/views/sale_order.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /sale_stock_generic_product/README.rst: -------------------------------------------------------------------------------- 1 | This module **sale_stock_generic_product** allows the use of generic products whose exact properties is written in the description. With this module, the exact product description written in the *name* field of sale.order.line is written in the field *description_picking* of stock.move and stock.move.line. 2 | 3 | The module has a twin module for purchase: **purchase_stock_generic_product**. 4 | -------------------------------------------------------------------------------- /sale_stock_generic_product/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /sale_stock_generic_product/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Sale Stock Generic Product', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Sales', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Generic products for sale orders', 11 | 'author': 'Akretion', 12 | 'maintainers': ['alexis-via'], 13 | "development_status": "Mature", 14 | 'website': 'https://github.com/akretion/odoo-usability', 15 | 'depends': ['sale_stock'], 16 | 'data': ['views/stock_move_line.xml'], 17 | 'installable': False, 18 | } 19 | -------------------------------------------------------------------------------- /sale_stock_generic_product/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_order_line 2 | from . import stock_rule 3 | from . import stock_move 4 | -------------------------------------------------------------------------------- /sale_stock_generic_product/models/sale_order_line.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models 6 | 7 | 8 | class SaleOrderLine(models.Model): 9 | _inherit = 'sale.order.line' 10 | 11 | def _prepare_procurement_values(self, group_id=False): 12 | vals = super()._prepare_procurement_values(group_id=group_id) 13 | vals['description_picking'] = self.name 14 | return vals 15 | -------------------------------------------------------------------------------- /sale_stock_generic_product/models/stock_move.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models 6 | 7 | 8 | class StockMove(models.Model): 9 | _inherit = 'stock.move' 10 | 11 | def _prepare_move_line_vals(self, quantity=None, reserved_quant=None): 12 | vals = super()._prepare_move_line_vals(quantity=quantity, reserved_quant=reserved_quant) 13 | vals['description_picking'] = self.description_picking 14 | return vals 15 | -------------------------------------------------------------------------------- /sale_stock_generic_product/models/stock_rule.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (http://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models 6 | 7 | 8 | class StockRule(models.Model): 9 | _inherit = 'stock.rule' 10 | 11 | def _get_stock_move_values( 12 | self, product_id, product_qty, product_uom, location_dest_id, name, 13 | origin, company_id, values): 14 | move_vals = super()._get_stock_move_values( 15 | product_id, product_qty, product_uom, location_dest_id, name, 16 | origin, company_id, values) 17 | move_vals['description_picking'] = values.get('description_picking') 18 | return move_vals 19 | -------------------------------------------------------------------------------- /sale_stock_generic_product/views/stock_move_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | stock.move.line 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /sale_stock_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /sale_stock_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_order 2 | from . import account_move 3 | from . import stock_picking 4 | -------------------------------------------------------------------------------- /sale_stock_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /sale_stock_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/sale_stock_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /sale_stock_usability_akretion/views/procurement_group.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | sale_stock_usability.procurement.group.form 12 | procurement.group 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /sale_stock_usability_akretion/views/sale_report.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | sale.report 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /sale_stock_usability_akretion/views/stock_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | sale_stock_usability.stock_move.form 12 | stock.move 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /sale_stock_usability_akretion/views/stock_picking.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | sale_stock_usability.stock.picking.form 12 | stock.picking 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /sale_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /sale_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014-2024 Akretion (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Sale Usability', 7 | 'version': '18.0.1.0.0', 8 | 'category': 'Sales', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Usability improvements on sale module', 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': [ 14 | 'sale', 15 | 'account_usability_akretion', # for company view 16 | 'base_view_inheritance_extension', 17 | ], 18 | 'data': [ 19 | 'views/sale_order.xml', 20 | 'views/sale_report.xml', 21 | 'views/product_pricelist_item.xml', 22 | 'views/account_move.xml', 23 | 'views/res_company.xml', 24 | ], 25 | 'installable': True, 26 | } 27 | -------------------------------------------------------------------------------- /sale_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_order 2 | from . import account_move 3 | from . import product_template 4 | from . import res_partner 5 | from . import res_company 6 | -------------------------------------------------------------------------------- /sale_usability_akretion/models/product_template.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2024 Akretion France (https://www.akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ProductTemplate(models.Model): 9 | _inherit = 'product.template' 10 | 11 | service_type = fields.Selection(tracking=True) 12 | expense_policy = fields.Selection(tracking=True) 13 | sale_line_warn = fields.Selection(tracking=True) 14 | -------------------------------------------------------------------------------- /sale_usability_akretion/models/res_company.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021-2024 Akretion France (https://akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ResCompany(models.Model): 9 | _inherit = 'res.company' 10 | 11 | # Similar to the field static_invoice_terms in account_usability_akretion 12 | static_sale_terms = fields.Text( 13 | translate=True, string="Legal Terms on Quotation") 14 | -------------------------------------------------------------------------------- /sale_usability_akretion/models/res_partner.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2024 Akretion France (https://akretion.com/) 2 | # @author: Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ResPartner(models.Model): 9 | _inherit = 'res.partner' 10 | 11 | sale_warn = fields.Selection(tracking=True) 12 | -------------------------------------------------------------------------------- /sale_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /sale_usability_akretion/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | Alexis de Lattre 2 | -------------------------------------------------------------------------------- /sale_usability_akretion/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | This modules adds the following functions: 2 | 3 | * Display amount untaxed in tree view 4 | * Methods for py3o sale reports 5 | * Add tracking on partner warning fields 6 | * Add tracking on product fields 7 | * Add tracking on Sale Order fields 8 | * Add menu for Pricelist Items 9 | * Add `has_discount` field on Sale Order 10 | * Move client_order_ref from the second tab to the top 11 | * Protect Cancel button with a confirmation pop-up 12 | * Remove Sale Orders from Quotations menu 13 | * Add Group By Customer on Sales order search view 14 | * Add sum=1 on several quantity fields 15 | * Add Product Category Menu entry 16 | -------------------------------------------------------------------------------- /sale_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/sale_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /sale_usability_akretion/views/account_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | sale_usability.account.move.form 12 | account.move 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /sale_usability_akretion/views/res_company.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | sale_usability.res.company.form 13 | res.company 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /service_line_qty_update_base/__init__.py: -------------------------------------------------------------------------------- 1 | from . import wizard 2 | -------------------------------------------------------------------------------- /service_line_qty_update_base/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2020 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Service Line Qty Update Base', 7 | 'version': '12.0.1.0.0', 8 | 'category': 'Tools', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Update delivery qty on service lines - Base module', 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': ['product'], 14 | 'data': [ 15 | 'wizard/service_qty_update_view.xml', 16 | ], 17 | 'installable': False, 18 | } 19 | -------------------------------------------------------------------------------- /service_line_qty_update_base/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import service_qty_update 2 | -------------------------------------------------------------------------------- /service_line_qty_update_purchase/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /service_line_qty_update_purchase/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2020 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Service Line Qty Update Purchase', 7 | 'version': '12.0.1.0.0', 8 | 'category': 'Tools', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Update delivery qty on service lines - Purchase module', 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': [ 14 | 'purchase', 15 | 'service_line_qty_update_base', 16 | 'purchase_reception_status', 17 | ], 18 | 'data': [ 19 | 'views/purchase_order.xml', 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /service_line_qty_update_purchase/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import purchase_order 2 | -------------------------------------------------------------------------------- /service_line_qty_update_purchase/models/purchase_order.py: -------------------------------------------------------------------------------- 1 | # Copyright 2020 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, fields, models 6 | 7 | 8 | class PurchaseOrder(models.Model): 9 | _inherit = 'purchase.order' 10 | 11 | has_service = fields.Boolean(compute='_compute_has_service') 12 | 13 | @api.depends('order_line.product_id.type') 14 | def _compute_has_service(self): 15 | for order in self: 16 | has_service = False 17 | for l in order.order_line: 18 | if l.product_id.type == 'service': 19 | has_service = True 20 | break 21 | order.has_service = has_service 22 | -------------------------------------------------------------------------------- /service_line_qty_update_purchase/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import service_qty_update 2 | -------------------------------------------------------------------------------- /service_line_qty_update_sale/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /service_line_qty_update_sale/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2020 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Service Line Qty Update Sale', 7 | 'version': '12.0.1.0.0', 8 | 'category': 'Tools', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Update delivery qty on service lines - Sale module', 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': [ 14 | 'sale', 15 | 'service_line_qty_update_base', 16 | # 'purchase_reception_status', 17 | ], 18 | 'data': [ 19 | 'views/sale_order.xml', 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /service_line_qty_update_sale/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sale_order 2 | -------------------------------------------------------------------------------- /service_line_qty_update_sale/models/sale_order.py: -------------------------------------------------------------------------------- 1 | # Copyright 2020 Akretion France (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import api, fields, models 6 | 7 | 8 | class SaleOrder(models.Model): 9 | _inherit = 'sale.order' 10 | 11 | has_service = fields.Boolean(compute='_compute_has_service') 12 | 13 | @api.depends('order_line.product_id.type') 14 | def _compute_has_service(self): 15 | for order in self: 16 | has_service = False 17 | for l in order.order_line: 18 | if l.product_id.type == 'service': 19 | has_service = True 20 | break 21 | order.has_service = has_service 22 | -------------------------------------------------------------------------------- /service_line_qty_update_sale/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import service_qty_update 2 | -------------------------------------------------------------------------------- /shopinvader_usability_akretion/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/shopinvader_usability_akretion/__init__.py -------------------------------------------------------------------------------- /shopinvader_usability_akretion/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Akretion 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | { 5 | "name": "Shopinvader Usability", 6 | "description": """ 7 | Shopinvader Usability""", 8 | "version": "14.0.1.0.0", 9 | "license": "AGPL-3", 10 | "author": "Akretion", 11 | "website": "https://github.com/OCA/odoo-usability", 12 | "depends": [ 13 | "shopinvader", 14 | "sale_usability", 15 | ], 16 | "data": ["views/sale_views.xml"], 17 | "installable": False, 18 | "auto_install": True, 19 | } 20 | -------------------------------------------------------------------------------- /shopinvader_usability_akretion/views/sale_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | ['&', ('state', 'in', ('draft', 'sent', 'cancel')), ('typology', '=', 'sale')] 9 | 10 | 11 | 12 | ['&', ('state', 'in', ('draft', 'sent', 'cancel')), ('typology', '=', 'sale')] 15 | 16 | 17 | 18 | ['&', ('state', 'in', ('draft', 'sent', 'cancel')), ('typology', '=', 'sale')] 21 | 22 | 23 | -------------------------------------------------------------------------------- /stock_account_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /stock_account_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product 2 | -------------------------------------------------------------------------------- /stock_account_usability_akretion/views/stock_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | stock_account_usability.stock.move.form 13 | stock.move 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /stock_picking_type_default_partner/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /stock_picking_type_default_partner/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import stock_picking 2 | -------------------------------------------------------------------------------- /stock_picking_type_default_partner/views/stock_picking_type.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | default.partner.stock.picking.type.form 13 | stock.picking.type 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /stock_product_tree_default/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/stock_product_tree_default/__init__.py -------------------------------------------------------------------------------- /stock_product_tree_default/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019-2021 Akretion (http://www.akretion.com) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | 5 | { 6 | 'name': 'Stock Product Tree Default', 7 | 'version': '16.0.1.0.0', 8 | 'category': 'Product', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Tree view by default instead of kanban for Products', 11 | 'description': """ 12 | Replace default kanban view by tree view for product menu in stock 13 | main menu 14 | """, 15 | 'author': 'Akretion', 16 | 'website': 'http://www.akretion.com', 17 | 'depends': ['stock'], 18 | 'data': [ 19 | 'views/product_template.xml' 20 | ], 21 | 'installable': False, 22 | } 23 | -------------------------------------------------------------------------------- /stock_product_tree_default/views/product_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | tree,form,kanban,activity 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /stock_quant_package_move_wizard/README.rst: -------------------------------------------------------------------------------- 1 | Module Stock Quant Package Moving Wizard 2 | ========================================= 3 | 4 | This module provides a **super fast** and **super easy** way of moving a quant to another stock location. 5 | 6 | Usage 7 | ===== 8 | 9 | 1. Select one or several quants 10 | 2. Click on the *Move* button 11 | 3. Follow the instructions on the wizard: select a picking type (or a destination stock location) and, if you don't want to move the full quant, edit the quantity to move. 12 | 4. Validate the wizard 13 | 14 | Contributors 15 | ============ 16 | 17 | * Alexis de Lattre 18 | * Oihane Crucelaegui 19 | * Pedro M. Baeza 20 | * Ana Juaristi 21 | -------------------------------------------------------------------------------- /stock_quant_package_move_wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizards 3 | -------------------------------------------------------------------------------- /stock_quant_package_move_wizard/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import stock_quant 2 | -------------------------------------------------------------------------------- /stock_quant_package_move_wizard/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_stock_quant_move_wizard,Full access on stock.quant.move.wizard,model_stock_quant_move_wizard,stock.group_stock_user,1,1,1,1 3 | access_stock_quant_move_wizard_line,Full access on stock.quant.move.wizard.line,model_stock_quant_move_wizard_line,stock.group_stock_user,1,1,1,1 4 | -------------------------------------------------------------------------------- /stock_quant_package_move_wizard/wizards/__init__.py: -------------------------------------------------------------------------------- 1 | from . import stock_quant_move_wizard 2 | -------------------------------------------------------------------------------- /stock_usability_akretion/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /stock_usability_akretion/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import stock_move 2 | from . import stock_move_line 3 | from . import stock_picking 4 | from . import stock_picking_type 5 | from . import stock_warehouse_orderpoint 6 | from . import stock_quant 7 | from . import stock_lot 8 | from . import procurement_group 9 | from . import procurement_scheduler_log 10 | from . import product 11 | from . import res_partner 12 | -------------------------------------------------------------------------------- /stock_usability_akretion/models/procurement_scheduler_log.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2022 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ProcurementSchedulerLog(models.Model): 9 | _name = 'procurement.scheduler.log' 10 | _description = 'Logs of the Procurement Scheduler' 11 | _order = 'create_date desc' 12 | 13 | company_id = fields.Many2one( 14 | 'res.company', string='Company', readonly=True) 15 | start_datetime = fields.Datetime(string='Start Date', readonly=True) 16 | -------------------------------------------------------------------------------- /stock_usability_akretion/models/res_partner.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017-2024 Akretion France (https://akretion.com/) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class ResPartner(models.Model): 9 | _inherit = 'res.partner' 10 | 11 | picking_warn = fields.Selection(tracking=True) 12 | -------------------------------------------------------------------------------- /stock_usability_akretion/models/stock_lot.py: -------------------------------------------------------------------------------- 1 | # Copyright 2024 Akretion France (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models 6 | 7 | 8 | class StockLot(models.Model): 9 | _inherit = 'stock.lot' 10 | 11 | name = fields.Char(tracking=True) 12 | ref = fields.Char(tracking=True) 13 | product_id = fields.Many2one(tracking=True) 14 | company_id = fields.Many2one(tracking=True) 15 | -------------------------------------------------------------------------------- /stock_usability_akretion/models/stock_picking.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014-2024 Akretion (https://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import fields, models, _ 6 | 7 | 8 | class StockPicking(models.Model): 9 | _inherit = 'stock.picking' 10 | # In the stock module: _order = "is_favorite desc, sequence, id" 11 | 12 | partner_id = fields.Many2one(tracking=True) 13 | picking_type_id = fields.Many2one(tracking=True) 14 | move_type = fields.Selection(tracking=True) 15 | is_locked = fields.Boolean(tracking=True) 16 | 17 | def do_unreserve(self): 18 | res = super().do_unreserve() 19 | for pick in self: 20 | pick.message_post(body=_("Picking unreserved.")) 21 | return res 22 | -------------------------------------------------------------------------------- /stock_usability_akretion/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["whool"] 3 | build-backend = "whool.buildapi" 4 | -------------------------------------------------------------------------------- /stock_usability_akretion/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_procurement_scheduler_log_full,Full access on procurement.scheduler.log to System group,model_procurement_scheduler_log,base.group_system,1,1,1,1 3 | access_procurement_scheduler_log_user,Read/Create procurement.scheduler.log to Stock user,model_procurement_scheduler_log,stock.group_stock_user,1,0,1,0 4 | access_procurement_scheduler_log_read,Read access on procurement.scheduler.log to Employee,model_procurement_scheduler_log,base.group_user,1,0,0,0 5 | access_stock_warehouse_orderpoint_employee,Read access on stock.warehouse.orderpoint to employee (needed to open product form view with employee-only group),stock.model_stock_warehouse_orderpoint,base.group_user,1,0,0,0 6 | -------------------------------------------------------------------------------- /stock_usability_akretion/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/stock_usability_akretion/static/description/icon.png -------------------------------------------------------------------------------- /stock_usability_akretion/views/procurement_group.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | stock_usability.procurement.group.form 12 | procurement.group 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/__init__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import models 6 | from . import wizard 7 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/__manifest__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Default Stock Warehouse on User', 7 | 'version': '12.0.1.0.0', 8 | 'category': 'Inventory, Logistics, Warehousing', 9 | 'license': 'AGPL-3', 10 | 'summary': 'Configure a default warehouse on user', 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': ['stock'], 14 | 'data': [ 15 | 'views/users_view.xml', 16 | ], 17 | 'installable': False, 18 | } 19 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/models/__init__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import res_users 6 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/models/res_users.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models, fields 6 | 7 | 8 | class ResUsers(models.Model): 9 | _inherit = 'res.users' 10 | 11 | context_default_warehouse_id = fields.Many2one( 12 | 'stock.warehouse', 13 | string='Default Warehouse', 14 | company_dependent=True, 15 | help="Default warehouse for sale orders (if the module " 16 | "stock_user_default_warehouse_sale is installed), purchase orders " 17 | "(if the module stock_user_default_warehouse_purchase is installed) " 18 | "and production orders " 19 | "(if the module stock_user_default_warehouse_mrp is installed)." 20 | ) 21 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * Alexis de Lattre 2 | * Daniel Luque 3 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | With this module, you will be able to configure a default warehouse in the preferences of the user. 2 | 3 | This module doesn't do anything by itself. It should be used together with at least one of the following modules: 4 | 5 | * stock_user_default_warehouse_sale 6 | * stock_user_default_warehouse_purchase 7 | * stock_user_default_warehouse_mrp 8 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/stock_user_default_warehouse_base/static/description/icon.png -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import stock_change_product_qty 6 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_base/wizard/stock_change_product_qty.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models, api 6 | 7 | 8 | class StockChangeProductQty(models.TransientModel): 9 | _inherit = 'stock.change.product.qty' 10 | 11 | @api.model 12 | def default_get(self, fields_list): 13 | res = super().default_get(fields_list) 14 | if self.env.user.context_default_warehouse_id: 15 | res['location_id'] = self.env.user.context_default_warehouse_id.\ 16 | lot_stock_id.id 17 | return res 18 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_mrp/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import models 6 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_mrp/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Default Warehouse on User (MRP)', 7 | 'version': '12.0.1.0.0', 8 | 'category': 'Manufacturing', 9 | 'license': 'AGPL-3', 10 | 'summary': "Use the users's default warehouse on manufacturing orders", 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': ['mrp', 'stock_user_default_warehouse_base'], 14 | 'installable': False, 15 | } 16 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_mrp/models/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import mrp 6 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_mrp/models/mrp.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models, fields, api 6 | 7 | 8 | class MrpProduction(models.Model): 9 | _inherit = 'mrp.production' 10 | 11 | @api.model 12 | def _default_pref_picking_type(self): 13 | manu_type = self.env.user.context_default_warehouse_id.manu_type_id 14 | return manu_type.id if manu_type else self._get_default_picking_type() 15 | 16 | # No need to inherit the default value of location_src_id and 17 | # location_dest_id because it is immediately over-ridden 18 | # by the onchange of picking_type_id 19 | picking_type_id = fields.Many2one(default=_default_pref_picking_type) 20 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_mrp/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * Alexis de Lattre 2 | * Daniel Luque 3 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_mrp/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | The default warehouse configured in the preferences of the user will be used by default on manufacturing orders. 2 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_mrp/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/stock_user_default_warehouse_mrp/static/description/icon.png -------------------------------------------------------------------------------- /stock_user_default_warehouse_purchase/__init__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import models 6 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_purchase/__manifest__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Default Warehouse on User (Purchase)', 7 | 'version': '12.0.1.0.0', 8 | 'category': 'Purchases', 9 | 'license': 'AGPL-3', 10 | 'summary': "Use the users's default warehouse on purchase orders", 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': ['purchase', 'stock_user_default_warehouse_base'], 14 | 'installable': False, 15 | } 16 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_purchase/models/__init__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import purchase 6 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_purchase/models/purchase.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models, fields, api 6 | 7 | 8 | class PurchaseOrder(models.Model): 9 | _inherit = 'purchase.order' 10 | 11 | @api.model 12 | def _default_pref_picking_type(self): 13 | in_type = self.env.user.context_default_warehouse_id.in_type_id 14 | return in_type.id if in_type else self._default_picking_type() 15 | 16 | picking_type_id = fields.Many2one(default=_default_pref_picking_type) 17 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_purchase/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * Alexis de Lattre 2 | * Daniel Luque 3 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_purchase/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | The default warehouse configured in the preferences of the user will be used by default for the picking type on purchase orders. 2 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_purchase/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/stock_user_default_warehouse_purchase/static/description/icon.png -------------------------------------------------------------------------------- /stock_user_default_warehouse_sale/__init__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import models 6 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_sale/__manifest__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | { 6 | 'name': 'Default Warehouse on User (Sale)', 7 | 'version': '12.0.1.0.0', 8 | 'category': 'Sale Management', 9 | 'license': 'AGPL-3', 10 | 'summary': "Use the users's default warehouse on sale orders", 11 | 'author': 'Akretion', 12 | 'website': 'http://www.akretion.com', 13 | 'depends': ['sale_stock', 'stock_user_default_warehouse_base'], 14 | 'installable': False, 15 | } 16 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_sale/models/__init__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from . import sale 6 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_sale/models/sale.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (http://www.akretion.com) 2 | # @author Alexis de Lattre 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 4 | 5 | from odoo import models, fields, api 6 | 7 | 8 | class SaleOrder(models.Model): 9 | _inherit = 'sale.order' 10 | 11 | @api.model 12 | def _default_warehouse_id(self): 13 | warehouse = self.env.user.context_default_warehouse_id 14 | if not warehouse: 15 | warehouse = self.env['stock.warehouse'].search( 16 | [('company_id', '=', self.env.user.company_id.id)], limit=1) 17 | return warehouse 18 | 19 | warehouse_id = fields.Many2one(default=_default_warehouse_id) 20 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_sale/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * Alexis de Lattre 2 | * Daniel Luque 3 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_sale/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | The default warehouse configured in the preferences of the user will be used by default on sale orders. 2 | -------------------------------------------------------------------------------- /stock_user_default_warehouse_sale/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/stock_user_default_warehouse_sale/static/description/icon.png -------------------------------------------------------------------------------- /stock_valuation_xlsx/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /stock_valuation_xlsx/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import stock_expiry_depreciation_rule 2 | -------------------------------------------------------------------------------- /stock_valuation_xlsx/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_stock_expiry_depreciation_rule_full,Full access on stock.expiry.depreciation.rule to account manager,model_stock_expiry_depreciation_rule,account.group_account_manager,1,1,1,1 3 | access_stock_expiry_depreciation_rule_read,Read access on stock.expiry.depreciation.rule to stock user,model_stock_expiry_depreciation_rule,stock.group_stock_user,1,0,0,0 4 | access_stock_valuation_xlsx,stock.valuation.xlsx wizard,model_stock_valuation_xlsx,stock.group_stock_user,1,1,1,0 5 | access_stock_variation_xlsx,stock.variation.xlsx wizard,model_stock_variation_xlsx,stock.group_stock_user,1,1,1,0 6 | -------------------------------------------------------------------------------- /stock_valuation_xlsx/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import stock_valuation_xlsx 2 | from . import stock_variation_xlsx 3 | -------------------------------------------------------------------------------- /volume_precision/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /volume_precision/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019 David BEAL @ Akretion 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). 3 | 4 | { 5 | 'name': 'Volume Precision', 6 | 'summary': 'Set precision on volume fields', 7 | 'version': '12.0.0.0.1', 8 | 'author': 'Akretion', 9 | 'maintainer': 'Akretion', 10 | 'license': 'AGPL-3', 11 | 'category': 'product', 12 | 'depends': [ 13 | 'delivery', 14 | ], 15 | 'website': 'http://www.akretion.com/', 16 | 'data': [ 17 | 'data/precision.xml', 18 | ], 19 | 'installable': False, 20 | } 21 | -------------------------------------------------------------------------------- /volume_precision/data/precision.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Volume 6 | 4 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /volume_precision/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import precision 2 | -------------------------------------------------------------------------------- /volume_precision/models/precision.py: -------------------------------------------------------------------------------- 1 | # Copyright 2019 David BEAL @ Akretion 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). 3 | 4 | from odoo import models, fields 5 | from odoo.addons import decimal_precision as dp 6 | 7 | 8 | class ProductTemplate(models.Model): 9 | _inherit = 'product.template' 10 | 11 | volume = fields.Float(digits=dp.get_precision('Volume')) 12 | 13 | 14 | class ProductProduct(models.Model): 15 | _inherit = 'product.product' 16 | 17 | volume = fields.Float(digits=dp.get_precision('Volume')) 18 | 19 | 20 | class StockPicking(models.Model): 21 | _inherit = 'stock.picking' 22 | 23 | volume = fields.Float(digits=dp.get_precision('Volume')) 24 | -------------------------------------------------------------------------------- /volume_precision/readme/CONFIGURE.rst: -------------------------------------------------------------------------------- 1 | Settings > Technical > Database Structure > Decimal Precision : Volume 2 | -------------------------------------------------------------------------------- /volume_precision/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | David Beal 2 | -------------------------------------------------------------------------------- /volume_precision/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | - add Volume decimal precision 2 | - override volume fields definition with it 3 | -------------------------------------------------------------------------------- /web_tab_title/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akretion/odoo-usability/836a88dfeb257e288234b6da00bb99cc28a54b4a/web_tab_title/__init__.py -------------------------------------------------------------------------------- /web_tab_title/__manifest__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Akretion 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | { 5 | 'name': 'Web Tab Title', 6 | 'description': """ 7 | Automatically set tab document.title when empty. 8 | Important limitation: the tab will get its title only once you browse it. 9 | """, 10 | 'version': '14.0.1.0.0', 11 | 'license': 'AGPL-3', 12 | 'author': 'Akretion', 13 | 'website': 'akretion.com', 14 | 'depends': [ 15 | 'web', 16 | ], 17 | 'data': [ 18 | ], 19 | 'demo': [ 20 | ], 21 | "data": ["views/web_tab_title.xml"], 22 | "maintainers": ["rvalyi"], 23 | "installable": False, 24 | } 25 | -------------------------------------------------------------------------------- /web_tab_title/views/web_tab_title.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |