mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-18 01:52:01 +02:00
Initial commit: OCA Technical packages (595 packages)
This commit is contained in:
commit
2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions
641
README.md
Normal file
641
README.md
Normal file
|
|
@ -0,0 +1,641 @@
|
|||
# OCA Technical
|
||||
|
||||
This repository contains **595** OCA packages for technical.
|
||||
|
||||
## Packages Included (595 packages)
|
||||
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base** - From account: closing_account_cutoff_accrual_order_base
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base** - From account: closing_account_cutoff_accrual_order_stock_base
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_accrual_purchase** - From account: closing_account_cutoff_accrual_purchase
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_accrual_purchase_stock** - From account: closing_account_cutoff_accrual_purchase_stock
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_accrual_sale** - From account: closing_account_cutoff_accrual_sale
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_accrual_sale_stock** - From account: closing_account_cutoff_accrual_sale_stock
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_accrual_sale_stock_delivery** - From account: closing_account_cutoff_accrual_sale_stock_delivery
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_accrual_subscription** - From account: closing_account_cutoff_accrual_subscription
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_base** - From account: closing_account_cutoff_base
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_picking** - From account: closing_account_cutoff_picking
|
||||
- **odoo-bringout-oca-account-closing-account_cutoff_start_end_dates** - From account: closing_account_cutoff_start_end_dates
|
||||
- **odoo-bringout-oca-account-closing-account_fiscal_year_closing** - From account: closing_account_fiscal_year_closing
|
||||
- **odoo-bringout-oca-account-closing-account_invoice_start_end_dates** - From account: closing_account_invoice_start_end_dates
|
||||
- **odoo-bringout-oca-account-closing-account_invoice_start_end_dates_move** - From account: closing_account_invoice_start_end_dates_move
|
||||
- **odoo-bringout-oca-account-closing-account_multicurrency_revaluation** - From account: closing_account_multicurrency_revaluation
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_comment_template** - From account: invoice_reporting_account_comment_template
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_line_report** - From account: invoice_reporting_account_invoice_line_report
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_production_lot** - From account: invoice_reporting_account_invoice_production_lot
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_report_due_list** - From account: invoice_reporting_account_invoice_report_due_list
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_report_grouped_by_picking** - From account: invoice_reporting_account_invoice_report_grouped_by_picking
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_report_header_repeater** - From account: invoice_reporting_account_invoice_report_header_repeater
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_report_lot_expiration_date** - From account: invoice_reporting_account_invoice_report_lot_expiration_date
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_report_payment_info** - From account: invoice_reporting_account_invoice_report_payment_info
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_report_product_sticker** - From account: invoice_reporting_account_invoice_report_product_sticker
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_invoice_report_salesperson** - From account: invoice_reporting_account_invoice_report_salesperson
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_reporting_volume** - From account: invoice_reporting_account_reporting_volume
|
||||
- **odoo-bringout-oca-account-invoice-reporting-account_reporting_weight** - From account: invoice_reporting_account_reporting_weight
|
||||
- **odoo-bringout-oca-account-invoice-reporting-partner_time_to_pay** - From account: invoice_reporting_partner_time_to_pay
|
||||
- **odoo-bringout-oca-automation-automation_oca** - From automation: automation_oca
|
||||
- **odoo-bringout-oca-brand-account_brand** - From brand: account_brand
|
||||
- **odoo-bringout-oca-brand-account_invoice_bank_brand** - From brand: account_invoice_bank_brand
|
||||
- **odoo-bringout-oca-brand-account_payment_mode_brand** - From brand: account_payment_mode_brand
|
||||
- **odoo-bringout-oca-brand-analytic_brand** - From brand: analytic_brand
|
||||
- **odoo-bringout-oca-brand-brand** - From brand: brand
|
||||
- **odoo-bringout-oca-brand-contract_brand** - From brand: contract_brand
|
||||
- **odoo-bringout-oca-brand-contract_forecast_brand** - From brand: contract_forecast_brand
|
||||
- **odoo-bringout-oca-brand-partner_brand** - From brand: partner_brand
|
||||
- **odoo-bringout-oca-brand-product_brand** - From brand: product_brand
|
||||
- **odoo-bringout-oca-brand-product_brand_mrp** - From brand: product_brand_mrp
|
||||
- **odoo-bringout-oca-brand-product_brand_purchase** - From brand: product_brand_purchase
|
||||
- **odoo-bringout-oca-brand-product_brand_tag** - From brand: product_brand_tag
|
||||
- **odoo-bringout-oca-brand-product_contract_brand** - From brand: product_contract_brand
|
||||
- **odoo-bringout-oca-brand-sale_brand** - From brand: sale_brand
|
||||
- **odoo-bringout-oca-brand-sale_payment_mode_brand** - From brand: sale_payment_mode_brand
|
||||
- **odoo-bringout-oca-brand-stock_brand** - From brand: stock_brand
|
||||
- **odoo-bringout-oca-connector-component** - From connector: component
|
||||
- **odoo-bringout-oca-connector-component_event** - From connector: component_event
|
||||
- **odoo-bringout-oca-connector-connector** - From connector: connector
|
||||
- **odoo-bringout-oca-connector-connector_base_product** - From connector: connector_base_product
|
||||
- **odoo-bringout-oca-connector-interfaces-connector_importer** - From connector: interfaces_connector_importer
|
||||
- **odoo-bringout-oca-connector-interfaces-connector_importer_product** - From connector: interfaces_connector_importer_product
|
||||
- **odoo-bringout-oca-connector-test_component** - From connector: test_component
|
||||
- **odoo-bringout-oca-connector-test_connector** - From connector: test_connector
|
||||
- **odoo-bringout-oca-crm-crm_claim** - From crm: crm_claim
|
||||
- **odoo-bringout-oca-crm-crm_claim_code** - From crm: crm_claim_code
|
||||
- **odoo-bringout-oca-crm-crm_claim_type** - From crm: crm_claim_type
|
||||
- **odoo-bringout-oca-crm-crm_date_deadline_required** - From crm: crm_date_deadline_required
|
||||
- **odoo-bringout-oca-crm-crm_exception** - From crm: crm_exception
|
||||
- **odoo-bringout-oca-crm-crm_industry** - From crm: crm_industry
|
||||
- **odoo-bringout-oca-crm-crm_lead_code** - From crm: crm_lead_code
|
||||
- **odoo-bringout-oca-crm-crm_lead_currency** - From crm: crm_lead_currency
|
||||
- **odoo-bringout-oca-crm-crm_lead_firstname** - From crm: crm_lead_firstname
|
||||
- **odoo-bringout-oca-crm-crm_lead_product** - From crm: crm_lead_product
|
||||
- **odoo-bringout-oca-crm-crm_lead_search_archive** - From crm: crm_lead_search_archive
|
||||
- **odoo-bringout-oca-crm-crm_lead_to_task** - From crm: crm_lead_to_task
|
||||
- **odoo-bringout-oca-crm-crm_lead_vat** - From crm: crm_lead_vat
|
||||
- **odoo-bringout-oca-crm-crm_location** - From crm: crm_location
|
||||
- **odoo-bringout-oca-crm-crm_location_nuts** - From crm: crm_location_nuts
|
||||
- **odoo-bringout-oca-crm-crm_partner_assign** - From crm: crm_partner_assign
|
||||
- **odoo-bringout-oca-crm-crm_partner_required** - From crm: crm_partner_required
|
||||
- **odoo-bringout-oca-crm-crm_phonecall** - From crm: crm_phonecall
|
||||
- **odoo-bringout-oca-crm-crm_project_create** - From crm: crm_project_create
|
||||
- **odoo-bringout-oca-crm-crm_project_task** - From crm: crm_project_task
|
||||
- **odoo-bringout-oca-crm-crm_salesperson_planner** - From crm: crm_salesperson_planner
|
||||
- **odoo-bringout-oca-crm-crm_salesperson_planner_sale** - From crm: crm_salesperson_planner_sale
|
||||
- **odoo-bringout-oca-crm-crm_security_group** - From crm: crm_security_group
|
||||
- **odoo-bringout-oca-crm-crm_stage_probability** - From crm: crm_stage_probability
|
||||
- **odoo-bringout-oca-crm-crm_won_restrict_per_stage** - From crm: crm_won_restrict_per_stage
|
||||
- **odoo-bringout-oca-crm-marketing_crm_partner** - From crm: marketing_crm_partner
|
||||
- **odoo-bringout-oca-data-protection-privacy** - From data: protection_privacy
|
||||
- **odoo-bringout-oca-data-protection-privacy_consent** - From data: protection_privacy_consent
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp** - From ddmrp: ddmrp
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_adjustment** - From ddmrp: ddmrp_adjustment
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_chatter** - From ddmrp: ddmrp_chatter
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_cron_actions_as_job** - From ddmrp: ddmrp_cron_actions_as_job
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_exclude_moves_adu_calc** - From ddmrp: ddmrp_exclude_moves_adu_calc
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_exclude_moves_adu_calc_sales** - From ddmrp: ddmrp_exclude_moves_adu_calc_sales
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_history** - From ddmrp: ddmrp_history
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_product_replace** - From ddmrp: ddmrp_product_replace
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_report_part_flow_index** - From ddmrp: ddmrp_report_part_flow_index
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_sale** - From ddmrp: ddmrp_sale
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_sale_dropshipping** - From ddmrp: ddmrp_sale_dropshipping
|
||||
- **odoo-bringout-oca-ddmrp-ddmrp_warning** - From ddmrp: ddmrp_warning
|
||||
- **odoo-bringout-oca-ddmrp-stock_buffer_route** - From ddmrp: stock_buffer_route
|
||||
- **odoo-bringout-oca-ddmrp-stock_buffer_sales_analysis** - From ddmrp: stock_buffer_sales_analysis
|
||||
- **odoo-bringout-oca-dms-account_dms_field** - From dms: account_dms_field
|
||||
- **odoo-bringout-oca-dms-dms** - From dms: dms
|
||||
- **odoo-bringout-oca-dms-dms_attachment_link** - From dms: dms_attachment_link
|
||||
- **odoo-bringout-oca-dms-dms_auto_classification** - From dms: dms_auto_classification
|
||||
- **odoo-bringout-oca-dms-dms_field** - From dms: dms_field
|
||||
- **odoo-bringout-oca-dms-dms_field_auto_classification** - From dms: dms_field_auto_classification
|
||||
- **odoo-bringout-oca-dms-dms_storage** - From dms: dms_storage
|
||||
- **odoo-bringout-oca-dms-dms_user_role** - From dms: dms_user_role
|
||||
- **odoo-bringout-oca-dms-hr_dms_field** - From dms: hr_dms_field
|
||||
- **odoo-bringout-oca-dms-web_editor_media_dialog_dms** - From dms: web_editor_media_dialog_dms
|
||||
- **odoo-bringout-oca-geospatial-base_geoengine** - From geospatial: base_geoengine
|
||||
- **odoo-bringout-oca-geospatial-base_geoengine_demo** - From geospatial: base_geoengine_demo
|
||||
- **odoo-bringout-oca-geospatial-base_geolocalize_company** - From geospatial: base_geolocalize_company
|
||||
- **odoo-bringout-oca-geospatial-geoengine_base_geolocalize** - From geospatial: geoengine_base_geolocalize
|
||||
- **odoo-bringout-oca-geospatial-geoengine_partner** - From geospatial: geoengine_partner
|
||||
- **odoo-bringout-oca-geospatial-web_leaflet_lib** - From geospatial: web_leaflet_lib
|
||||
- **odoo-bringout-oca-geospatial-web_view_leaflet_map** - From geospatial: web_view_leaflet_map
|
||||
- **odoo-bringout-oca-geospatial-web_view_leaflet_map_partner** - From geospatial: web_view_leaflet_map_partner
|
||||
- **odoo-bringout-oca-geospatial-website_geoengine** - From geospatial: website_geoengine
|
||||
- **odoo-bringout-oca-geospatial-website_geoengine_store_locator** - From geospatial: website_geoengine_store_locator
|
||||
- **odoo-bringout-oca-hack-payroll** - From hack: payroll
|
||||
- **odoo-bringout-oca-hr-attendance-hr_attendance_autoclose** - From hr: attendance_hr_attendance_autoclose
|
||||
- **odoo-bringout-oca-hr-attendance-hr_attendance_calendar_view** - From hr: attendance_hr_attendance_calendar_view
|
||||
- **odoo-bringout-oca-hr-attendance-hr_attendance_geolocation** - From hr: attendance_hr_attendance_geolocation
|
||||
- **odoo-bringout-oca-hr-attendance-hr_attendance_modification_tracking** - From hr: attendance_hr_attendance_modification_tracking
|
||||
- **odoo-bringout-oca-hr-attendance-hr_attendance_reason** - From hr: attendance_hr_attendance_reason
|
||||
- **odoo-bringout-oca-hr-attendance-hr_attendance_report_theoretical_time** - From hr: attendance_hr_attendance_report_theoretical_time
|
||||
- **odoo-bringout-oca-hr-attendance-hr_attendance_rfid** - From hr: attendance_hr_attendance_rfid
|
||||
- **odoo-bringout-oca-hr-attendance-hr_birthday_welcome_message** - From hr: attendance_hr_birthday_welcome_message
|
||||
- **odoo-bringout-oca-hr-attendance-hr_contract_update_overtime** - From hr: attendance_hr_contract_update_overtime
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_advance_clearing** - From hr: expense_hr_expense_advance_clearing
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_advance_clearing_sequence** - From hr: expense_hr_expense_advance_clearing_sequence
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_cancel** - From hr: expense_hr_expense_cancel
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_invoice** - From hr: expense_hr_expense_invoice
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_journal** - From hr: expense_hr_expense_journal
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_pay_to_vendor** - From hr: expense_hr_expense_pay_to_vendor
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_payment** - From hr: expense_hr_expense_payment
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_sequence** - From hr: expense_hr_expense_sequence
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_sequence_option** - From hr: expense_hr_expense_sequence_option
|
||||
- **odoo-bringout-oca-hr-expense-hr_expense_tier_validation** - From hr: expense_hr_expense_tier_validation
|
||||
- **odoo-bringout-oca-hr-holidays-hr_holidays_auto_extend** - From hr: holidays_hr_holidays_auto_extend
|
||||
- **odoo-bringout-oca-hr-holidays-hr_holidays_leave_auto_approve** - From hr: holidays_hr_holidays_leave_auto_approve
|
||||
- **odoo-bringout-oca-hr-holidays-hr_holidays_natural_period** - From hr: holidays_hr_holidays_natural_period
|
||||
- **odoo-bringout-oca-hr-holidays-hr_holidays_natural_period_public** - From hr: holidays_hr_holidays_natural_period_public
|
||||
- **odoo-bringout-oca-hr-holidays-hr_holidays_public** - From hr: holidays_hr_holidays_public
|
||||
- **odoo-bringout-oca-hr-holidays-hr_holidays_public_city** - From hr: holidays_hr_holidays_public_city
|
||||
- **odoo-bringout-oca-hr-holidays-hr_holidays_settings** - From hr: holidays_hr_holidays_settings
|
||||
- **odoo-bringout-oca-hr-holidays-hr_holidays_summary_email** - From hr: holidays_hr_holidays_summary_email
|
||||
- **odoo-bringout-oca-hr-holidays-hr_leave_custom_hour_interval** - From hr: holidays_hr_leave_custom_hour_interval
|
||||
- **odoo-bringout-oca-hr-holidays-hr_leave_type_code** - From hr: holidays_hr_leave_type_code
|
||||
- **odoo-bringout-oca-hr-holidays-resource_leaves_geographic** - From hr: holidays_resource_leaves_geographic
|
||||
- **odoo-bringout-oca-hr-hr_contract_employee_calendar_planning** - From hr: hr_contract_employee_calendar_planning
|
||||
- **odoo-bringout-oca-hr-hr_contract_multi_job** - From hr: hr_contract_multi_job
|
||||
- **odoo-bringout-oca-hr-hr_contract_reference** - From hr: hr_contract_reference
|
||||
- **odoo-bringout-oca-hr-hr_course** - From hr: hr_course
|
||||
- **odoo-bringout-oca-hr-hr_course_survey** - From hr: hr_course_survey
|
||||
- **odoo-bringout-oca-hr-hr_department_code** - From hr: hr_department_code
|
||||
- **odoo-bringout-oca-hr-hr_employee_age** - From hr: hr_employee_age
|
||||
- **odoo-bringout-oca-hr-hr_employee_birth_name** - From hr: hr_employee_birth_name
|
||||
- **odoo-bringout-oca-hr-hr_employee_birthday_mail** - From hr: hr_employee_birthday_mail
|
||||
- **odoo-bringout-oca-hr-hr_employee_calendar_planning** - From hr: hr_employee_calendar_planning
|
||||
- **odoo-bringout-oca-hr-hr_employee_digitized_signature** - From hr: hr_employee_digitized_signature
|
||||
- **odoo-bringout-oca-hr-hr_employee_document** - From hr: hr_employee_document
|
||||
- **odoo-bringout-oca-hr-hr_employee_document_from_applicant** - From hr: hr_employee_document_from_applicant
|
||||
- **odoo-bringout-oca-hr-hr_employee_firstname** - From hr: hr_employee_firstname
|
||||
- **odoo-bringout-oca-hr-hr_employee_group_overview_readonly** - From hr: hr_employee_group_overview_readonly
|
||||
- **odoo-bringout-oca-hr-hr_employee_id** - From hr: hr_employee_id
|
||||
- **odoo-bringout-oca-hr-hr_employee_language** - From hr: hr_employee_language
|
||||
- **odoo-bringout-oca-hr-hr_employee_lastnames** - From hr: hr_employee_lastnames
|
||||
- **odoo-bringout-oca-hr-hr_employee_medical_examination** - From hr: hr_employee_medical_examination
|
||||
- **odoo-bringout-oca-hr-hr_employee_partner_external** - From hr: hr_employee_partner_external
|
||||
- **odoo-bringout-oca-hr-hr_employee_phone_extension** - From hr: hr_employee_phone_extension
|
||||
- **odoo-bringout-oca-hr-hr_employee_phone_pin** - From hr: hr_employee_phone_pin
|
||||
- **odoo-bringout-oca-hr-hr_employee_ppe** - From hr: hr_employee_ppe
|
||||
- **odoo-bringout-oca-hr-hr_employee_relative** - From hr: hr_employee_relative
|
||||
- **odoo-bringout-oca-hr-hr_employee_service** - From hr: hr_employee_service
|
||||
- **odoo-bringout-oca-hr-hr_employee_service_contract** - From hr: hr_employee_service_contract
|
||||
- **odoo-bringout-oca-hr-hr_employee_ssn** - From hr: hr_employee_ssn
|
||||
- **odoo-bringout-oca-hr-hr_holidays_team_manager** - From hr: hr_holidays_team_manager
|
||||
- **odoo-bringout-oca-hr-hr_job_category** - From hr: hr_job_category
|
||||
- **odoo-bringout-oca-hr-hr_org_chart_overview** - From hr: hr_org_chart_overview
|
||||
- **odoo-bringout-oca-hr-hr_personal_equipment_request** - From hr: hr_personal_equipment_request
|
||||
- **odoo-bringout-oca-hr-hr_personal_equipment_request_tier_validation** - From hr: hr_personal_equipment_request_tier_validation
|
||||
- **odoo-bringout-oca-hr-hr_personal_equipment_stock** - From hr: hr_personal_equipment_stock
|
||||
- **odoo-bringout-oca-hr-hr_personal_equipment_variant_configurator** - From hr: hr_personal_equipment_variant_configurator
|
||||
- **odoo-bringout-oca-hr-hr_professional_category** - From hr: hr_professional_category
|
||||
- **odoo-bringout-oca-hr-hr_recruitment_torecruit** - From hr: hr_recruitment_torecruit
|
||||
- **odoo-bringout-oca-hr-resource_multi_week_calendar** - From hr: resource_multi_week_calendar
|
||||
- **odoo-bringout-oca-iot-iot_amqp_oca** - From iot: iot_amqp_oca
|
||||
- **odoo-bringout-oca-iot-iot_input_oca** - From iot: iot_input_oca
|
||||
- **odoo-bringout-oca-iot-iot_key_employee_rfid** - From iot: iot_key_employee_rfid
|
||||
- **odoo-bringout-oca-iot-iot_oca** - From iot: iot_oca
|
||||
- **odoo-bringout-oca-iot-iot_output_oca** - From iot: iot_output_oca
|
||||
- **odoo-bringout-oca-iot-iot_rule** - From iot: iot_rule
|
||||
- **odoo-bringout-oca-iot-iot_template_oca** - From iot: iot_template_oca
|
||||
- **odoo-bringout-oca-maintenance-base_maintenance** - From maintenance: base_maintenance
|
||||
- **odoo-bringout-oca-maintenance-base_maintenance_config** - From maintenance: base_maintenance_config
|
||||
- **odoo-bringout-oca-maintenance-base_maintenance_group** - From maintenance: base_maintenance_group
|
||||
- **odoo-bringout-oca-maintenance-maintenance_account** - From maintenance: maintenance_account
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy** - From maintenance: maintenance_equipment_category_hierarchy
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_certification** - From maintenance: maintenance_equipment_certification
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_contract** - From maintenance: maintenance_equipment_contract
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy** - From maintenance: maintenance_equipment_hierarchy
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_image** - From maintenance: maintenance_equipment_image
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_sequence** - From maintenance: maintenance_equipment_sequence
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_status** - From maintenance: maintenance_equipment_status
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_tags** - From maintenance: maintenance_equipment_tags
|
||||
- **odoo-bringout-oca-maintenance-maintenance_equipment_usage** - From maintenance: maintenance_equipment_usage
|
||||
- **odoo-bringout-oca-maintenance-maintenance_location** - From maintenance: maintenance_location
|
||||
- **odoo-bringout-oca-maintenance-maintenance_plan** - From maintenance: maintenance_plan
|
||||
- **odoo-bringout-oca-maintenance-maintenance_plan_activity** - From maintenance: maintenance_plan_activity
|
||||
- **odoo-bringout-oca-maintenance-maintenance_product** - From maintenance: maintenance_product
|
||||
- **odoo-bringout-oca-maintenance-maintenance_project** - From maintenance: maintenance_project
|
||||
- **odoo-bringout-oca-maintenance-maintenance_purchase** - From maintenance: maintenance_purchase
|
||||
- **odoo-bringout-oca-maintenance-maintenance_remote** - From maintenance: maintenance_remote
|
||||
- **odoo-bringout-oca-maintenance-maintenance_request_purchase** - From maintenance: maintenance_request_purchase
|
||||
- **odoo-bringout-oca-maintenance-maintenance_request_repair** - From maintenance: maintenance_request_repair
|
||||
- **odoo-bringout-oca-maintenance-maintenance_request_sequence** - From maintenance: maintenance_request_sequence
|
||||
- **odoo-bringout-oca-maintenance-maintenance_request_stage_transition** - From maintenance: maintenance_request_stage_transition
|
||||
- **odoo-bringout-oca-maintenance-maintenance_security** - From maintenance: maintenance_security
|
||||
- **odoo-bringout-oca-maintenance-maintenance_team_hierarchy** - From maintenance: maintenance_team_hierarchy
|
||||
- **odoo-bringout-oca-maintenance-maintenance_timesheet** - From maintenance: maintenance_timesheet
|
||||
- **odoo-bringout-oca-maintenance-maintenance_timesheet_time_control** - From maintenance: maintenance_timesheet_time_control
|
||||
- **odoo-bringout-oca-management-system-document_page_environment_manual** - From management: system_document_page_environment_manual
|
||||
- **odoo-bringout-oca-management-system-document_page_environmental_aspect** - From management: system_document_page_environmental_aspect
|
||||
- **odoo-bringout-oca-management-system-document_page_health_safety_manual** - From management: system_document_page_health_safety_manual
|
||||
- **odoo-bringout-oca-management-system-document_page_procedure** - From management: system_document_page_procedure
|
||||
- **odoo-bringout-oca-management-system-document_page_quality_manual** - From management: system_document_page_quality_manual
|
||||
- **odoo-bringout-oca-management-system-document_page_work_instruction** - From management: system_document_page_work_instruction
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem** - From management: system_mgmtsystem
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_action** - From management: system_mgmtsystem_action
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_action_efficacy** - From management: system_mgmtsystem_action_efficacy
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_action_hazard** - From management: system_mgmtsystem_action_hazard
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_action_template** - From management: system_mgmtsystem_action_template
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_audit** - From management: system_mgmtsystem_audit
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_claim** - From management: system_mgmtsystem_claim
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_environment** - From management: system_mgmtsystem_environment
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_evaluation** - From management: system_mgmtsystem_evaluation
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_evaluation_hr** - From management: system_mgmtsystem_evaluation_hr
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_hazard** - From management: system_mgmtsystem_hazard
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_hazard_maintenance_equipment** - From management: system_mgmtsystem_hazard_maintenance_equipment
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_hazard_risk** - From management: system_mgmtsystem_hazard_risk
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_health_safety** - From management: system_mgmtsystem_health_safety
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_info_security_manual** - From management: system_mgmtsystem_info_security_manual
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_manual** - From management: system_mgmtsystem_manual
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity** - From management: system_mgmtsystem_nonconformity
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity_hazard** - From management: system_mgmtsystem_nonconformity_hazard
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity_hr** - From management: system_mgmtsystem_nonconformity_hr
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity_maintenance_equipment** - From management: system_mgmtsystem_nonconformity_maintenance_equipment
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity_mrp** - From management: system_mgmtsystem_nonconformity_mrp
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity_product** - From management: system_mgmtsystem_nonconformity_product
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity_quality_control_oca** - From management: system_mgmtsystem_nonconformity_quality_control_oca
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity_repair** - From management: system_mgmtsystem_nonconformity_repair
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_nonconformity_type** - From management: system_mgmtsystem_nonconformity_type
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_partner** - From management: system_mgmtsystem_partner
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_quality** - From management: system_mgmtsystem_quality
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_review** - From management: system_mgmtsystem_review
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_review_survey** - From management: system_mgmtsystem_review_survey
|
||||
- **odoo-bringout-oca-management-system-mgmtsystem_survey** - From management: system_mgmtsystem_survey
|
||||
- **odoo-bringout-oca-pos-pos_access_right** - From pos: pos_access_right
|
||||
- **odoo-bringout-oca-pos-pos_auto_invoice** - From pos: pos_auto_invoice
|
||||
- **odoo-bringout-oca-pos-pos_bypass_global_discount** - From pos: pos_bypass_global_discount
|
||||
- **odoo-bringout-oca-pos-pos_cash_control_override** - From pos: pos_cash_control_override
|
||||
- **odoo-bringout-oca-pos-pos_config_logo** - From pos: pos_config_logo
|
||||
- **odoo-bringout-oca-pos-pos_container_deposit** - From pos: pos_container_deposit
|
||||
- **odoo-bringout-oca-pos-pos_customer_comment** - From pos: pos_customer_comment
|
||||
- **odoo-bringout-oca-pos-pos_customer_tree_view_vat** - From pos: pos_customer_tree_view_vat
|
||||
- **odoo-bringout-oca-pos-pos_daily_sales_reports_category_only** - From pos: pos_daily_sales_reports_category_only
|
||||
- **odoo-bringout-oca-pos-pos_default_partner** - From pos: pos_default_partner
|
||||
- **odoo-bringout-oca-pos-pos_discount_all** - From pos: pos_discount_all
|
||||
- **odoo-bringout-oca-pos-pos_edit_order_line** - From pos: pos_edit_order_line
|
||||
- **odoo-bringout-oca-pos-pos_escpos_status** - From pos: pos_escpos_status
|
||||
- **odoo-bringout-oca-pos-pos_financial_risk** - From pos: pos_financial_risk
|
||||
- **odoo-bringout-oca-pos-pos_global_discount_in_line** - From pos: pos_global_discount_in_line
|
||||
- **odoo-bringout-oca-pos-pos_hide_banknote_button** - From pos: pos_hide_banknote_button
|
||||
- **odoo-bringout-oca-pos-pos_hr_access_right** - From pos: pos_hr_access_right
|
||||
- **odoo-bringout-oca-pos-pos_lot_barcode** - From pos: pos_lot_barcode
|
||||
- **odoo-bringout-oca-pos-pos_lot_selection** - From pos: pos_lot_selection
|
||||
- **odoo-bringout-oca-pos-pos_loyalty_exclude** - From pos: pos_loyalty_exclude
|
||||
- **odoo-bringout-oca-pos-pos_loyalty_redeem_payment** - From pos: pos_loyalty_redeem_payment
|
||||
- **odoo-bringout-oca-pos-pos_margin** - From pos: pos_margin
|
||||
- **odoo-bringout-oca-pos-pos_meal_voucher** - From pos: pos_meal_voucher
|
||||
- **odoo-bringout-oca-pos-pos_membership** - From pos: pos_membership
|
||||
- **odoo-bringout-oca-pos-pos_membership_extension** - From pos: pos_membership_extension
|
||||
- **odoo-bringout-oca-pos-pos_minimize_menu** - From pos: pos_minimize_menu
|
||||
- **odoo-bringout-oca-pos-pos_order_new_line** - From pos: pos_order_new_line
|
||||
- **odoo-bringout-oca-pos-pos_order_remove_line** - From pos: pos_order_remove_line
|
||||
- **odoo-bringout-oca-pos-pos_order_reorder** - From pos: pos_order_reorder
|
||||
- **odoo-bringout-oca-pos-pos_order_to_sale_order** - From pos: pos_order_to_sale_order
|
||||
- **odoo-bringout-oca-pos-pos_order_to_sale_order_delivery** - From pos: pos_order_to_sale_order_delivery
|
||||
- **odoo-bringout-oca-pos-pos_order_to_sale_order_report** - From pos: pos_order_to_sale_order_report
|
||||
- **odoo-bringout-oca-pos-pos_order_to_sale_order_sale_financial_risk** - From pos: pos_order_to_sale_order_sale_financial_risk
|
||||
- **odoo-bringout-oca-pos-pos_partner_birthdate** - From pos: pos_partner_birthdate
|
||||
- **odoo-bringout-oca-pos-pos_partner_firstname** - From pos: pos_partner_firstname
|
||||
- **odoo-bringout-oca-pos-pos_partner_location_abstract** - From pos: pos_partner_location_abstract
|
||||
- **odoo-bringout-oca-pos-pos_partner_location_google_map** - From pos: pos_partner_location_google_map
|
||||
- **odoo-bringout-oca-pos-pos_partner_sale_warning** - From pos: pos_partner_sale_warning
|
||||
- **odoo-bringout-oca-pos-pos_payment_change** - From pos: pos_payment_change
|
||||
- **odoo-bringout-oca-pos-pos_payment_description** - From pos: pos_payment_description
|
||||
- **odoo-bringout-oca-pos-pos_payment_method_cashdro** - From pos: pos_payment_method_cashdro
|
||||
- **odoo-bringout-oca-pos-pos_payment_method_change_policy** - From pos: pos_payment_method_change_policy
|
||||
- **odoo-bringout-oca-pos-pos_payment_method_image** - From pos: pos_payment_method_image
|
||||
- **odoo-bringout-oca-pos-pos_payment_restriction** - From pos: pos_payment_restriction
|
||||
- **odoo-bringout-oca-pos-pos_payment_terminal** - From pos: pos_payment_terminal
|
||||
- **odoo-bringout-oca-pos-pos_payment_usability** - From pos: pos_payment_usability
|
||||
- **odoo-bringout-oca-pos-pos_picking_delayed** - From pos: pos_picking_delayed
|
||||
- **odoo-bringout-oca-pos-pos_price_to_weight** - From pos: pos_price_to_weight
|
||||
- **odoo-bringout-oca-pos-pos_pricelist_technical** - From pos: pos_pricelist_technical
|
||||
- **odoo-bringout-oca-pos-pos_product_display_default_code** - From pos: pos_product_display_default_code
|
||||
- **odoo-bringout-oca-pos-pos_product_label** - From pos: pos_product_label
|
||||
- **odoo-bringout-oca-pos-pos_product_mergeable_line** - From pos: pos_product_mergeable_line
|
||||
- **odoo-bringout-oca-pos-pos_product_multi_barcode** - From pos: pos_product_multi_barcode
|
||||
- **odoo-bringout-oca-pos-pos_product_packaging_container_deposit** - From pos: pos_product_packaging_container_deposit
|
||||
- **odoo-bringout-oca-pos-pos_product_packaging_multi_barcode** - From pos: pos_product_packaging_multi_barcode
|
||||
- **odoo-bringout-oca-pos-pos_product_pricelist_alternative** - From pos: pos_product_pricelist_alternative
|
||||
- **odoo-bringout-oca-pos-pos_product_quick_info** - From pos: pos_product_quick_info
|
||||
- **odoo-bringout-oca-pos-pos_receipt_hide_info** - From pos: pos_receipt_hide_info
|
||||
- **odoo-bringout-oca-pos-pos_receipt_hide_price** - From pos: pos_receipt_hide_price
|
||||
- **odoo-bringout-oca-pos-pos_receipt_replace_user_by_trigram** - From pos: pos_receipt_replace_user_by_trigram
|
||||
- **odoo-bringout-oca-pos-pos_receipt_replace_user_by_trigram_hr** - From pos: pos_receipt_replace_user_by_trigram_hr
|
||||
- **odoo-bringout-oca-pos-pos_receipt_usability** - From pos: pos_receipt_usability
|
||||
- **odoo-bringout-oca-pos-pos_receipt_vat_detail** - From pos: pos_receipt_vat_detail
|
||||
- **odoo-bringout-oca-pos-pos_report_session_summary** - From pos: pos_report_session_summary
|
||||
- **odoo-bringout-oca-pos-pos_reset_search** - From pos: pos_reset_search
|
||||
- **odoo-bringout-oca-pos-pos_sale_order_print** - From pos: pos_sale_order_print
|
||||
- **odoo-bringout-oca-pos-pos_sale_product_config_no_variant** - From pos: pos_sale_product_config_no_variant
|
||||
- **odoo-bringout-oca-pos-pos_screen_element_custom_size** - From pos: pos_screen_element_custom_size
|
||||
- **odoo-bringout-oca-pos-pos_session_pay_invoice** - From pos: pos_session_pay_invoice
|
||||
- **odoo-bringout-oca-pos-pos_stock_available_online** - From pos: pos_stock_available_online
|
||||
- **odoo-bringout-oca-pos-pos_supplierinfo_search** - From pos: pos_supplierinfo_search
|
||||
- **odoo-bringout-oca-pos-pos_ticket_extra_company_info_l10n_fr** - From pos: pos_ticket_extra_company_info_l10n_fr
|
||||
- **odoo-bringout-oca-pos-pos_timeout** - From pos: pos_timeout
|
||||
- **odoo-bringout-oca-pos-pos_to_weight_by_product_uom** - From pos: pos_to_weight_by_product_uom
|
||||
- **odoo-bringout-oca-product-configurator-product_configurator** - From product: configurator_product_configurator
|
||||
- **odoo-bringout-oca-product-configurator-product_configurator_mrp** - From product: configurator_product_configurator_mrp
|
||||
- **odoo-bringout-oca-product-configurator-product_configurator_sale** - From product: configurator_product_configurator_sale
|
||||
- **odoo-bringout-oca-product-pack-product_pack** - From product: pack_product_pack
|
||||
- **odoo-bringout-oca-product-pack-purchase_product_pack** - From product: pack_purchase_product_pack
|
||||
- **odoo-bringout-oca-product-pack-sale_product_pack** - From product: pack_sale_product_pack
|
||||
- **odoo-bringout-oca-product-pack-sale_stock_product_pack** - From product: pack_sale_stock_product_pack
|
||||
- **odoo-bringout-oca-product-pack-stock_product_pack** - From product: pack_stock_product_pack
|
||||
- **odoo-bringout-oca-product-pack-website_sale_product_pack** - From product: pack_website_sale_product_pack
|
||||
- **odoo-bringout-oca-purchase-reporting-purchase_backorder** - From purchase: reporting_purchase_backorder
|
||||
- **odoo-bringout-oca-purchase-reporting-purchase_comment_template** - From purchase: reporting_purchase_comment_template
|
||||
- **odoo-bringout-oca-purchase-reporting-purchase_packaging_report** - From purchase: reporting_purchase_packaging_report
|
||||
- **odoo-bringout-oca-purchase-reporting-purchase_report_date_format** - From purchase: reporting_purchase_report_date_format
|
||||
- **odoo-bringout-oca-purchase-reporting-purchase_report_payment_term** - From purchase: reporting_purchase_report_payment_term
|
||||
- **odoo-bringout-oca-purchase-reporting-purchase_report_shipping_address** - From purchase: reporting_purchase_report_shipping_address
|
||||
- **odoo-bringout-oca-queue-base_export_async** - From queue: base_export_async
|
||||
- **odoo-bringout-oca-queue-base_import_async** - From queue: base_import_async
|
||||
- **odoo-bringout-oca-queue-queue_job** - From queue: queue_job
|
||||
- **odoo-bringout-oca-queue-queue_job_batch** - From queue: queue_job_batch
|
||||
- **odoo-bringout-oca-queue-queue_job_cron** - From queue: queue_job_cron
|
||||
- **odoo-bringout-oca-queue-queue_job_cron_jobrunner** - From queue: queue_job_cron_jobrunner
|
||||
- **odoo-bringout-oca-queue-queue_job_subscribe** - From queue: queue_job_subscribe
|
||||
- **odoo-bringout-oca-queue-queue_job_web_notify** - From queue: queue_job_web_notify
|
||||
- **odoo-bringout-oca-queue-test_base_import_async** - From queue: test_base_import_async
|
||||
- **odoo-bringout-oca-queue-test_queue_job** - From queue: test_queue_job
|
||||
- **odoo-bringout-oca-queue-test_queue_job_batch** - From queue: test_queue_job_batch
|
||||
- **odoo-bringout-oca-rest-framework-auth_partner** - From rest: framework_auth_partner
|
||||
- **odoo-bringout-oca-rest-framework-base_rest** - From rest: framework_base_rest
|
||||
- **odoo-bringout-oca-rest-framework-base_rest_auth_api_key** - From rest: framework_base_rest_auth_api_key
|
||||
- **odoo-bringout-oca-rest-framework-base_rest_auth_jwt** - From rest: framework_base_rest_auth_jwt
|
||||
- **odoo-bringout-oca-rest-framework-base_rest_auth_user_service** - From rest: framework_base_rest_auth_user_service
|
||||
- **odoo-bringout-oca-rest-framework-base_rest_datamodel** - From rest: framework_base_rest_datamodel
|
||||
- **odoo-bringout-oca-rest-framework-base_rest_demo** - From rest: framework_base_rest_demo
|
||||
- **odoo-bringout-oca-rest-framework-base_rest_pydantic** - From rest: framework_base_rest_pydantic
|
||||
- **odoo-bringout-oca-rest-framework-datamodel** - From rest: framework_datamodel
|
||||
- **odoo-bringout-oca-rest-framework-extendable** - From rest: framework_extendable
|
||||
- **odoo-bringout-oca-rest-framework-extendable_fastapi** - From rest: framework_extendable_fastapi
|
||||
- **odoo-bringout-oca-rest-framework-fastapi** - From rest: framework_fastapi
|
||||
- **odoo-bringout-oca-rest-framework-fastapi_auth_jwt** - From rest: framework_fastapi_auth_jwt
|
||||
- **odoo-bringout-oca-rest-framework-fastapi_auth_jwt_demo** - From rest: framework_fastapi_auth_jwt_demo
|
||||
- **odoo-bringout-oca-rest-framework-fastapi_auth_partner** - From rest: framework_fastapi_auth_partner
|
||||
- **odoo-bringout-oca-rest-framework-fastapi_encrypted_errors** - From rest: framework_fastapi_encrypted_errors
|
||||
- **odoo-bringout-oca-rest-framework-graphql_base** - From rest: framework_graphql_base
|
||||
- **odoo-bringout-oca-rest-framework-graphql_demo** - From rest: framework_graphql_demo
|
||||
- **odoo-bringout-oca-rest-framework-model_serializer** - From rest: framework_model_serializer
|
||||
- **odoo-bringout-oca-rest-framework-pydantic** - From rest: framework_pydantic
|
||||
- **odoo-bringout-oca-rest-framework-rest_log** - From rest: framework_rest_log
|
||||
- **odoo-bringout-oca-rma-product_warranty** - From rma: product_warranty
|
||||
- **odoo-bringout-oca-rma-rma** - From rma: rma
|
||||
- **odoo-bringout-oca-rma-rma_delivery** - From rma: rma_delivery
|
||||
- **odoo-bringout-oca-rma-rma_lot** - From rma: rma_lot
|
||||
- **odoo-bringout-oca-rma-rma_procurement_customer** - From rma: rma_procurement_customer
|
||||
- **odoo-bringout-oca-rma-rma_reason** - From rma: rma_reason
|
||||
- **odoo-bringout-oca-rma-rma_sale** - From rma: rma_sale
|
||||
- **odoo-bringout-oca-rma-rma_sale_lot** - From rma: rma_sale_lot
|
||||
- **odoo-bringout-oca-rma-rma_sale_mrp** - From rma: rma_sale_mrp
|
||||
- **odoo-bringout-oca-rma-rma_sale_reason** - From rma: rma_sale_reason
|
||||
- **odoo-bringout-oca-sale-reporting-product_sold_by_delivery_week** - From sale: reporting_product_sold_by_delivery_week
|
||||
- **odoo-bringout-oca-sale-reporting-sale_comment_template** - From sale: reporting_sale_comment_template
|
||||
- **odoo-bringout-oca-sale-reporting-sale_layout_category_hide_detail** - From sale: reporting_sale_layout_category_hide_detail
|
||||
- **odoo-bringout-oca-sale-reporting-sale_order_line_position** - From sale: reporting_sale_order_line_position
|
||||
- **odoo-bringout-oca-sale-reporting-sale_order_product_recommendation_product_sold_by_delivery_week** - From sale: reporting_sale_order_product_recommendation_product_sold_by_delivery_week
|
||||
- **odoo-bringout-oca-sale-reporting-sale_order_report_product_image** - From sale: reporting_sale_order_report_product_image
|
||||
- **odoo-bringout-oca-sale-reporting-sale_order_weight** - From sale: reporting_sale_order_weight
|
||||
- **odoo-bringout-oca-sale-reporting-sale_packaging_report** - From sale: reporting_sale_packaging_report
|
||||
- **odoo-bringout-oca-sale-reporting-sale_report_commitment_date** - From sale: reporting_sale_report_commitment_date
|
||||
- **odoo-bringout-oca-sale-reporting-sale_report_country_state** - From sale: reporting_sale_report_country_state
|
||||
- **odoo-bringout-oca-sale-reporting-sale_report_delivered** - From sale: reporting_sale_report_delivered
|
||||
- **odoo-bringout-oca-sale-reporting-sale_report_delivered_attribute_values** - From sale: reporting_sale_report_delivered_attribute_values
|
||||
- **odoo-bringout-oca-sale-reporting-sale_report_delivered_deposit** - From sale: reporting_sale_report_delivered_deposit
|
||||
- **odoo-bringout-oca-sale-reporting-sale_report_delivered_subtotal** - From sale: reporting_sale_report_delivered_subtotal
|
||||
- **odoo-bringout-oca-sale-reporting-sale_report_delivered_volume** - From sale: reporting_sale_report_delivered_volume
|
||||
- **odoo-bringout-oca-sale-reporting-sale_report_salesperson_from_partner** - From sale: reporting_sale_report_salesperson_from_partner
|
||||
- **odoo-bringout-oca-server-tools-attachment_delete_restrict** - From server: tools_attachment_delete_restrict
|
||||
- **odoo-bringout-oca-server-tools-attachment_logging** - From server: tools_attachment_logging
|
||||
- **odoo-bringout-oca-server-tools-attachment_queue** - From server: tools_attachment_queue
|
||||
- **odoo-bringout-oca-server-tools-attachment_synchronize** - From server: tools_attachment_synchronize
|
||||
- **odoo-bringout-oca-server-tools-attachment_unindex_content** - From server: tools_attachment_unindex_content
|
||||
- **odoo-bringout-oca-server-tools-auditlog** - From server: tools_auditlog
|
||||
- **odoo-bringout-oca-server-tools-auto_backup** - From server: tools_auto_backup
|
||||
- **odoo-bringout-oca-server-tools-autovacuum_message_attachment** - From server: tools_autovacuum_message_attachment
|
||||
- **odoo-bringout-oca-server-tools-base_changeset** - From server: tools_base_changeset
|
||||
- **odoo-bringout-oca-server-tools-base_conditional_image** - From server: tools_base_conditional_image
|
||||
- **odoo-bringout-oca-server-tools-base_cron_exclusion** - From server: tools_base_cron_exclusion
|
||||
- **odoo-bringout-oca-server-tools-base_domain_inverse_function** - From server: tools_base_domain_inverse_function
|
||||
- **odoo-bringout-oca-server-tools-base_exception** - From server: tools_base_exception
|
||||
- **odoo-bringout-oca-server-tools-base_fontawesome** - From server: tools_base_fontawesome
|
||||
- **odoo-bringout-oca-server-tools-base_force_record_noupdate** - From server: tools_base_force_record_noupdate
|
||||
- **odoo-bringout-oca-server-tools-base_import_default_enable_tracking** - From server: tools_base_import_default_enable_tracking
|
||||
- **odoo-bringout-oca-server-tools-base_import_odoo** - From server: tools_base_import_odoo
|
||||
- **odoo-bringout-oca-server-tools-base_m2m_custom_field** - From server: tools_base_m2m_custom_field
|
||||
- **odoo-bringout-oca-server-tools-base_multi_image** - From server: tools_base_multi_image
|
||||
- **odoo-bringout-oca-server-tools-base_name_search_improved** - From server: tools_base_name_search_improved
|
||||
- **odoo-bringout-oca-server-tools-base_partition** - From server: tools_base_partition
|
||||
- **odoo-bringout-oca-server-tools-base_remote** - From server: tools_base_remote
|
||||
- **odoo-bringout-oca-server-tools-base_search_fuzzy** - From server: tools_base_search_fuzzy
|
||||
- **odoo-bringout-oca-server-tools-base_sequence_default** - From server: tools_base_sequence_default
|
||||
- **odoo-bringout-oca-server-tools-base_sequence_option** - From server: tools_base_sequence_option
|
||||
- **odoo-bringout-oca-server-tools-base_sparse_field_list_support** - From server: tools_base_sparse_field_list_support
|
||||
- **odoo-bringout-oca-server-tools-base_technical_user** - From server: tools_base_technical_user
|
||||
- **odoo-bringout-oca-server-tools-base_time_window** - From server: tools_base_time_window
|
||||
- **odoo-bringout-oca-server-tools-base_view_inheritance_extension** - From server: tools_base_view_inheritance_extension
|
||||
- **odoo-bringout-oca-server-tools-bus_alt_connection** - From server: tools_bus_alt_connection
|
||||
- **odoo-bringout-oca-server-tools-cron_daylight_saving_time_resistant** - From server: tools_cron_daylight_saving_time_resistant
|
||||
- **odoo-bringout-oca-server-tools-database_cleanup** - From server: tools_database_cleanup
|
||||
- **odoo-bringout-oca-server-tools-datetime_formatter** - From server: tools_datetime_formatter
|
||||
- **odoo-bringout-oca-server-tools-dbfilter_from_header** - From server: tools_dbfilter_from_header
|
||||
- **odoo-bringout-oca-server-tools-excel_import_export** - From server: tools_excel_import_export
|
||||
- **odoo-bringout-oca-server-tools-excel_import_export_demo** - From server: tools_excel_import_export_demo
|
||||
- **odoo-bringout-oca-server-tools-excel_import_export_unidecode** - From server: tools_excel_import_export_unidecode
|
||||
- **odoo-bringout-oca-server-tools-fetchmail_attach_from_folder** - From server: tools_fetchmail_attach_from_folder
|
||||
- **odoo-bringout-oca-server-tools-fetchmail_notify_error_to_sender** - From server: tools_fetchmail_notify_error_to_sender
|
||||
- **odoo-bringout-oca-server-tools-fetchmail_notify_error_to_sender_test** - From server: tools_fetchmail_notify_error_to_sender_test
|
||||
- **odoo-bringout-oca-server-tools-html_image_url_extractor** - From server: tools_html_image_url_extractor
|
||||
- **odoo-bringout-oca-server-tools-html_text** - From server: tools_html_text
|
||||
- **odoo-bringout-oca-server-tools-iap_alternative_provider** - From server: tools_iap_alternative_provider
|
||||
- **odoo-bringout-oca-server-tools-jsonifier** - From server: tools_jsonifier
|
||||
- **odoo-bringout-oca-server-tools-letsencrypt** - From server: tools_letsencrypt
|
||||
- **odoo-bringout-oca-server-tools-module_analysis** - From server: tools_module_analysis
|
||||
- **odoo-bringout-oca-server-tools-module_auto_update** - From server: tools_module_auto_update
|
||||
- **odoo-bringout-oca-server-tools-module_change_auto_install** - From server: tools_module_change_auto_install
|
||||
- **odoo-bringout-oca-server-tools-nsca_client** - From server: tools_nsca_client
|
||||
- **odoo-bringout-oca-server-tools-odoo_test_xmlrunner** - From server: tools_odoo_test_xmlrunner
|
||||
- **odoo-bringout-oca-server-tools-onchange_helper** - From server: tools_onchange_helper
|
||||
- **odoo-bringout-oca-server-tools-postgres_vacuum** - From server: tools_postgres_vacuum
|
||||
- **odoo-bringout-oca-server-tools-rpc_helper** - From server: tools_rpc_helper
|
||||
- **odoo-bringout-oca-server-tools-scheduler_error_mailer** - From server: tools_scheduler_error_mailer
|
||||
- **odoo-bringout-oca-server-tools-sentry** - From server: tools_sentry
|
||||
- **odoo-bringout-oca-server-tools-sequence_python** - From server: tools_sequence_python
|
||||
- **odoo-bringout-oca-server-tools-server_action_logging** - From server: tools_server_action_logging
|
||||
- **odoo-bringout-oca-server-tools-session_db** - From server: tools_session_db
|
||||
- **odoo-bringout-oca-server-tools-tracking_manager** - From server: tools_tracking_manager
|
||||
- **odoo-bringout-oca-server-tools-upgrade_analysis** - From server: tools_upgrade_analysis
|
||||
- **odoo-bringout-oca-server-tools-url_attachment_search_fuzzy** - From server: tools_url_attachment_search_fuzzy
|
||||
- **odoo-bringout-oca-server-ux-announcement** - From server: ux_announcement
|
||||
- **odoo-bringout-oca-server-ux-announcement_dialog_size** - From server: ux_announcement_dialog_size
|
||||
- **odoo-bringout-oca-server-ux-barcode_action** - From server: ux_barcode_action
|
||||
- **odoo-bringout-oca-server-ux-base_archive_security** - From server: ux_base_archive_security
|
||||
- **odoo-bringout-oca-server-ux-base_binary_url_import** - From server: ux_base_binary_url_import
|
||||
- **odoo-bringout-oca-server-ux-base_cancel_confirm** - From server: ux_base_cancel_confirm
|
||||
- **odoo-bringout-oca-server-ux-base_custom_filter** - From server: ux_base_custom_filter
|
||||
- **odoo-bringout-oca-server-ux-base_export_manager** - From server: ux_base_export_manager
|
||||
- **odoo-bringout-oca-server-ux-base_import_security_group** - From server: ux_base_import_security_group
|
||||
- **odoo-bringout-oca-server-ux-base_menu_visibility_restriction** - From server: ux_base_menu_visibility_restriction
|
||||
- **odoo-bringout-oca-server-ux-base_optional_quick_create** - From server: ux_base_optional_quick_create
|
||||
- **odoo-bringout-oca-server-ux-base_revision** - From server: ux_base_revision
|
||||
- **odoo-bringout-oca-server-ux-base_rule_visibility_restriction** - From server: ux_base_rule_visibility_restriction
|
||||
- **odoo-bringout-oca-server-ux-base_search_custom_field_filter** - From server: ux_base_search_custom_field_filter
|
||||
- **odoo-bringout-oca-server-ux-base_substate** - From server: ux_base_substate
|
||||
- **odoo-bringout-oca-server-ux-base_technical_features** - From server: ux_base_technical_features
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation** - From server: ux_base_tier_validation
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation_board** - From server: ux_base_tier_validation_board
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation_correction** - From server: ux_base_tier_validation_correction
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation_definition_server_action** - From server: ux_base_tier_validation_definition_server_action
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation_formula** - From server: ux_base_tier_validation_formula
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation_forward** - From server: ux_base_tier_validation_forward
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation_report** - From server: ux_base_tier_validation_report
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation_server_action** - From server: ux_base_tier_validation_server_action
|
||||
- **odoo-bringout-oca-server-ux-base_tier_validation_waiting** - From server: ux_base_tier_validation_waiting
|
||||
- **odoo-bringout-oca-server-ux-base_user_chatter** - From server: ux_base_user_chatter
|
||||
- **odoo-bringout-oca-server-ux-base_user_locale** - From server: ux_base_user_locale
|
||||
- **odoo-bringout-oca-server-ux-confirmation_wizard** - From server: ux_confirmation_wizard
|
||||
- **odoo-bringout-oca-server-ux-date_range** - From server: ux_date_range
|
||||
- **odoo-bringout-oca-server-ux-date_range_account** - From server: ux_date_range_account
|
||||
- **odoo-bringout-oca-server-ux-developer_menu** - From server: ux_developer_menu
|
||||
- **odoo-bringout-oca-server-ux-document_quick_access** - From server: ux_document_quick_access
|
||||
- **odoo-bringout-oca-server-ux-document_quick_access_folder_auto_classification** - From server: ux_document_quick_access_folder_auto_classification
|
||||
- **odoo-bringout-oca-server-ux-filter_multi_user** - From server: ux_filter_multi_user
|
||||
- **odoo-bringout-oca-server-ux-mail_message_destiny_link_template** - From server: ux_mail_message_destiny_link_template
|
||||
- **odoo-bringout-oca-server-ux-mail_suggested_recipient_unchecked** - From server: ux_mail_suggested_recipient_unchecked
|
||||
- **odoo-bringout-oca-server-ux-misc_settings** - From server: ux_misc_settings
|
||||
- **odoo-bringout-oca-server-ux-multi_step_wizard** - From server: ux_multi_step_wizard
|
||||
- **odoo-bringout-oca-server-ux-sequence_check_digit** - From server: ux_sequence_check_digit
|
||||
- **odoo-bringout-oca-server-ux-sequence_reset_period** - From server: ux_sequence_reset_period
|
||||
- **odoo-bringout-oca-server-ux-server_action_mass_edit** - From server: ux_server_action_mass_edit
|
||||
- **odoo-bringout-oca-server-ux-template_content_swapper** - From server: ux_template_content_swapper
|
||||
- **odoo-bringout-oca-server-ux-test_base_binary_url_import** - From server: ux_test_base_binary_url_import
|
||||
- **odoo-bringout-oca-server-ux-user_all_groups** - From server: ux_user_all_groups
|
||||
- **odoo-bringout-oca-stock-logistics-availability-sale_stock_available_info_popup** - From stock: logistics_availability_sale_stock_available_info_popup
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_available** - From stock: logistics_availability_stock_available
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_available_base_exclude_location** - From stock: logistics_availability_stock_available_base_exclude_location
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_available_exclude_location** - From stock: logistics_availability_stock_available_exclude_location
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_available_immediately** - From stock: logistics_availability_stock_available_immediately
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_available_immediately_exclude_location** - From stock: logistics_availability_stock_available_immediately_exclude_location
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_available_location_get_domain** - From stock: logistics_availability_stock_available_location_get_domain
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_available_mrp** - From stock: logistics_availability_stock_available_mrp
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_available_unreserved** - From stock: logistics_availability_stock_available_unreserved
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_free_quantity** - From stock: logistics_availability_stock_free_quantity
|
||||
- **odoo-bringout-oca-stock-logistics-availability-stock_quant_available_quantity** - From stock: logistics_availability_stock_quant_available_quantity
|
||||
- **odoo-bringout-oca-stock-logistics-request-stock_request** - From stock: logistics_request_stock_request
|
||||
- **odoo-bringout-oca-stock-logistics-request-stock_request_direction** - From stock: logistics_request_stock_request_direction
|
||||
- **odoo-bringout-oca-stock-logistics-request-stock_request_kanban** - From stock: logistics_request_stock_request_kanban
|
||||
- **odoo-bringout-oca-stock-logistics-request-stock_request_mrp** - From stock: logistics_request_stock_request_mrp
|
||||
- **odoo-bringout-oca-stock-logistics-request-stock_request_picking_type** - From stock: logistics_request_stock_request_picking_type
|
||||
- **odoo-bringout-oca-stock-logistics-request-stock_request_purchase** - From stock: logistics_request_stock_request_purchase
|
||||
- **odoo-bringout-oca-stock-logistics-request-stock_request_submit** - From stock: logistics_request_stock_request_submit
|
||||
- **odoo-bringout-oca-stock-logistics-request-stock_request_tier_validation** - From stock: logistics_request_stock_request_tier_validation
|
||||
- **odoo-bringout-oca-stock-logistics-tracking-internal_stock_quant_package** - From stock: logistics_tracking_internal_stock_quant_package
|
||||
- **odoo-bringout-oca-stock-logistics-tracking-stock_quant_package_multi_reference** - From stock: logistics_tracking_stock_quant_package_multi_reference
|
||||
- **odoo-bringout-oca-web-web_action_conditionable** - From web: web_action_conditionable
|
||||
- **odoo-bringout-oca-web-web_advanced_search** - From web: web_advanced_search
|
||||
- **odoo-bringout-oca-web-web_apply_field_style** - From web: web_apply_field_style
|
||||
- **odoo-bringout-oca-web-web_calendar_slot_duration** - From web: web_calendar_slot_duration
|
||||
- **odoo-bringout-oca-web-web_chatter_position** - From web: web_chatter_position
|
||||
- **odoo-bringout-oca-web-web_company_color** - From web: web_company_color
|
||||
- **odoo-bringout-oca-web-web_copy_confirm** - From web: web_copy_confirm
|
||||
- **odoo-bringout-oca-web-web_dark_mode** - From web: web_dark_mode
|
||||
- **odoo-bringout-oca-web-web_dashboard_tile** - From web: web_dashboard_tile
|
||||
- **odoo-bringout-oca-web-web_datetime_picker_default_time** - From web: web_datetime_picker_default_time
|
||||
- **odoo-bringout-oca-web-web_dialog_size** - From web: web_dialog_size
|
||||
- **odoo-bringout-oca-web-web_disable_export_group** - From web: web_disable_export_group
|
||||
- **odoo-bringout-oca-web-web_domain_field** - From web: web_domain_field
|
||||
- **odoo-bringout-oca-web-web_editor_class_selector** - From web: web_editor_class_selector
|
||||
- **odoo-bringout-oca-web-web_environment_ribbon** - From web: web_environment_ribbon
|
||||
- **odoo-bringout-oca-web-web_field_numeric_formatting** - From web: web_field_numeric_formatting
|
||||
- **odoo-bringout-oca-web-web_field_tooltip** - From web: web_field_tooltip
|
||||
- **odoo-bringout-oca-web-web_group_expand** - From web: web_group_expand
|
||||
- **odoo-bringout-oca-web-web_help** - From web: web_help
|
||||
- **odoo-bringout-oca-web-web_hide_field_with_key** - From web: web_hide_field_with_key
|
||||
- **odoo-bringout-oca-web-web_ir_actions_act_multi** - From web: web_ir_actions_act_multi
|
||||
- **odoo-bringout-oca-web-web_ir_actions_act_window_message** - From web: web_ir_actions_act_window_message
|
||||
- **odoo-bringout-oca-web-web_ir_actions_act_window_page** - From web: web_ir_actions_act_window_page
|
||||
- **odoo-bringout-oca-web-web_ir_actions_close_wizard_refresh_view** - From web: web_ir_actions_close_wizard_refresh_view
|
||||
- **odoo-bringout-oca-web-web_listview_range_select** - From web: web_listview_range_select
|
||||
- **odoo-bringout-oca-web-web_m2x_options** - From web: web_m2x_options
|
||||
- **odoo-bringout-oca-web-web_m2x_options_manager** - From web: web_m2x_options_manager
|
||||
- **odoo-bringout-oca-web-web_no_bubble** - From web: web_no_bubble
|
||||
- **odoo-bringout-oca-web-web_notify** - From web: web_notify
|
||||
- **odoo-bringout-oca-web-web_notify_channel_message** - From web: web_notify_channel_message
|
||||
- **odoo-bringout-oca-web-web_notify_upgrade** - From web: web_notify_upgrade
|
||||
- **odoo-bringout-oca-web-web_pivot_computed_measure** - From web: web_pivot_computed_measure
|
||||
- **odoo-bringout-oca-web-web_pwa_oca** - From web: web_pwa_oca
|
||||
- **odoo-bringout-oca-web-web_quick_start_screen** - From web: web_quick_start_screen
|
||||
- **odoo-bringout-oca-web-web_refresher** - From web: web_refresher
|
||||
- **odoo-bringout-oca-web-web_remember_tree_column_width** - From web: web_remember_tree_column_width
|
||||
- **odoo-bringout-oca-web-web_responsive** - From web: web_responsive
|
||||
- **odoo-bringout-oca-web-web_save_discard_button** - From web: web_save_discard_button
|
||||
- **odoo-bringout-oca-web-web_search_with_and** - From web: web_search_with_and
|
||||
- **odoo-bringout-oca-web-web_select_all_companies** - From web: web_select_all_companies
|
||||
- **odoo-bringout-oca-web-web_send_message_popup** - From web: web_send_message_popup
|
||||
- **odoo-bringout-oca-web-web_sheet_full_width** - From web: web_sheet_full_width
|
||||
- **odoo-bringout-oca-web-web_systray_button_init_action** - From web: web_systray_button_init_action
|
||||
- **odoo-bringout-oca-web-web_theme_classic** - From web: web_theme_classic
|
||||
- **odoo-bringout-oca-web-web_time_range_menu_custom** - From web: web_time_range_menu_custom
|
||||
- **odoo-bringout-oca-web-web_timeline** - From web: web_timeline
|
||||
- **odoo-bringout-oca-web-web_touchscreen** - From web: web_touchscreen
|
||||
- **odoo-bringout-oca-web-web_tree_duplicate** - From web: web_tree_duplicate
|
||||
- **odoo-bringout-oca-web-web_tree_dynamic_colored_field** - From web: web_tree_dynamic_colored_field
|
||||
- **odoo-bringout-oca-web-web_tree_many2one_clickable** - From web: web_tree_many2one_clickable
|
||||
- **odoo-bringout-oca-web-web_widget_bokeh_chart** - From web: web_widget_bokeh_chart
|
||||
- **odoo-bringout-oca-web-web_widget_char_size** - From web: web_widget_char_size
|
||||
- **odoo-bringout-oca-web-web_widget_datepicker_fulloptions** - From web: web_widget_datepicker_fulloptions
|
||||
- **odoo-bringout-oca-web-web_widget_domain_editor_dialog** - From web: web_widget_domain_editor_dialog
|
||||
- **odoo-bringout-oca-web-web_widget_dropdown_dynamic** - From web: web_widget_dropdown_dynamic
|
||||
- **odoo-bringout-oca-web-web_widget_image_download** - From web: web_widget_image_download
|
||||
- **odoo-bringout-oca-web-web_widget_image_webcam** - From web: web_widget_image_webcam
|
||||
- **odoo-bringout-oca-web-web_widget_mpld3_chart** - From web: web_widget_mpld3_chart
|
||||
- **odoo-bringout-oca-web-web_widget_numeric_step** - From web: web_widget_numeric_step
|
||||
- **odoo-bringout-oca-web-web_widget_one2many_tree_line_duplicate** - From web: web_widget_one2many_tree_line_duplicate
|
||||
- **odoo-bringout-oca-web-web_widget_open_tab** - From web: web_widget_open_tab
|
||||
- **odoo-bringout-oca-web-web_widget_pattern** - From web: web_widget_pattern
|
||||
- **odoo-bringout-oca-web-web_widget_pattern_partner_autocomplete** - From web: web_widget_pattern_partner_autocomplete
|
||||
- **odoo-bringout-oca-web-web_widget_plotly_chart** - From web: web_widget_plotly_chart
|
||||
- **odoo-bringout-oca-web-web_widget_product_label_section_and_note** - From web: web_widget_product_label_section_and_note
|
||||
- **odoo-bringout-oca-web-web_widget_progressbar_gradient** - From web: web_widget_progressbar_gradient
|
||||
- **odoo-bringout-oca-web-web_widget_remaining_days_exact_date** - From web: web_widget_remaining_days_exact_date
|
||||
- **odoo-bringout-oca-web-web_widget_x2many_2d_matrix** - From web: web_widget_x2many_2d_matrix
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
Install any package from this category:
|
||||
|
||||
```bash
|
||||
# Install from local directory
|
||||
pip install packages/oca-technical/PACKAGE_NAME/
|
||||
|
||||
# Install in development mode
|
||||
pip install -e packages/oca-technical/PACKAGE_NAME/
|
||||
|
||||
# Using uv (recommended for speed)
|
||||
uv add packages/oca-technical/PACKAGE_NAME/
|
||||
```
|
||||
|
||||
## Repository Structure
|
||||
|
||||
Each package in this repository follows the standard Odoo addon structure:
|
||||
|
||||
```
|
||||
oca-technical/
|
||||
├── odoo-bringout-oca-PROJECT-ADDON/
|
||||
│ ├── ADDON_NAME/ # Complete addon code
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── __manifest__.py
|
||||
│ │ └── ... (models, views, etc.)
|
||||
│ ├── pyproject.toml # Python package configuration
|
||||
│ └── README.md # Package documentation
|
||||
└── ...
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
These packages are maintained as part of the [OCA (Odoo Community Association)](https://github.com/OCA) ecosystem.
|
||||
|
||||
## License
|
||||
|
||||
Each package maintains its original license as specified in the OCA repositories.
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
# Account Cut-off Accrual Order Base
|
||||
|
||||
Odoo addon: account_cutoff_accrual_order_base
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
This addon depends on:
|
||||
- account_cutoff_base
|
||||
|
||||
## Manifest Information
|
||||
|
||||
- **Name**: Account Cut-off Accrual Order Base
|
||||
- **Version**: 16.0.1.1.0
|
||||
- **Category**: Accounting & Finance
|
||||
- **License**: AGPL-3
|
||||
- **Installable**: True
|
||||
|
||||
## Source
|
||||
|
||||
Based on [OCA/account-closing](https://github.com/OCA/account-closing) branch 16.0, addon `account_cutoff_accrual_order_base`.
|
||||
|
||||
## License
|
||||
|
||||
This package maintains the original AGPL-3 license from the upstream Odoo project.
|
||||
|
||||
## Documentation
|
||||
|
||||
- Overview: doc/OVERVIEW.md
|
||||
- Architecture: doc/ARCHITECTURE.md
|
||||
- Models: doc/MODELS.md
|
||||
- Controllers: doc/CONTROLLERS.md
|
||||
- Wizards: doc/WIZARDS.md
|
||||
- Install: doc/INSTALL.md
|
||||
- Usage: doc/USAGE.md
|
||||
- Configuration: doc/CONFIGURATION.md
|
||||
- Dependencies: doc/DEPENDENCIES.md
|
||||
- Troubleshooting: doc/TROUBLESHOOTING.md
|
||||
- FAQ: doc/FAQ.md
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
==================================
|
||||
Account Cut-off Accrual Order Base
|
||||
==================================
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:32932cbcf82dafa4ab85129328cb8347b3e3260836bc2495421e1c7462909d0d
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_base
|
||||
:alt: OCA/account-closing
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_order_base
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module extends the functionality of account_cutoff_base
|
||||
to allow the computation of expense and revenue cutoffs on orders.
|
||||
|
||||
The accrual is computed by comparing on the order, the quantity
|
||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
||||
invoices have occurred after the cutoff date, those quantities can be affected
|
||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
||||
processing few lines.
|
||||
|
||||
You can configure to disable the generation of cutoff entries on orders.
|
||||
For instance, if you know you will never receive the missing invoiced goods,
|
||||
you can disable cutoff entries on a purchase order.
|
||||
|
||||
Once the cutoff lines have been generated but the accounting entries are not yet
|
||||
created, you are still able to create or modify invoices before the accounting
|
||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
||||
situation.
|
||||
|
||||
Once the cutoff accounting entries are generated you cannot create or modify
|
||||
invoices before the accounting cutoff date.
|
||||
Nevertheless, you can still reset to draft a supplier invoice but you won't be
|
||||
able to modify any amount. You are then supposed to re-validate the invoice.
|
||||
|
||||
Warning: This module is replacing account_cutoff_picking and is incompatible with it.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To configure this module, you need to:
|
||||
|
||||
#. Go to the accounting settings to select the journals and accounts used for
|
||||
the cutoff.
|
||||
#. Analytic accounting needs to be enable in Accounting - Settings.
|
||||
#. If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
||||
each type of taxes an accrued tax account.
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-closing/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_order_base%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* BCIM
|
||||
* Akretion
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
* Thierry Ducrest <thierry.ducrest@camptocamp.com>
|
||||
|
||||
Maintainers
|
||||
~~~~~~~~~~~
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.
|
||||
|
||||
.. |maintainer-jbaudoux| image:: https://github.com/jbaudoux.png?size=40px
|
||||
:target: https://github.com/jbaudoux
|
||||
:alt: jbaudoux
|
||||
|
||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-jbaudoux|
|
||||
|
||||
This module is part of the `OCA/account-closing <https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_base>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import models
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
|
||||
{
|
||||
"name": "Account Cut-off Accrual Order Base",
|
||||
"version": "16.0.1.1.0",
|
||||
"category": "Accounting & Finance",
|
||||
"license": "AGPL-3",
|
||||
"summary": "Accrued Order Base",
|
||||
"author": "BCIM, Akretion, Odoo Community Association (OCA)",
|
||||
"maintainers": ["jbaudoux"],
|
||||
"website": "https://github.com/OCA/account-closing",
|
||||
"depends": ["account_cutoff_base"],
|
||||
"data": [
|
||||
"views/account_cutoff_view.xml",
|
||||
"views/account_cutoff_line_view.xml",
|
||||
],
|
||||
"installable": True,
|
||||
"application": False,
|
||||
}
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_order_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_form
|
||||
msgid "<span> on </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff_line
|
||||
msgid "Account Cut-off Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
||||
msgid "Amount that is used as base to compute the Cut-off Amount."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
||||
msgid "Cut-off Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
||||
msgid "Cut-off Amount without taxes in the Company Currency."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_order_line_cutoff_accrual_mixin
|
||||
msgid "Cutoff Accrual Order Line Mixin"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_order_line_cutoff_accrual_mixin__is_cutoff_accrual_excluded
|
||||
msgid "Do not generate cut-off entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Error: Missing '%(label)s' on tax '%(name)s'."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/account_cutoff.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Error: Missing {map_type} account on product '{product}' or on related "
|
||||
"product category."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoice_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_line_form
|
||||
msgid "Invoice Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoiced_qty
|
||||
msgid "Invoiced Quantity"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_move
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff__order_line_model
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__order_line_model
|
||||
msgid "Order Line Model"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__product_id
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__received_qty
|
||||
msgid "Received Quantity"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Wrong cutoff type %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot validate an invoice for an accounting date that generates an entry in a closed cut-off (i.e. for which an accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot validate an invoice for an accounting date that modifies a closed cutoff (i.e. for which an accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
||||
" - New invoiced quantity: {new_inv_qty}"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_order_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_form
|
||||
msgid "<span> on </span>"
|
||||
msgstr "<span> na </span>"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Računovodstveno presjecanje"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff_line
|
||||
msgid "Account Cut-off Line"
|
||||
msgstr "Linija računovodstvenog presjecanja"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
||||
msgid "Amount"
|
||||
msgstr "Iznos"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
||||
msgid "Amount that is used as base to compute the Cut-off Amount."
|
||||
msgstr "Iznos koji se koristi kao osnova za izračunavanje iznosa presjecanja."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
||||
msgid "Cut-off Amount"
|
||||
msgstr "Iznos presjecanja"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
||||
msgid "Cut-off Amount without taxes in the Company Currency."
|
||||
msgstr "Iznos presjecanja bez poreza u valuti kompanije."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_order_line_cutoff_accrual_mixin
|
||||
msgid "Cutoff Accrual Order Line Mixin"
|
||||
msgstr "Miješavanje akruelne linije narudžbe presjecanja"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_order_line_cutoff_accrual_mixin__is_cutoff_accrual_excluded
|
||||
msgid "Do not generate cut-off entries"
|
||||
msgstr "Ne generiši zapise presjecanja"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Error: Missing '%(label)s' on tax '%(name)s'."
|
||||
msgstr "Greška: Nedostaje '%(label)s' na porezu '%(name)s'."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/account_cutoff.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Error: Missing {map_type} account on product '{product}' or on related "
|
||||
"product category."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoice_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_line_form
|
||||
msgid "Invoice Lines"
|
||||
msgstr "Stavke fakture"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoiced_qty
|
||||
msgid "Invoiced Quantity"
|
||||
msgstr "Fakturisana količina"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_move
|
||||
msgid "Journal Entry"
|
||||
msgstr "Žurnal"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff__order_line_model
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__order_line_model
|
||||
msgid "Order Line Model"
|
||||
msgstr "Model linije narudžbe"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Artikal"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Količina"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__received_qty
|
||||
msgid "Received Quantity"
|
||||
msgstr "Primljena količina"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Wrong cutoff type %s"
|
||||
msgstr "Pogrešan tip presjecanja %s"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot validate an invoice for an accounting date that generates an entry in a closed cut-off (i.e. for which an accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot validate an invoice for an accounting date that modifies a closed cutoff (i.e. for which an accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
||||
" - New invoiced quantity: {new_inv_qty}"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_order_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0+e\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-10-26 11:53+0000\n"
|
||||
"PO-Revision-Date: 2023-10-26 11:53+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_form
|
||||
msgid "<span> on </span>"
|
||||
msgstr "<span> sur </span>"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Provision"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff_line
|
||||
msgid "Account Cut-off Line"
|
||||
msgstr "Ligne de provision"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
||||
msgid "Amount"
|
||||
msgstr "Montant"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
||||
msgid "Amount that is used as base to compute the Cut-off Amount."
|
||||
msgstr ""
|
||||
"Montant qui est utilisé comme base pour calculer le montant de la provision"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
||||
msgid "Cut-off Amount"
|
||||
msgstr "Montant de la provision"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
||||
msgid "Cut-off Amount without taxes in the Company Currency."
|
||||
msgstr "Montant de provision hors taxes dans la devise de la société."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_order_line_cutoff_accrual_mixin
|
||||
msgid "Cutoff Accrual Order Line Mixin"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_order_line_cutoff_accrual_mixin__is_cutoff_accrual_excluded
|
||||
#, fuzzy
|
||||
msgid "Do not generate cut-off entries"
|
||||
msgstr "Ne pas générer d'écriture de provision pour les commande verrouillées"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Error: Missing '%(label)s' on tax '%(name)s'."
|
||||
msgstr "Errur: '%(label)s' manquant sur la taxe '%(name)s'."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/account_cutoff.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Error: Missing {map_type} account on product '{product}' or on related "
|
||||
"product category."
|
||||
msgstr ""
|
||||
"Erreur: {map_type} compte manquant sur le produit '{product}' ou sur la "
|
||||
"catégorie de product liée."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoice_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_line_form
|
||||
msgid "Invoice Lines"
|
||||
msgstr "Lignes de facture"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoiced_qty
|
||||
msgid "Invoiced Quantity"
|
||||
msgstr "Quantité facturée"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_move
|
||||
msgid "Journal Entry"
|
||||
msgstr "Pièce comptable"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff__order_line_model
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__order_line_model
|
||||
msgid "Order Line Model"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Produit"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Quantité"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__received_qty
|
||||
msgid "Received Quantity"
|
||||
msgstr "Quantité reçue"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Wrong cutoff type %s"
|
||||
msgstr "Mauvais type de cutoff %s"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot validate an invoice for an accounting date that generates an "
|
||||
"entry in a closed cut-off (i.e. for which an accounting entry has already "
|
||||
"been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas valider une facture à une date comptable qui génère une "
|
||||
"ligne dans une provision fermée (càd pour laquelle l'écriture comptable de "
|
||||
"provision a déjà été créée).\n"
|
||||
" - Provision: {cutoff}\n"
|
||||
" - Produit: {product}\n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot validate an invoice for an accounting date that modifies a closed "
|
||||
"cutoff (i.e. for which an accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
||||
" - New invoiced quantity: {new_inv_qty}"
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas valider une facture à une date comptable qui modifie une "
|
||||
"provision fermée (càd pour laquelle l'écriture comptable de provision a déjà "
|
||||
"été créée).\n"
|
||||
" - Provision: {cutoff}\n"
|
||||
" - Produit: {product}\n"
|
||||
" - Précédente quantité facturée: {prev_inv_qty}\n"
|
||||
" - Nouvelle quantité facturée: {new_inv_qty}"
|
||||
|
||||
#~ msgid "Companies"
|
||||
#~ msgstr "Sociétés"
|
||||
|
||||
#~ msgid "Config Settings"
|
||||
#~ msgstr "Paramètres de configuration"
|
||||
|
||||
#~ msgid "Cutoff Exclude Locked Orders"
|
||||
#~ msgstr "Provision Exclure les commandes verrouillées"
|
||||
|
||||
#~ msgid "Exclude Locked Orders"
|
||||
#~ msgstr "Exclure les commandes verrouillées"
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_order_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-10-21 12:06+0000\n"
|
||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_form
|
||||
msgid "<span> on </span>"
|
||||
msgstr "<span> su </span>"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Scritture di fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff_line
|
||||
msgid "Account Cut-off Line"
|
||||
msgstr "Riga scritture fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
||||
msgid "Amount"
|
||||
msgstr "Valore"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
||||
msgid "Amount that is used as base to compute the Cut-off Amount."
|
||||
msgstr "Valore utilizzato come base per calcolare il valore di fine periodo."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
||||
msgid "Cut-off Amount"
|
||||
msgstr "Valore fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
||||
msgid "Cut-off Amount without taxes in the Company Currency."
|
||||
msgstr "Valore fine periodo senza imposte nella valuta dell'azienda."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_order_line_cutoff_accrual_mixin
|
||||
msgid "Cutoff Accrual Order Line Mixin"
|
||||
msgstr "Mixin riga ordine rateo di fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_order_line_cutoff_accrual_mixin__is_cutoff_accrual_excluded
|
||||
msgid "Do not generate cut-off entries"
|
||||
msgstr "Non generare registrazioni di fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Error: Missing '%(label)s' on tax '%(name)s'."
|
||||
msgstr "Errore: manca '%(label)s' nell'imposta '%(name)s'."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/account_cutoff.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Error: Missing {map_type} account on product '{product}' or on related "
|
||||
"product category."
|
||||
msgstr ""
|
||||
"Errore: manca {map_type} conto nel prodotto '{product}' o nella categoria "
|
||||
"prodotto relativa."
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoice_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_line_form
|
||||
msgid "Invoice Lines"
|
||||
msgstr "Righe fattura"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoiced_qty
|
||||
msgid "Invoiced Quantity"
|
||||
msgstr "Quantità fatturata"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_move
|
||||
msgid "Journal Entry"
|
||||
msgstr "Registrazione contabile"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff__order_line_model
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__order_line_model
|
||||
msgid "Order Line Model"
|
||||
msgstr "Modello riga ordine"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__product_id
|
||||
msgid "Product"
|
||||
msgstr "Prodotto"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__quantity
|
||||
msgid "Quantity"
|
||||
msgstr "Quantità"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__received_qty
|
||||
msgid "Received Quantity"
|
||||
msgstr "Quantità ricevuta"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Wrong cutoff type %s"
|
||||
msgstr "Tipo registrazione fine periodo %s errato"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot validate an invoice for an accounting date that generates an entry in a closed cut-off (i.e. for which an accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
msgstr ""
|
||||
"Non è possibile convalidare una fattura per una data contabile che genera "
|
||||
"una registrazione in una registrazione di fine periodo chiusa (ad esempio "
|
||||
"per il quale è già stata creata una registrazione contabile).\n"
|
||||
"- Registrazione di fine periodo: {cutoff}\n"
|
||||
"- Prodotto: {product}\n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_base
|
||||
#. odoo-python
|
||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot validate an invoice for an accounting date that modifies a closed cutoff (i.e. for which an accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
||||
" - New invoiced quantity: {new_inv_qty}"
|
||||
msgstr ""
|
||||
"Non è possibile convalidare una fattura per una data contabile che modifica "
|
||||
"una registrazione di fine periodo chiusa (ad esempio per il quale è già "
|
||||
"stata creata una registrazione contabile).\n"
|
||||
"- Registrazione di fine periodo: {cutoff}\n"
|
||||
"- Prodotto: {product}\n"
|
||||
"- Quantità fatturata precedente: {prev_inv_qty}\n"
|
||||
"- Nuova quantità fatturata: {new_inv_qty}"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import account_cutoff
|
||||
from . import account_cutoff_line
|
||||
from . import order_line_mixin
|
||||
from . import account_move
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
import logging
|
||||
from datetime import datetime, time, timedelta
|
||||
|
||||
import pytz
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools import split_every
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AccountCutoff(models.Model):
|
||||
_inherit = "account.cutoff"
|
||||
|
||||
order_line_model = fields.Selection(
|
||||
selection=[],
|
||||
readonly=True,
|
||||
)
|
||||
|
||||
def _nextday_start_dt(self):
|
||||
"""Convert the cutoff date into datetime as start of next day."""
|
||||
next_day = self.cutoff_date + timedelta(days=1)
|
||||
tz = self.env.company.partner_id.tz or "UTC"
|
||||
start_next_day = datetime.combine(
|
||||
next_day, time(0, 0, 0, 0, tzinfo=pytz.timezone(tz))
|
||||
)
|
||||
return start_next_day.replace(tzinfo=None)
|
||||
|
||||
def _get_product_account(self, product, fpos):
|
||||
if self.cutoff_type in "accrued_revenue":
|
||||
map_type = "income"
|
||||
elif self.cutoff_type in "accrued_expense":
|
||||
map_type = "expense"
|
||||
else:
|
||||
return
|
||||
account = product.product_tmpl_id.get_product_accounts(fpos)[map_type]
|
||||
if not account:
|
||||
raise UserError(
|
||||
_(
|
||||
"Error: Missing {map_type} account on product '{product}' or on"
|
||||
" related product category.",
|
||||
).format(
|
||||
map_type=map_type,
|
||||
product=product.name,
|
||||
)
|
||||
)
|
||||
return account
|
||||
|
||||
def get_lines(self):
|
||||
self.ensure_one()
|
||||
# If the computation of the cutoff is done at the cutoff date, then we
|
||||
# only need to retrieve lines where there is a qty to invoice (i.e.
|
||||
# delivered qty != invoiced qty).
|
||||
# For any line where a move or an invoice has been done after the
|
||||
# cutoff date, we need to recompute the quantities.
|
||||
res = super().get_lines()
|
||||
if not self.order_line_model:
|
||||
return res
|
||||
|
||||
model = self.env[self.order_line_model]
|
||||
_logger.debug("Get model lines")
|
||||
line_ids = set(model.browse(model._get_cutoff_accrual_lines_query(self)).ids)
|
||||
_logger.debug("Get model lines invoiced after")
|
||||
line_ids |= set(model._get_cutoff_accrual_lines_invoiced_after(self).ids)
|
||||
_logger.debug("Get model lines delivered after")
|
||||
line_ids |= set(model._get_cutoff_accrual_lines_delivered_after(self).ids)
|
||||
|
||||
_logger.debug("Prepare cutoff lines per chunks")
|
||||
# A good chunk size is per 1000. If bigger, it is not faster but memory
|
||||
# usage increases. If too low, then it takes more cpu time.
|
||||
for chunk in split_every(models.INSERT_BATCH_SIZE * 10, tuple(line_ids)):
|
||||
lines = model.browse(chunk)
|
||||
values = []
|
||||
for line in lines:
|
||||
data = line._prepare_cutoff_accrual_line(self)
|
||||
if not data:
|
||||
continue
|
||||
values.append(data)
|
||||
self.env["account.cutoff.line"].create(values)
|
||||
# free memory usage
|
||||
self.env.invalidate_all()
|
||||
_logger.debug("Prepare cutoff lines - next chunk")
|
||||
return res
|
||||
|
||||
@api.model
|
||||
def _cron_cutoff(self, cutoff_type, model):
|
||||
# Cron is expected to run at begin of new period. We need the last day
|
||||
# of previous month. Support some time difference and compute last day
|
||||
# of previous period.
|
||||
last_day = datetime.today()
|
||||
if last_day.day > 20:
|
||||
last_day += relativedelta(months=1)
|
||||
last_day = last_day.replace(day=1)
|
||||
last_day -= relativedelta(days=1)
|
||||
cutoff = self.with_context(default_cutoff_type=cutoff_type).create(
|
||||
{
|
||||
"cutoff_date": last_day,
|
||||
"cutoff_type": cutoff_type,
|
||||
"order_line_model": model,
|
||||
"auto_reverse": True,
|
||||
}
|
||||
)
|
||||
cutoff.get_lines()
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# Copyright 2013 Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class AccountCutoffLine(models.Model):
|
||||
_inherit = "account.cutoff.line"
|
||||
|
||||
order_line_model = fields.Selection(related="parent_id.order_line_model")
|
||||
|
||||
product_id = fields.Many2one(
|
||||
comodel_name="product.product", string="Product", readonly=True
|
||||
)
|
||||
received_qty = fields.Float("Received Quantity", readonly=True)
|
||||
invoiced_qty = fields.Float("Invoiced Quantity", readonly=True)
|
||||
invoice_line_ids = fields.One2many(
|
||||
"account.move.line",
|
||||
compute="_compute_invoice_lines",
|
||||
string="Invoice Lines",
|
||||
)
|
||||
quantity = fields.Float(compute="_compute_quantity", store=True)
|
||||
amount = fields.Monetary(compute="_compute_amount", store=True)
|
||||
cutoff_amount = fields.Monetary(compute="_compute_cutoff_amount", store=True)
|
||||
|
||||
def _get_order_line(self):
|
||||
self.ensure_one()
|
||||
return
|
||||
|
||||
def _compute_invoice_lines(self):
|
||||
return
|
||||
|
||||
@api.depends("invoiced_qty", "received_qty")
|
||||
def _compute_quantity(self):
|
||||
for rec in self:
|
||||
if not rec.parent_id.order_line_model:
|
||||
continue
|
||||
rec.quantity = rec.received_qty - rec.invoiced_qty
|
||||
|
||||
@api.depends("price_unit", "quantity")
|
||||
def _compute_amount(self):
|
||||
for rec in self:
|
||||
if not rec.parent_id.order_line_model:
|
||||
continue
|
||||
if rec.parent_id.cutoff_type == "accrued_revenue":
|
||||
amount = rec.quantity * rec.price_unit
|
||||
elif rec.parent_id.cutoff_type == "accrued_expense":
|
||||
amount = -rec.quantity * rec.price_unit
|
||||
else:
|
||||
continue
|
||||
rec.amount = rec.company_currency_id.round(amount)
|
||||
|
||||
@api.depends("amount")
|
||||
def _compute_cutoff_amount(self):
|
||||
for rec in self:
|
||||
if not rec.parent_id.order_line_model:
|
||||
continue
|
||||
if rec.parent_id.state == "done":
|
||||
continue
|
||||
if rec.company_currency_id != rec.currency_id:
|
||||
currency_at_date = rec.currency_id.with_context(
|
||||
date=rec.parent_id.cutoff_date
|
||||
)
|
||||
rec.cutoff_amount = currency_at_date.compute(
|
||||
rec.amount, rec.company_currency_id
|
||||
)
|
||||
else:
|
||||
rec.cutoff_amount = rec.amount
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
class AccountMove(models.Model):
|
||||
_inherit = "account.move"
|
||||
|
||||
def _post(self, soft=True):
|
||||
res = super()._post(soft=soft)
|
||||
self._update_cutoff_accrual_order()
|
||||
return res
|
||||
|
||||
def unlink(self):
|
||||
# In case the invoice was posted, we need to check any affected cutoff
|
||||
self._update_cutoff_accrual_order()
|
||||
return super().unlink()
|
||||
|
||||
def _get_cutoff_accrual_order_lines(self):
|
||||
"""Return a list of order lines to process"""
|
||||
self.ensure_one()
|
||||
return []
|
||||
|
||||
def _update_cutoff_accrual_order(self):
|
||||
for move in self:
|
||||
if not move.is_invoice():
|
||||
continue
|
||||
for model_order_lines in move.sudo()._get_cutoff_accrual_order_lines():
|
||||
for order_line in model_order_lines:
|
||||
# In case invoice lines have been created and posted in one
|
||||
# transaction, we need to clear the cache of invoice lines
|
||||
# on the cutoff lines
|
||||
order_line.account_cutoff_line_ids.invalidate_recordset(
|
||||
["invoice_line_ids"]
|
||||
)
|
||||
order_line._update_cutoff_accrual(move.date)
|
||||
|
|
@ -0,0 +1,273 @@
|
|||
# Copyright 2013 Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
import logging
|
||||
|
||||
from odoo import Command, _, api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class OrderLineCutoffAccrualMixin(models.AbstractModel):
|
||||
_name = "order.line.cutoff.accrual.mixin"
|
||||
_description = "Cutoff Accrual Order Line Mixin"
|
||||
|
||||
is_cutoff_accrual_excluded = fields.Boolean(
|
||||
string="Do not generate cut-off entries",
|
||||
readonly=True,
|
||||
inverse=lambda r: r._inverse_is_cutoff_accrual_excluded(),
|
||||
)
|
||||
|
||||
def _inverse_is_cutoff_accrual_excluded(self):
|
||||
for rec in self:
|
||||
rec.sudo()._update_cutoff_accrual()
|
||||
|
||||
def _get_cutoff_accrual_partner(self):
|
||||
self.ensure_one()
|
||||
return self.order_id.partner_id
|
||||
|
||||
def _get_cutoff_accrual_fiscal_position(self):
|
||||
self.ensure_one()
|
||||
return self.order_id.fiscal_position_id
|
||||
|
||||
def _get_cutoff_accrual_product(self):
|
||||
self.ensure_one()
|
||||
return self.product_id
|
||||
|
||||
def _get_cutoff_accrual_product_qty(self):
|
||||
return self.product_qty
|
||||
|
||||
def _get_cutoff_accrual_price_unit(self):
|
||||
self.ensure_one()
|
||||
product_qty = self._get_cutoff_accrual_product_qty()
|
||||
if product_qty:
|
||||
return self.price_subtotal / product_qty
|
||||
return 0
|
||||
|
||||
def _get_cutoff_accrual_invoice_lines(self):
|
||||
self.ensure_one()
|
||||
return self.invoice_lines
|
||||
|
||||
def _get_cutoff_accrual_invoiced_quantity(self, cutoff):
|
||||
self.ensure_one()
|
||||
cutoff_nextday = cutoff._nextday_start_dt()
|
||||
invoiced_qty = sum(
|
||||
line.quantity
|
||||
* (-1 if line.move_id.move_type in ("in_refund", "out_refund") else 1)
|
||||
for line in self._get_cutoff_accrual_invoice_lines()
|
||||
if (
|
||||
line.move_id.state == "posted"
|
||||
and line.move_id.date <= cutoff.cutoff_date
|
||||
)
|
||||
or (
|
||||
line.move_id.state == "draft"
|
||||
and line.move_id.move_type == "in_refund"
|
||||
and line.move_id.create_date < cutoff_nextday
|
||||
)
|
||||
)
|
||||
return invoiced_qty
|
||||
|
||||
def _get_cutoff_accrual_lines_invoiced_after(self, cutoff):
|
||||
"""Return order lines"""
|
||||
return NotImplemented()
|
||||
|
||||
def _get_cutoff_accrual_line_delivered_after(self, cutoff):
|
||||
"""Return order lines"""
|
||||
return self.browse()
|
||||
|
||||
def _get_cutoff_accrual_delivered_service_quantity(self, cutoff):
|
||||
return NotImplemented()
|
||||
|
||||
def _get_cutoff_accrual_delivered_stock_quantity(self, cutoff):
|
||||
return NotImplemented()
|
||||
|
||||
def _get_cutoff_accrual_delivered_quantity(self, cutoff):
|
||||
self.ensure_one()
|
||||
if self.product_id.detailed_type == "service":
|
||||
return self._get_cutoff_accrual_delivered_service_quantity(cutoff)
|
||||
return self._get_cutoff_accrual_delivered_stock_quantity(cutoff)
|
||||
|
||||
def _get_cutoff_accrual_lines_delivered_after(self, cutoff):
|
||||
return self.browse()
|
||||
|
||||
def _get_cutoff_accrual_delivered_min_date(self):
|
||||
"""Return first delivery date"""
|
||||
return False
|
||||
|
||||
def _get_cutoff_accrual_taxes(self, cutoff, quantity):
|
||||
self.ensure_one()
|
||||
if cutoff.cutoff_type == "accrued_revenue":
|
||||
tax_account_field_name = "account_accrued_revenue_id"
|
||||
tax_account_field_label = "Accrued Revenue Tax Account"
|
||||
sign = 1
|
||||
elif cutoff.cutoff_type == "accrued_expense":
|
||||
tax_account_field_name = "account_accrued_expense_id"
|
||||
tax_account_field_label = "Accrued Expense Tax Account"
|
||||
sign = -1
|
||||
else:
|
||||
return
|
||||
tax_line_ids = [Command.clear()]
|
||||
base_line = self._convert_to_tax_base_line_dict()
|
||||
base_line["quantity"] = quantity
|
||||
tax_info = self.env["account.tax"]._compute_taxes([base_line])
|
||||
for tax_line in tax_info["tax_lines_to_add"]:
|
||||
amount = tax_line["tax_amount"] * sign
|
||||
if cutoff.company_currency_id != self.currency_id:
|
||||
currency_at_date = self.currency_id.with_context(
|
||||
date=self.parent_id.cutoff_date
|
||||
)
|
||||
tax_cutoff_amount = currency_at_date.compute(
|
||||
amount, cutoff.company_currency_id
|
||||
)
|
||||
else:
|
||||
tax_cutoff_amount = amount
|
||||
tax = self.env["account.tax"].browse(tax_line["tax_id"])
|
||||
tax_cutoff_account_id = tax[tax_account_field_name]
|
||||
if not tax_cutoff_account_id:
|
||||
raise UserError(
|
||||
_(
|
||||
"Error: Missing '%(label)s' on tax '%(name)s'.",
|
||||
label=tax_account_field_label,
|
||||
name=tax.display_name,
|
||||
)
|
||||
)
|
||||
tax_line_ids.append(
|
||||
Command.create(
|
||||
{
|
||||
"tax_id": tax_line["tax_id"],
|
||||
"base": tax_line["base_amount"],
|
||||
"amount": amount,
|
||||
"cutoff_account_id": tax_cutoff_account_id.id,
|
||||
"cutoff_amount": tax_cutoff_amount,
|
||||
},
|
||||
)
|
||||
)
|
||||
return tax_line_ids
|
||||
|
||||
@api.model
|
||||
def _get_cutoff_accrual_lines_domain(self, cutoff):
|
||||
domain = []
|
||||
domain.append(("is_cutoff_accrual_excluded", "!=", True))
|
||||
return domain
|
||||
|
||||
@api.model
|
||||
def _get_cutoff_accrual_lines_query(self, cutoff):
|
||||
domain = self._get_cutoff_accrual_lines_domain(cutoff)
|
||||
self._flush_search(domain)
|
||||
query = self._where_calc(domain)
|
||||
self._apply_ir_rules(query, "read")
|
||||
return query
|
||||
|
||||
def _prepare_cutoff_accrual_line(self, cutoff):
|
||||
"""
|
||||
Calculate accrual using order line
|
||||
"""
|
||||
self.ensure_one()
|
||||
if cutoff.cutoff_type not in ("accrued_expense", "accrued_revenue"):
|
||||
return UserError(_("Wrong cutoff type %s") % cutoff.cutoff_type)
|
||||
price_unit = self._get_cutoff_accrual_price_unit()
|
||||
if not price_unit:
|
||||
return {}
|
||||
fpos = self._get_cutoff_accrual_fiscal_position()
|
||||
account = cutoff._get_product_account(self.product_id, fpos)
|
||||
cutoff_account_id = cutoff._get_mapping_dict().get(account.id, account.id)
|
||||
res = {
|
||||
"parent_id": cutoff.id,
|
||||
"partner_id": self._get_cutoff_accrual_partner().id,
|
||||
"name": self.name,
|
||||
"account_id": account.id,
|
||||
"cutoff_account_id": cutoff_account_id,
|
||||
"analytic_distribution": self.analytic_distribution,
|
||||
"currency_id": self.currency_id.id,
|
||||
"product_id": self._get_cutoff_accrual_product().id,
|
||||
"price_unit": price_unit,
|
||||
}
|
||||
delivered_qty = self._get_cutoff_accrual_delivered_quantity(cutoff)
|
||||
invoiced_qty = self._get_cutoff_accrual_invoiced_quantity(cutoff)
|
||||
if delivered_qty == invoiced_qty:
|
||||
return {}
|
||||
res["received_qty"] = delivered_qty
|
||||
res["invoiced_qty"] = invoiced_qty
|
||||
quantity = delivered_qty - invoiced_qty
|
||||
if self.env.company.accrual_taxes:
|
||||
res["tax_line_ids"] = self._get_cutoff_accrual_taxes(cutoff, quantity)
|
||||
return res
|
||||
|
||||
def _update_cutoff_accrual(self, date=False):
|
||||
self.ensure_one()
|
||||
if self.is_cutoff_accrual_excluded:
|
||||
self.account_cutoff_line_ids.filtered(
|
||||
lambda line: line.parent_id.state != "done"
|
||||
).unlink()
|
||||
return
|
||||
for cutoff_line in self.account_cutoff_line_ids:
|
||||
cutoff = cutoff_line.parent_id
|
||||
invoiced_qty = (
|
||||
cutoff_line._get_order_line()._get_cutoff_accrual_invoiced_quantity(
|
||||
cutoff
|
||||
)
|
||||
)
|
||||
if cutoff.state == "done" and invoiced_qty != cutoff_line.invoiced_qty:
|
||||
raise UserError(
|
||||
_(
|
||||
"You cannot validate an invoice for an accounting date "
|
||||
"that modifies a closed cutoff (i.e. for which an "
|
||||
"accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
||||
" - New invoiced quantity: {new_inv_qty}"
|
||||
).format(
|
||||
cutoff=cutoff.display_name,
|
||||
product=cutoff_line.product_id.display_name,
|
||||
prev_inv_qty=cutoff_line.invoiced_qty,
|
||||
new_inv_qty=invoiced_qty,
|
||||
)
|
||||
)
|
||||
cutoff_line.invoiced_qty = invoiced_qty
|
||||
# search missing cutoff entries - start at first reception
|
||||
domain = [
|
||||
(
|
||||
"id",
|
||||
"not in",
|
||||
self.account_cutoff_line_ids.parent_id.ids,
|
||||
),
|
||||
("cutoff_type", "in", ("accrued_expense", "accrued_revenue")),
|
||||
("order_line_model", "=", self._name),
|
||||
("company_id", "=", self.company_id.id),
|
||||
]
|
||||
if date:
|
||||
# When invoice is updated
|
||||
delivery_min_date = self._get_cutoff_accrual_delivered_min_date()
|
||||
if delivery_min_date:
|
||||
date = min(delivery_min_date, date)
|
||||
else:
|
||||
date = date
|
||||
domain.append(("cutoff_date", ">=", date))
|
||||
else:
|
||||
# When is_cutoff_accrual_excluded is removed
|
||||
domain.append(("state", "!=", "done"))
|
||||
cutoffs = self.env["account.cutoff"].sudo().search(domain)
|
||||
values = []
|
||||
for cutoff in cutoffs:
|
||||
data = self._prepare_cutoff_accrual_line(cutoff)
|
||||
if not data:
|
||||
continue
|
||||
if cutoff.state == "done":
|
||||
raise UserError(
|
||||
_(
|
||||
"You cannot validate an invoice for an accounting date "
|
||||
"that generates an entry in a closed cut-off (i.e. for "
|
||||
"which an accounting entry has already been created).\n"
|
||||
" - Cut-off: {cutoff}\n"
|
||||
" - Product: {product}\n"
|
||||
).format(
|
||||
cutoff=cutoff.display_name,
|
||||
product=self.product_id.display_name,
|
||||
)
|
||||
)
|
||||
values.append(data)
|
||||
if values:
|
||||
self.env["account.cutoff.line"].sudo().create(values)
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
To configure this module, you need to:
|
||||
|
||||
#. Go to the accounting settings to select the journals and accounts used for
|
||||
the cutoff.
|
||||
#. Analytic accounting needs to be enable in Accounting - Settings.
|
||||
#. If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
||||
each type of taxes an accrued tax account.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
* Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
* Thierry Ducrest <thierry.ducrest@camptocamp.com>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
This module extends the functionality of account_cutoff_base
|
||||
to allow the computation of expense and revenue cutoffs on orders.
|
||||
|
||||
The accrual is computed by comparing on the order, the quantity
|
||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
||||
invoices have occurred after the cutoff date, those quantities can be affected
|
||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
||||
processing few lines.
|
||||
|
||||
You can configure to disable the generation of cutoff entries on orders.
|
||||
For instance, if you know you will never receive the missing invoiced goods,
|
||||
you can disable cutoff entries on a purchase order.
|
||||
|
||||
Once the cutoff lines have been generated but the accounting entries are not yet
|
||||
created, you are still able to create or modify invoices before the accounting
|
||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
||||
situation.
|
||||
|
||||
Once the cutoff accounting entries are generated you cannot create or modify
|
||||
invoices before the accounting cutoff date.
|
||||
Nevertheless, you can still reset to draft a supplier invoice but you won't be
|
||||
able to modify any amount. You are then supposed to re-validate the invoice.
|
||||
|
||||
Warning: This module is replacing account_cutoff_picking and is incompatible with it.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
|
|
@ -0,0 +1,458 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>Account Cut-off Accrual Order Base</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
Despite the name, some widely supported CSS2 features are used.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: gray; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic, pre.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="account-cut-off-accrual-order-base">
|
||||
<h1 class="title">Account Cut-off Accrual Order Base</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:32932cbcf82dafa4ab85129328cb8347b3e3260836bc2495421e1c7462909d0d
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_base"><img alt="OCA/account-closing" src="https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_order_base"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module extends the functionality of account_cutoff_base
|
||||
to allow the computation of expense and revenue cutoffs on orders.</p>
|
||||
<p>The accrual is computed by comparing on the order, the quantity
|
||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
||||
invoices have occurred after the cutoff date, those quantities can be affected
|
||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
||||
processing few lines.</p>
|
||||
<p>You can configure to disable the generation of cutoff entries on orders.
|
||||
For instance, if you know you will never receive the missing invoiced goods,
|
||||
you can disable cutoff entries on a purchase order.</p>
|
||||
<p>Once the cutoff lines have been generated but the accounting entries are not yet
|
||||
created, you are still able to create or modify invoices before the accounting
|
||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
||||
situation.</p>
|
||||
<p>Once the cutoff accounting entries are generated you cannot create or modify
|
||||
invoices before the accounting cutoff date.
|
||||
Nevertheless, you can still reset to draft a supplier invoice but you won’t be
|
||||
able to modify any amount. You are then supposed to re-validate the invoice.</p>
|
||||
<p>Warning: This module is replacing account_cutoff_picking and is incompatible with it.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="configuration">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
|
||||
<p>To configure this module, you need to:</p>
|
||||
<ol class="arabic simple">
|
||||
<li>Go to the accounting settings to select the journals and accounts used for
|
||||
the cutoff.</li>
|
||||
<li>Analytic accounting needs to be enable in Accounting - Settings.</li>
|
||||
<li>If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
||||
each type of taxes an accrued tax account.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-closing/issues">GitHub Issues</a>.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_order_base%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>BCIM</li>
|
||||
<li>Akretion</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Alexis de Lattre (Akretion) <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li>
|
||||
<li>Jacques-Etienne Baudoux (BCIM) <<a class="reference external" href="mailto:je@bcim.be">je@bcim.be</a>></li>
|
||||
<li>Thierry Ducrest <<a class="reference external" href="mailto:thierry.ducrest@camptocamp.com">thierry.ducrest@camptocamp.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
</a>
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.</p>
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
||||
<p><a class="reference external image-reference" href="https://github.com/jbaudoux"><img alt="jbaudoux" src="https://github.com/jbaudoux.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_base">OCA/account-closing</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestAccountCutoffAccrualOrderCommon(TransactionCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
|
||||
cls.company = cls.env.ref("base.main_company")
|
||||
cls.cutoff_journal = cls.env["account.journal"].create(
|
||||
{
|
||||
"code": "cop0",
|
||||
"company_id": cls.company.id,
|
||||
"name": "Cutoff Journal Picking",
|
||||
"type": "general",
|
||||
}
|
||||
)
|
||||
cls.cutoff_account = cls.env["account.account"].create(
|
||||
{
|
||||
"name": "Cutoff account",
|
||||
"code": "ACC480000",
|
||||
"company_id": cls.company.id,
|
||||
"account_type": "liability_current",
|
||||
}
|
||||
)
|
||||
cls.company.write(
|
||||
{
|
||||
"default_accrued_revenue_account_id": cls.cutoff_account.id,
|
||||
"default_accrued_expense_account_id": cls.cutoff_account.id,
|
||||
"default_cutoff_journal_id": cls.cutoff_journal.id,
|
||||
}
|
||||
)
|
||||
|
||||
cls.partner = cls.env.ref("base.res_partner_1")
|
||||
cls.products = cls.env.ref("product.product_delivery_01") | cls.env.ref(
|
||||
"product.product_delivery_02"
|
||||
)
|
||||
cls.products |= cls.env.ref("product.expense_product")
|
||||
# analytic account
|
||||
cls.default_plan = cls.env["account.analytic.plan"].create(
|
||||
{"name": "Default", "company_id": False}
|
||||
)
|
||||
cls.analytic_account = cls.env["account.analytic.account"].create(
|
||||
{
|
||||
"name": "analytic_account",
|
||||
"plan_id": cls.default_plan.id,
|
||||
"company_id": False,
|
||||
}
|
||||
)
|
||||
|
||||
def _refund_invoice(self, invoice, post=True):
|
||||
credit_note_wizard = (
|
||||
self.env["account.move.reversal"]
|
||||
.with_context(
|
||||
**{
|
||||
"active_ids": invoice.ids,
|
||||
"active_id": invoice.id,
|
||||
"active_model": "account.move",
|
||||
"tz": self.env.company.partner_id.tz or "UTC",
|
||||
}
|
||||
)
|
||||
.create(
|
||||
{
|
||||
"refund_method": "refund",
|
||||
"reason": "refund",
|
||||
"journal_id": invoice.journal_id.id,
|
||||
}
|
||||
)
|
||||
)
|
||||
invoice_refund = self.env["account.move"].browse(
|
||||
credit_note_wizard.reverse_moves()["res_id"]
|
||||
)
|
||||
invoice_refund.ref = invoice_refund.id
|
||||
if post:
|
||||
invoice_refund.action_post()
|
||||
return invoice_refund
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2013 Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<!-- Form view for lines -->
|
||||
<record id="account_cutoff_line_form" model="ir.ui.view">
|
||||
<field name="model">account.cutoff.line</field>
|
||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_line_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="name" position="before">
|
||||
<field name="order_line_model" invisible="1" />
|
||||
<field
|
||||
name="product_id"
|
||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
||||
/>
|
||||
</field>
|
||||
<field name="quantity" position="before">
|
||||
<field
|
||||
name="received_qty"
|
||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
||||
/>
|
||||
<field
|
||||
name="invoiced_qty"
|
||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
||||
/>
|
||||
</field>
|
||||
<group name="tax" position="before">
|
||||
<group
|
||||
name="invoicelines"
|
||||
string="Invoice Lines"
|
||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
||||
>
|
||||
<field name="invoice_line_ids" nolabel="1" colspan="2">
|
||||
<tree>
|
||||
<field name="move_id" />
|
||||
<field name="quantity" />
|
||||
<field name="date" />
|
||||
<field name="parent_state" />
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Tree view for lines -->
|
||||
<record id="account_cutoff_line_tree" model="ir.ui.view">
|
||||
<field name="model">account.cutoff.line</field>
|
||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_line_tree" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="parent_id" position="after">
|
||||
<!--field
|
||||
name="order_id"
|
||||
attrs="{'invisible': [('order_line_model', '=', False)]}" />
|
||||
/-->
|
||||
</field>
|
||||
<field name="quantity" position="after">
|
||||
<field name="order_line_model" invisible="1" />
|
||||
<field
|
||||
name="received_qty"
|
||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
||||
/>
|
||||
<field
|
||||
name="invoiced_qty"
|
||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="account_cutoff_form" model="ir.ui.view">
|
||||
<field name="model">account.cutoff</field>
|
||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="cutoff_type" position="after">
|
||||
<span> on </span><field name="order_line_model" />
|
||||
</field>
|
||||
<field name="source_move_state" position="attributes">
|
||||
<attribute
|
||||
name="attrs"
|
||||
>{'invisible': [('order_line_model', '!=', False)]}</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
# Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
U[Users] -->|HTTP| V[Views and QWeb Templates]
|
||||
V --> C[Controllers]
|
||||
V --> W[Wizards – Transient Models]
|
||||
C --> M[Models and ORM]
|
||||
W --> M
|
||||
M --> R[Reports]
|
||||
DX[Data XML] --> M
|
||||
S[Security – ACLs and Groups] -. enforces .-> M
|
||||
|
||||
subgraph Account_cutoff_accrual_order_base Module - account_cutoff_accrual_order_base
|
||||
direction LR
|
||||
M:::layer
|
||||
W:::layer
|
||||
C:::layer
|
||||
V:::layer
|
||||
R:::layer
|
||||
S:::layer
|
||||
DX:::layer
|
||||
end
|
||||
|
||||
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
|
||||
```
|
||||
|
||||
Notes
|
||||
- Views include tree/form/kanban templates and report templates.
|
||||
- Controllers provide website/portal routes when present.
|
||||
- Wizards are UI flows implemented with `models.TransientModel`.
|
||||
- Data XML loads data/demo records; Security defines groups and access.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Configuration
|
||||
|
||||
Refer to Odoo settings for account_cutoff_accrual_order_base. Configure related models, access rights, and options as needed.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Controllers
|
||||
|
||||
This module does not define custom HTTP controllers.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Dependencies
|
||||
|
||||
This addon depends on:
|
||||
|
||||
- [account_cutoff_base](../../odoo-bringout-oca-account-closing-account_cutoff_base)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# FAQ
|
||||
|
||||
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
|
||||
- Q: How to enable? A: Start server with --addon account_cutoff_accrual_order_base or install in UI.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# Install
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base"
|
||||
# or
|
||||
uv pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base"
|
||||
```
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
# Models
|
||||
|
||||
Detected core models and extensions in account_cutoff_accrual_order_base.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class order_line_cutoff_accrual_mixin
|
||||
class account_cutoff
|
||||
class account_cutoff_line
|
||||
class account_move
|
||||
```
|
||||
|
||||
Notes
|
||||
- Classes show model technical names; fields omitted for brevity.
|
||||
- Items listed under _inherit are extensions of existing models.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# Overview
|
||||
|
||||
Packaged Odoo addon: account_cutoff_accrual_order_base. Provides features documented in upstream Odoo 16 under this addon.
|
||||
|
||||
- Source: OCA/OCB 16.0, addon account_cutoff_accrual_order_base
|
||||
- License: LGPL-3
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Reports
|
||||
|
||||
This module does not define custom reports.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
# Security
|
||||
|
||||
This module does not define custom security rules or access controls beyond Odoo defaults.
|
||||
|
||||
Default Odoo security applies:
|
||||
- Base user access through standard groups
|
||||
- Model access inherited from dependencies
|
||||
- No custom row-level security rules
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Troubleshooting
|
||||
|
||||
- Ensure Python and Odoo environment matches repo guidance.
|
||||
- Check database connectivity and logs if startup fails.
|
||||
- Validate that dependent addons listed in DEPENDENCIES.md are installed.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# Usage
|
||||
|
||||
Start Odoo including this addon (from repo root):
|
||||
|
||||
```bash
|
||||
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_cutoff_accrual_order_base
|
||||
```
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Wizards
|
||||
|
||||
This module does not include UI wizards.
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
[project]
|
||||
name = "odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base"
|
||||
version = "16.0.0"
|
||||
description = "Account Cut-off Accrual Order Base - Accrued Order Base"
|
||||
authors = [
|
||||
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
|
||||
]
|
||||
dependencies = [
|
||||
"odoo-bringout-oca-account-closing-account_cutoff_base>=16.0.0",
|
||||
"requests>=2.25.1"
|
||||
]
|
||||
readme = "README.md"
|
||||
requires-python = ">= 3.11"
|
||||
classifiers = [
|
||||
"Development Status :: 5 - Production/Stable",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Topic :: Office/Business",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
homepage = "https://github.com/bringout/0"
|
||||
repository = "https://github.com/bringout/0"
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.hatch.metadata]
|
||||
allow-direct-references = true
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["account_cutoff_accrual_order_base"]
|
||||
|
||||
[tool.rye]
|
||||
managed = true
|
||||
dev-dependencies = [
|
||||
"pytest>=8.4.1",
|
||||
]
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
# Account Cut-off Accrual Order Stock Base
|
||||
|
||||
Odoo addon: account_cutoff_accrual_order_stock_base
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
This addon depends on:
|
||||
- account_cutoff_base
|
||||
- stock
|
||||
|
||||
## Manifest Information
|
||||
|
||||
- **Name**: Account Cut-off Accrual Order Stock Base
|
||||
- **Version**: 16.0.1.0.0
|
||||
- **Category**: Accounting & Finance
|
||||
- **License**: AGPL-3
|
||||
- **Installable**: True
|
||||
|
||||
## Source
|
||||
|
||||
Based on [OCA/account-closing](https://github.com/OCA/account-closing) branch 16.0, addon `account_cutoff_accrual_order_stock_base`.
|
||||
|
||||
## License
|
||||
|
||||
This package maintains the original AGPL-3 license from the upstream Odoo project.
|
||||
|
||||
## Documentation
|
||||
|
||||
- Overview: doc/OVERVIEW.md
|
||||
- Architecture: doc/ARCHITECTURE.md
|
||||
- Models: doc/MODELS.md
|
||||
- Controllers: doc/CONTROLLERS.md
|
||||
- Wizards: doc/WIZARDS.md
|
||||
- Install: doc/INSTALL.md
|
||||
- Usage: doc/USAGE.md
|
||||
- Configuration: doc/CONFIGURATION.md
|
||||
- Dependencies: doc/DEPENDENCIES.md
|
||||
- Troubleshooting: doc/TROUBLESHOOTING.md
|
||||
- FAQ: doc/FAQ.md
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
========================================
|
||||
Account Cut-off Accrual Order Stock Base
|
||||
========================================
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:791c43ae54bd1847ebd5e0f75ad43368499c624e2ec8f67b58ac0e33b1a4a60c
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_stock_base
|
||||
:alt: OCA/account-closing
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_order_stock_base
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module extends the functionality of account_cutoff_base
|
||||
to define prepaid accounts for prepaid goods in the scope of accrued revenue
|
||||
and expense.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-closing/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_order_stock_base%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* BCIM
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
|
||||
Maintainers
|
||||
~~~~~~~~~~~
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.
|
||||
|
||||
.. |maintainer-jbaudoux| image:: https://github.com/jbaudoux.png?size=40px
|
||||
:target: https://github.com/jbaudoux
|
||||
:alt: jbaudoux
|
||||
|
||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-jbaudoux|
|
||||
|
||||
This module is part of the `OCA/account-closing <https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_stock_base>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import models
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
|
||||
{
|
||||
"name": "Account Cut-off Accrual Order Stock Base",
|
||||
"version": "16.0.1.0.0",
|
||||
"category": "Accounting & Finance",
|
||||
"license": "AGPL-3",
|
||||
"summary": "Accrued Order Stock Base",
|
||||
"author": "BCIM, Odoo Community Association (OCA)",
|
||||
"maintainers": ["jbaudoux"],
|
||||
"website": "https://github.com/OCA/account-closing",
|
||||
"depends": ["account_cutoff_base", "stock"],
|
||||
"data": [
|
||||
"views/account_cutoff_view.xml",
|
||||
],
|
||||
"installable": True,
|
||||
"application": False,
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_order_stock_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_stock_base.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
||||
msgid ""
|
||||
"Account for accrual of prepaid stock expenses. For instance, goods invoiced "
|
||||
"and not yet received."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
||||
msgid "Cut-off Prepaid Stock Account"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_order_stock_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_stock_base.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Računovodstveno presjecanje"
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
||||
msgid ""
|
||||
"Account for accrual of prepaid stock expenses. For instance, goods invoiced "
|
||||
"and not yet received."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
||||
msgid "Cut-off Prepaid Stock Account"
|
||||
msgstr "Račun za prepaid zalihe presjecanja"
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_order_stock_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0+e\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-10-26 12:01+0000\n"
|
||||
"PO-Revision-Date: 2023-10-26 12:01+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_stock_base.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Provision"
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
||||
msgid ""
|
||||
"Account for accrual of prepaid stock expenses. For instance, goods invoiced "
|
||||
"and not yet received."
|
||||
msgstr ""
|
||||
"Compte pour les provisions sur charges de type marchandise constatées "
|
||||
"d'avance. Par exemple, les marchandises facturées et pas encore reçues."
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
||||
msgid "Cut-off Prepaid Stock Account"
|
||||
msgstr "Compte de provision pour marchandise prépayée"
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_order_stock_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-10-21 12:06+0000\n"
|
||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model,name:account_cutoff_accrual_order_stock_base.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Scritture di fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
||||
msgid ""
|
||||
"Account for accrual of prepaid stock expenses. For instance, goods invoiced "
|
||||
"and not yet received."
|
||||
msgstr ""
|
||||
"Conto ratei costi giacenze prepagati. Esempio, merce fatturata non ancora "
|
||||
"ricevuta."
|
||||
|
||||
#. module: account_cutoff_accrual_order_stock_base
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
||||
msgid "Cut-off Prepaid Stock Account"
|
||||
msgstr "Conto scritture di chiusura giacenze prepagate"
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import account_cutoff
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
from odoo import Command, api, fields, models
|
||||
from odoo.tools import float_is_zero
|
||||
|
||||
|
||||
class AccountCutoff(models.Model):
|
||||
_inherit = "account.cutoff"
|
||||
|
||||
cutoff_account_prepaid_stock_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
string="Cut-off Prepaid Stock Account",
|
||||
domain="[('deprecated', '=', False)]",
|
||||
states={"done": [("readonly", True)]},
|
||||
check_company=True,
|
||||
tracking=True,
|
||||
default=lambda self: self._default_cutoff_account_prepaid_stock_id(),
|
||||
help="Account for accrual of prepaid stock expenses. "
|
||||
"For instance, goods invoiced and not yet received.",
|
||||
)
|
||||
|
||||
@api.model
|
||||
def _default_cutoff_account_prepaid_stock_id(self):
|
||||
cutoff_type = self.env.context.get("default_cutoff_type")
|
||||
company = self.env.company
|
||||
if cutoff_type == "accrued_expense":
|
||||
account_id = company.default_prepaid_expense_account_id.id or False
|
||||
elif cutoff_type == "accrued_revenue":
|
||||
account_id = company.default_prepaid_revenue_account_id.id or False
|
||||
else:
|
||||
account_id = False
|
||||
return account_id
|
||||
|
||||
def _prepare_counterpart_moves(
|
||||
self, to_provision, amount_total_pos, amount_total_neg
|
||||
):
|
||||
if not self.cutoff_account_prepaid_stock_id:
|
||||
return super()._prepare_counterpart_moves(
|
||||
to_provision, amount_total_pos, amount_total_neg
|
||||
)
|
||||
if self.cutoff_type == "accrued_revenue":
|
||||
prepaid_amount = amount_total_neg
|
||||
amount = amount_total_pos
|
||||
elif self.cutoff_type == "accrued_expense":
|
||||
prepaid_amount = amount_total_pos
|
||||
amount = amount_total_neg
|
||||
else:
|
||||
prepaid_amount = 0
|
||||
amount = 0
|
||||
company_currency = self.company_id.currency_id
|
||||
cur_rprec = company_currency.rounding
|
||||
movelines_to_create = super()._prepare_counterpart_moves(
|
||||
to_provision, 0, amount
|
||||
)
|
||||
if not float_is_zero(prepaid_amount, precision_rounding=cur_rprec):
|
||||
movelines_to_create.append(
|
||||
Command.create(
|
||||
{
|
||||
"account_id": self.cutoff_account_prepaid_stock_id.id,
|
||||
"debit": prepaid_amount,
|
||||
"credit": 0,
|
||||
},
|
||||
)
|
||||
)
|
||||
return movelines_to_create
|
||||
|
|
@ -0,0 +1 @@
|
|||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
This module extends the functionality of account_cutoff_base
|
||||
to define prepaid accounts for prepaid goods in the scope of accrued revenue
|
||||
and expense.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
|
|
@ -0,0 +1,425 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>Account Cut-off Accrual Order Stock Base</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="account-cut-off-accrual-order-stock-base">
|
||||
<h1 class="title">Account Cut-off Accrual Order Stock Base</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:791c43ae54bd1847ebd5e0f75ad43368499c624e2ec8f67b58ac0e33b1a4a60c
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_stock_base"><img alt="OCA/account-closing" src="https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_order_stock_base"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module extends the functionality of account_cutoff_base
|
||||
to define prepaid accounts for prepaid goods in the scope of accrued revenue
|
||||
and expense.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-5">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-closing/issues">GitHub Issues</a>.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_order_stock_base%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>BCIM</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Jacques-Etienne Baudoux (BCIM) <<a class="reference external" href="mailto:je@bcim.be">je@bcim.be</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.</p>
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
||||
<p><a class="reference external image-reference" href="https://github.com/jbaudoux"><img alt="jbaudoux" src="https://github.com/jbaudoux.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_stock_base">OCA/account-closing</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="account_cutoff_form" model="ir.ui.view">
|
||||
<field name="model">account.cutoff</field>
|
||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="cutoff_account_id" position="after">
|
||||
<field
|
||||
name="cutoff_account_prepaid_stock_id"
|
||||
required="1"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
# Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
U[Users] -->|HTTP| V[Views and QWeb Templates]
|
||||
V --> C[Controllers]
|
||||
V --> W[Wizards – Transient Models]
|
||||
C --> M[Models and ORM]
|
||||
W --> M
|
||||
M --> R[Reports]
|
||||
DX[Data XML] --> M
|
||||
S[Security – ACLs and Groups] -. enforces .-> M
|
||||
|
||||
subgraph Account_cutoff_accrual_order_stock_base Module - account_cutoff_accrual_order_stock_base
|
||||
direction LR
|
||||
M:::layer
|
||||
W:::layer
|
||||
C:::layer
|
||||
V:::layer
|
||||
R:::layer
|
||||
S:::layer
|
||||
DX:::layer
|
||||
end
|
||||
|
||||
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
|
||||
```
|
||||
|
||||
Notes
|
||||
- Views include tree/form/kanban templates and report templates.
|
||||
- Controllers provide website/portal routes when present.
|
||||
- Wizards are UI flows implemented with `models.TransientModel`.
|
||||
- Data XML loads data/demo records; Security defines groups and access.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Configuration
|
||||
|
||||
Refer to Odoo settings for account_cutoff_accrual_order_stock_base. Configure related models, access rights, and options as needed.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Controllers
|
||||
|
||||
This module does not define custom HTTP controllers.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# Dependencies
|
||||
|
||||
This addon depends on:
|
||||
|
||||
- [account_cutoff_base](../../odoo-bringout-oca-account-closing-account_cutoff_base)
|
||||
- [stock](../../odoo-bringout-oca-ocb-stock)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# FAQ
|
||||
|
||||
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
|
||||
- Q: How to enable? A: Start server with --addon account_cutoff_accrual_order_stock_base or install in UI.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# Install
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base"
|
||||
# or
|
||||
uv pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base"
|
||||
```
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
# Models
|
||||
|
||||
Detected core models and extensions in account_cutoff_accrual_order_stock_base.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class account_cutoff
|
||||
```
|
||||
|
||||
Notes
|
||||
- Classes show model technical names; fields omitted for brevity.
|
||||
- Items listed under _inherit are extensions of existing models.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# Overview
|
||||
|
||||
Packaged Odoo addon: account_cutoff_accrual_order_stock_base. Provides features documented in upstream Odoo 16 under this addon.
|
||||
|
||||
- Source: OCA/OCB 16.0, addon account_cutoff_accrual_order_stock_base
|
||||
- License: LGPL-3
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Reports
|
||||
|
||||
This module does not define custom reports.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
# Security
|
||||
|
||||
This module does not define custom security rules or access controls beyond Odoo defaults.
|
||||
|
||||
Default Odoo security applies:
|
||||
- Base user access through standard groups
|
||||
- Model access inherited from dependencies
|
||||
- No custom row-level security rules
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Troubleshooting
|
||||
|
||||
- Ensure Python and Odoo environment matches repo guidance.
|
||||
- Check database connectivity and logs if startup fails.
|
||||
- Validate that dependent addons listed in DEPENDENCIES.md are installed.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# Usage
|
||||
|
||||
Start Odoo including this addon (from repo root):
|
||||
|
||||
```bash
|
||||
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_cutoff_accrual_order_stock_base
|
||||
```
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Wizards
|
||||
|
||||
This module does not include UI wizards.
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
[project]
|
||||
name = "odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base"
|
||||
version = "16.0.0"
|
||||
description = "Account Cut-off Accrual Order Stock Base - Accrued Order Stock Base"
|
||||
authors = [
|
||||
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
|
||||
]
|
||||
dependencies = [
|
||||
"odoo-bringout-oca-account-closing-account_cutoff_base>=16.0.0",
|
||||
"odoo-bringout-oca-ocb-stock>=16.0.0",
|
||||
"requests>=2.25.1"
|
||||
]
|
||||
readme = "README.md"
|
||||
requires-python = ">= 3.11"
|
||||
classifiers = [
|
||||
"Development Status :: 5 - Production/Stable",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Topic :: Office/Business",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
homepage = "https://github.com/bringout/0"
|
||||
repository = "https://github.com/bringout/0"
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.hatch.metadata]
|
||||
allow-direct-references = true
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["account_cutoff_accrual_order_stock_base"]
|
||||
|
||||
[tool.rye]
|
||||
managed = true
|
||||
dev-dependencies = [
|
||||
"pytest>=8.4.1",
|
||||
]
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# Account Cut-off Accrual Purchase
|
||||
|
||||
Odoo addon: account_cutoff_accrual_purchase
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_purchase
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
This addon depends on:
|
||||
- account_cutoff_accrual_order_base
|
||||
- purchase
|
||||
- purchase_force_invoiced
|
||||
|
||||
## Manifest Information
|
||||
|
||||
- **Name**: Account Cut-off Accrual Purchase
|
||||
- **Version**: 16.0.1.0.0
|
||||
- **Category**: Accounting & Finance
|
||||
- **License**: AGPL-3
|
||||
- **Installable**: True
|
||||
|
||||
## Source
|
||||
|
||||
Based on [OCA/account-closing](https://github.com/OCA/account-closing) branch 16.0, addon `account_cutoff_accrual_purchase`.
|
||||
|
||||
## License
|
||||
|
||||
This package maintains the original AGPL-3 license from the upstream Odoo project.
|
||||
|
||||
## Documentation
|
||||
|
||||
- Overview: doc/OVERVIEW.md
|
||||
- Architecture: doc/ARCHITECTURE.md
|
||||
- Models: doc/MODELS.md
|
||||
- Controllers: doc/CONTROLLERS.md
|
||||
- Wizards: doc/WIZARDS.md
|
||||
- Install: doc/INSTALL.md
|
||||
- Usage: doc/USAGE.md
|
||||
- Configuration: doc/CONFIGURATION.md
|
||||
- Dependencies: doc/DEPENDENCIES.md
|
||||
- Troubleshooting: doc/TROUBLESHOOTING.md
|
||||
- FAQ: doc/FAQ.md
|
||||
|
|
@ -0,0 +1,153 @@
|
|||
================================
|
||||
Account Cut-off Accrual Purchase
|
||||
================================
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:a0536b91a6e1c6035a5c0a21557f7bf3d7c392b59c460a6ab9ed1e40d9f6180c
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_purchase
|
||||
:alt: OCA/account-closing
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_purchase
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module extends the functionality of account_cutoff_accrual_order_base
|
||||
to allow the computation of expense cutoffs on purchase orders.
|
||||
|
||||
The accrual is computed by comparing on the order, the quantity
|
||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
||||
invoices have occurred after the cutoff date, those quantities can be affected
|
||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
||||
processing few lines.
|
||||
|
||||
For PO, you can make the difference between:
|
||||
* invoice to receive (received qty > invoiced qty)
|
||||
* goods to receive (prepayment) (received qty < invoiced qty)
|
||||
|
||||
If you expect a refund, you can make it in draft. In standard, this update
|
||||
the PO and the quantity will not be accrued as goods to receive. You can accrue
|
||||
the draft credit note as "credit notes to receive".
|
||||
|
||||
Orders forced in status invoiced won't have cutoff entries.
|
||||
For instance, if you know you will never receive the missing invoiced goods,
|
||||
you can force it as invoiced.
|
||||
|
||||
Once the cutoff lines have been generated but the accounting entries are not yet
|
||||
created, you are still able to create or modify invoices before the accounting
|
||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
||||
situation.
|
||||
|
||||
Once the cutoff accounting entries are generated you cannot create or modify
|
||||
invoices before the accounting cutoff date.
|
||||
Nevertheless, you can still reset to draft a supplier invoice but you won't be
|
||||
able to modify any amount. You are then supposed to re-validate the invoice.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To configure this module, you need to:
|
||||
|
||||
#. Go to the accounting settings to select the journals and accounts used for
|
||||
the cutoff.
|
||||
#. Analytic accounting needs to be enable in Accounting - Settings.
|
||||
#. If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
||||
each type of taxes an accrued tax account.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To use this module, you need to:
|
||||
|
||||
#. Go to Accounting - Cut-offs to configure and generate the cutoffs
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
* Purchase Order with quantity received: 0, quantity invoiced: 0
|
||||
This will not make an cutoff entry
|
||||
|
||||
* Purchase Order with quantity received: 10, quantity invoiced: 0
|
||||
This will make an cutoff entry with invoice to receive: 10
|
||||
|
||||
* Purchase Order with quantity received: 0, quantity invoiced: 10
|
||||
This will make an cutoff entry with goods to receive: 10
|
||||
|
||||
* Purchase Order with quantity received: 10, quantity invoiced: 0
|
||||
This will make an cutoff entry with invoice to receive: 10
|
||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
||||
The cutoff entry is updated in the existing cut-off
|
||||
|
||||
* Purchase Order with quantity received: 0, quantity invoiced: 0
|
||||
This will not make an cutoff entry
|
||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
||||
An cutoff entry is added in the existing cut-off
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-closing/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_purchase%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* BCIM
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
|
||||
Maintainers
|
||||
~~~~~~~~~~~
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.
|
||||
|
||||
.. |maintainer-jbaudoux| image:: https://github.com/jbaudoux.png?size=40px
|
||||
:target: https://github.com/jbaudoux
|
||||
:alt: jbaudoux
|
||||
|
||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-jbaudoux|
|
||||
|
||||
This module is part of the `OCA/account-closing <https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_purchase>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import models
|
||||
from .hooks import post_init_hook
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
{
|
||||
"name": "Account Cut-off Accrual Purchase",
|
||||
"version": "16.0.1.0.0",
|
||||
"category": "Accounting & Finance",
|
||||
"license": "AGPL-3",
|
||||
"summary": "Accrued Expense on Purchase Order",
|
||||
"author": "BCIM, Odoo Community Association (OCA)",
|
||||
"maintainers": ["jbaudoux"],
|
||||
"website": "https://github.com/OCA/account-closing",
|
||||
"depends": [
|
||||
"account_cutoff_accrual_order_base",
|
||||
"purchase",
|
||||
"purchase_force_invoiced",
|
||||
],
|
||||
"data": [
|
||||
"views/account_cutoff.xml",
|
||||
"views/account_cutoff_line.xml",
|
||||
"data/ir_cron.xml",
|
||||
],
|
||||
"post_init_hook": "post_init_hook",
|
||||
"installable": True,
|
||||
"application": True,
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record forcecreate="True" id="ir_cron_cutoff" model="ir.cron">
|
||||
<field name="name">Make cutoff at end of period - purchase order lines</field>
|
||||
<field eval="True" name="active" />
|
||||
<field name="model_id" ref="account_cutoff_base.model_account_cutoff" />
|
||||
<field name="state">code</field>
|
||||
<field
|
||||
name="code"
|
||||
>model._cron_cutoff("accrued_expense", "purchase.order.line")</field>
|
||||
<field name="user_id" ref="base.user_root" />
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">months</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall" />
|
||||
<field name="nextcall" eval="(DateTime.now()).strftime('%Y-%m-01 00:00:00')" />
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
# Copyright 2023 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
|
||||
def post_init_hook(cr, registry):
|
||||
cr.execute(
|
||||
"""
|
||||
UPDATE purchase_order_line
|
||||
SET is_cutoff_accrual_excluded = TRUE
|
||||
WHERE order_id IN
|
||||
( SELECT id FROM purchase_order WHERE force_invoiced )
|
||||
"""
|
||||
)
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_purchase
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff_line
|
||||
msgid "Account Cut-off Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__account_cutoff_line_ids
|
||||
msgid "Account Cutoff Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.actions.act_window,name:account_cutoff_accrual_purchase.account_accrual_action
|
||||
#: model:ir.ui.menu,name:account_cutoff_accrual_purchase.account_accrual_menu
|
||||
msgid "Accrued Expense on Purchase Orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
||||
msgid "Click to start preparing a new expense accrual."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__is_cutoff_accrual_excluded
|
||||
msgid "Do not generate cut-off entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_move
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.actions.server,name:account_cutoff_accrual_purchase.ir_cron_cutoff_ir_actions_server
|
||||
#: model:ir.cron,cron_name:account_cutoff_accrual_purchase.ir_cron_cutoff
|
||||
msgid "Make cutoff at end of period - purchase order lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff__order_line_model
|
||||
msgid "Order Line Model"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_order_id
|
||||
msgid "Order Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order
|
||||
msgid "Purchase Order"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order_line
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_line_id
|
||||
msgid "Purchase Order Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields.selection,name:account_cutoff_accrual_purchase.selection__account_cutoff__order_line_model__purchase_order_line
|
||||
msgid "Purchase Orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
||||
msgid ""
|
||||
"This view can be used by accountants in order to collect information about "
|
||||
"accrued expenses. It then allows to generate the corresponding cut-off "
|
||||
"journal entry in one click."
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_purchase
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Računovodstveno presjecanje"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff_line
|
||||
msgid "Account Cut-off Line"
|
||||
msgstr "Linija računovodstvenog presjecanja"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__account_cutoff_line_ids
|
||||
msgid "Account Cutoff Lines"
|
||||
msgstr "Linije računovodstvenog presjecanja"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.actions.act_window,name:account_cutoff_accrual_purchase.account_accrual_action
|
||||
#: model:ir.ui.menu,name:account_cutoff_accrual_purchase.account_accrual_menu
|
||||
msgid "Accrued Expense on Purchase Orders"
|
||||
msgstr "Akruelni trošak na narudžbama nabavke"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
||||
msgid "Click to start preparing a new expense accrual."
|
||||
msgstr "Kliknite da počnete pripremu novog akruala troška."
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__is_cutoff_accrual_excluded
|
||||
msgid "Do not generate cut-off entries"
|
||||
msgstr "Ne generiši zapise presjecanja"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_move
|
||||
msgid "Journal Entry"
|
||||
msgstr "Žurnal"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.actions.server,name:account_cutoff_accrual_purchase.ir_cron_cutoff_ir_actions_server
|
||||
#: model:ir.cron,cron_name:account_cutoff_accrual_purchase.ir_cron_cutoff
|
||||
msgid "Make cutoff at end of period - purchase order lines"
|
||||
msgstr "Napravi presjecanje na kraju perioda - linije narudžbi nabavke"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff__order_line_model
|
||||
msgid "Order Line Model"
|
||||
msgstr "Model linije narudžbe"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_order_id
|
||||
msgid "Order Reference"
|
||||
msgstr "Referenca narudžbe"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order
|
||||
msgid "Purchase Order"
|
||||
msgstr "Nalog za nabavu"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order_line
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_line_id
|
||||
msgid "Purchase Order Line"
|
||||
msgstr "Stavka naloga za nabavu"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields.selection,name:account_cutoff_accrual_purchase.selection__account_cutoff__order_line_model__purchase_order_line
|
||||
msgid "Purchase Orders"
|
||||
msgstr "Nalozi u nabavi"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
||||
msgid ""
|
||||
"This view can be used by accountants in order to collect information about "
|
||||
"accrued expenses. It then allows to generate the corresponding cut-off "
|
||||
"journal entry in one click."
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_purchase
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0+e\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-10-26 11:44+0000\n"
|
||||
"PO-Revision-Date: 2023-10-26 11:44+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Provision"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff_line
|
||||
msgid "Account Cut-off Line"
|
||||
msgstr "Ligne de provision"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__account_cutoff_line_ids
|
||||
msgid "Account Cutoff Lines"
|
||||
msgstr "Lignes de provision"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.actions.act_window,name:account_cutoff_accrual_purchase.account_accrual_action
|
||||
#: model:ir.ui.menu,name:account_cutoff_accrual_purchase.account_accrual_menu
|
||||
msgid "Accrued Expense on Purchase Orders"
|
||||
msgstr "Provisions sur Achats"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
||||
msgid "Click to start preparing a new expense accrual."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__is_cutoff_accrual_excluded
|
||||
msgid "Do not generate cut-off entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_move
|
||||
msgid "Journal Entry"
|
||||
msgstr "Pièce comptable"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.actions.server,name:account_cutoff_accrual_purchase.ir_cron_cutoff_ir_actions_server
|
||||
#: model:ir.cron,cron_name:account_cutoff_accrual_purchase.ir_cron_cutoff
|
||||
msgid "Make cutoff at end of period - purchase order lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff__order_line_model
|
||||
msgid "Order Line Model"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_order_id
|
||||
msgid "Order Reference"
|
||||
msgstr "Commande"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order
|
||||
#, fuzzy
|
||||
msgid "Purchase Order"
|
||||
msgstr "Achats"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order_line
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_line_id
|
||||
msgid "Purchase Order Line"
|
||||
msgstr "Ligne de commande d'achat"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields.selection,name:account_cutoff_accrual_purchase.selection__account_cutoff__order_line_model__purchase_order_line
|
||||
msgid "Purchase Orders"
|
||||
msgstr "Achats"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
||||
msgid ""
|
||||
"This view can be used by accountants in order to collect information about "
|
||||
"accrued expenses. It then allows to generate the corresponding cut-off "
|
||||
"journal entry in one click."
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_cutoff_accrual_purchase
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-10-21 12:06+0000\n"
|
||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff
|
||||
msgid "Account Cut-off"
|
||||
msgstr "Scritture di fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff_line
|
||||
msgid "Account Cut-off Line"
|
||||
msgstr "Riga scritture fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__account_cutoff_line_ids
|
||||
msgid "Account Cutoff Lines"
|
||||
msgstr "Righe scritture fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.actions.act_window,name:account_cutoff_accrual_purchase.account_accrual_action
|
||||
#: model:ir.ui.menu,name:account_cutoff_accrual_purchase.account_accrual_menu
|
||||
msgid "Accrued Expense on Purchase Orders"
|
||||
msgstr "Rateo passivo degli ordini di acquisto"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
||||
msgid "Click to start preparing a new expense accrual."
|
||||
msgstr "Fare clic per iniziare a preparare un nuovo rateo passivo."
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__is_cutoff_accrual_excluded
|
||||
msgid "Do not generate cut-off entries"
|
||||
msgstr "Non generare registrazioni di fine periodo"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_move
|
||||
msgid "Journal Entry"
|
||||
msgstr "Registrazione contabile"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.actions.server,name:account_cutoff_accrual_purchase.ir_cron_cutoff_ir_actions_server
|
||||
#: model:ir.cron,cron_name:account_cutoff_accrual_purchase.ir_cron_cutoff
|
||||
msgid "Make cutoff at end of period - purchase order lines"
|
||||
msgstr "Crea registrazioni alla fine del periodo - righe ordine di acquisto"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff__order_line_model
|
||||
msgid "Order Line Model"
|
||||
msgstr "Modello riga ordine"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_order_id
|
||||
msgid "Order Reference"
|
||||
msgstr "Riferimento ordine"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order
|
||||
msgid "Purchase Order"
|
||||
msgstr "Ordine di acquisto"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order_line
|
||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_line_id
|
||||
msgid "Purchase Order Line"
|
||||
msgstr "Riga ordine di acquisto"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model:ir.model.fields.selection,name:account_cutoff_accrual_purchase.selection__account_cutoff__order_line_model__purchase_order_line
|
||||
msgid "Purchase Orders"
|
||||
msgstr "Ordini di acquisto"
|
||||
|
||||
#. module: account_cutoff_accrual_purchase
|
||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
||||
msgid ""
|
||||
"This view can be used by accountants in order to collect information about "
|
||||
"accrued expenses. It then allows to generate the corresponding cut-off "
|
||||
"journal entry in one click."
|
||||
msgstr ""
|
||||
"Questa vista può essere usata dai contabili per raccogliere informazioni sui "
|
||||
"ratei passivi. Permette di generare la relativa registrazione di "
|
||||
"ripartizione con un clic."
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from . import account_cutoff
|
||||
from . import account_cutoff_line
|
||||
from . import purchase_order
|
||||
from . import purchase_order_line
|
||||
from . import account_move
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class AccountCutoff(models.Model):
|
||||
_inherit = "account.cutoff"
|
||||
|
||||
order_line_model = fields.Selection(
|
||||
selection_add=[("purchase.order.line", "Purchase Orders")]
|
||||
)
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class AccountCutoffLine(models.Model):
|
||||
_inherit = "account.cutoff.line"
|
||||
|
||||
purchase_line_id = fields.Many2one(
|
||||
comodel_name="purchase.order.line", string="Purchase Order Line", readonly=True
|
||||
)
|
||||
purchase_order_id = fields.Many2one(related="purchase_line_id.order_id")
|
||||
|
||||
def _get_order_line(self):
|
||||
if self.purchase_line_id:
|
||||
return self.purchase_line_id
|
||||
return super()._get_order_line()
|
||||
|
||||
@api.depends("purchase_line_id")
|
||||
def _compute_invoice_lines(self):
|
||||
for rec in self:
|
||||
if rec.purchase_line_id:
|
||||
rec.invoice_line_ids = rec.purchase_line_id.invoice_lines
|
||||
super()._compute_invoice_lines()
|
||||
return
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
class AccountMove(models.Model):
|
||||
_inherit = "account.move"
|
||||
|
||||
def _get_cutoff_accrual_order_lines(self):
|
||||
"""Return a list of order lines to process"""
|
||||
res = super()._get_cutoff_accrual_order_lines()
|
||||
if self.move_type in ("in_invoice", "in_refund"):
|
||||
res.append(self.invoice_line_ids.purchase_line_id)
|
||||
return res
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
# Copyright 2023 Jacques-Etienne Baudoux (BCIM sprl) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
class PurchaseOrder(models.Model):
|
||||
_inherit = "purchase.order"
|
||||
|
||||
def write(self, vals):
|
||||
res = super().write(vals)
|
||||
if "force_invoiced" in vals:
|
||||
self.order_line.is_cutoff_accrual_excluded = vals["force_invoiced"]
|
||||
return res
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM sprl) <je@bcim.be>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
import logging
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class PurchaseOrderLine(models.Model):
|
||||
_name = "purchase.order.line"
|
||||
_inherit = ["purchase.order.line", "order.line.cutoff.accrual.mixin"]
|
||||
|
||||
account_cutoff_line_ids = fields.One2many(
|
||||
"account.cutoff.line",
|
||||
"purchase_line_id",
|
||||
string="Account Cutoff Lines",
|
||||
readonly=True,
|
||||
)
|
||||
|
||||
is_cutoff_accrual_excluded = fields.Boolean(
|
||||
compute="_compute_is_cutoff_accrual_excluded",
|
||||
store=True,
|
||||
)
|
||||
|
||||
@api.depends("order_id.force_invoiced")
|
||||
def _compute_is_cutoff_accrual_excluded(self):
|
||||
for rec in self:
|
||||
rec.is_cutoff_accrual_excluded = rec.order_id.force_invoiced
|
||||
|
||||
def _get_cutoff_accrual_lines_domain(self, cutoff):
|
||||
domain = super()._get_cutoff_accrual_lines_domain(cutoff)
|
||||
domain.append(("order_id.state", "in", ("purchase", "done")))
|
||||
domain.append(("order_id.invoice_status", "!=", "invoiced"))
|
||||
return domain
|
||||
|
||||
@api.model
|
||||
def _get_cutoff_accrual_lines_query(self, cutoff):
|
||||
query = super()._get_cutoff_accrual_lines_query(cutoff)
|
||||
self.flush_model(["display_type", "qty_received", "qty_invoiced"])
|
||||
query.add_where(
|
||||
f'"{self._table}".display_type IS NULL AND '
|
||||
f'"{self._table}".qty_received != "{self._table}".qty_invoiced'
|
||||
)
|
||||
return query
|
||||
|
||||
def _prepare_cutoff_accrual_line(self, cutoff):
|
||||
res = super()._prepare_cutoff_accrual_line(cutoff)
|
||||
if not res:
|
||||
return
|
||||
res["purchase_line_id"] = self.id
|
||||
return res
|
||||
|
||||
def _get_cutoff_accrual_lines_invoiced_after(self, cutoff):
|
||||
cutoff_nextday = cutoff._nextday_start_dt()
|
||||
# Take all invoices impacting the cutoff
|
||||
# FIXME: what about ("move_id.payment_state", "=", "invoicing_legacy")
|
||||
domain = [
|
||||
("purchase_line_id.is_cutoff_accrual_excluded", "!=", True),
|
||||
("move_id.move_type", "in", ("in_invoice", "in_refund")),
|
||||
("purchase_line_id", "!=", False),
|
||||
"|",
|
||||
("move_id.state", "=", "draft"),
|
||||
"&",
|
||||
("move_id.state", "=", "posted"),
|
||||
("move_id.date", ">=", cutoff_nextday),
|
||||
]
|
||||
invoice_line_after = self.env["account.move.line"].search(domain, order="id")
|
||||
_logger.debug(
|
||||
"Purchase Invoice Lines done after cutoff: %s" % len(invoice_line_after)
|
||||
)
|
||||
if not invoice_line_after:
|
||||
return self.env["purchase.order.line"]
|
||||
# In SQL to reduce memory usage as we could process large dataset
|
||||
self.env.cr.execute(
|
||||
"""
|
||||
SELECT order_id
|
||||
FROM purchase_order_line
|
||||
WHERE id in (
|
||||
SELECT purchase_line_id
|
||||
FROM account_move_line
|
||||
WHERE id in %s
|
||||
)
|
||||
""",
|
||||
(tuple(invoice_line_after.ids),),
|
||||
)
|
||||
purchase_ids = [x[0] for x in self.env.cr.fetchall()]
|
||||
lines = self.env["purchase.order.line"].search(
|
||||
[("order_id", "in", purchase_ids)], order="id"
|
||||
)
|
||||
return lines
|
||||
|
||||
def _get_cutoff_accrual_delivered_service_quantity(self, cutoff):
|
||||
# By default, no cutoff on purchase. Set received as invoiced.
|
||||
self.ensure_one()
|
||||
return self._get_cutoff_accrual_invoiced_quantity(cutoff)
|
||||
|
||||
def _get_cutoff_accrual_delivered_stock_quantity(self, cutoff):
|
||||
# By default, no cutoff on purchase. Set received as invoiced.
|
||||
self.ensure_one()
|
||||
return self._get_cutoff_accrual_invoiced_quantity(cutoff)
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
To configure this module, you need to:
|
||||
|
||||
#. Go to the accounting settings to select the journals and accounts used for
|
||||
the cutoff.
|
||||
#. Analytic accounting needs to be enable in Accounting - Settings.
|
||||
#. If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
||||
each type of taxes an accrued tax account.
|
||||
|
|
@ -0,0 +1 @@
|
|||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
This module extends the functionality of account_cutoff_accrual_order_base
|
||||
to allow the computation of expense cutoffs on purchase orders.
|
||||
|
||||
The accrual is computed by comparing on the order, the quantity
|
||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
||||
invoices have occurred after the cutoff date, those quantities can be affected
|
||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
||||
processing few lines.
|
||||
|
||||
For PO, you can make the difference between:
|
||||
* invoice to receive (received qty > invoiced qty)
|
||||
* goods to receive (prepayment) (received qty < invoiced qty)
|
||||
|
||||
If you expect a refund, you can make it in draft. In standard, this update
|
||||
the PO and the quantity will not be accrued as goods to receive. You can accrue
|
||||
the draft credit note as "credit notes to receive".
|
||||
|
||||
Orders forced in status invoiced won't have cutoff entries.
|
||||
For instance, if you know you will never receive the missing invoiced goods,
|
||||
you can force it as invoiced.
|
||||
|
||||
Once the cutoff lines have been generated but the accounting entries are not yet
|
||||
created, you are still able to create or modify invoices before the accounting
|
||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
||||
situation.
|
||||
|
||||
Once the cutoff accounting entries are generated you cannot create or modify
|
||||
invoices before the accounting cutoff date.
|
||||
Nevertheless, you can still reset to draft a supplier invoice but you won't be
|
||||
able to modify any amount. You are then supposed to re-validate the invoice.
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
To use this module, you need to:
|
||||
|
||||
#. Go to Accounting - Cut-offs to configure and generate the cutoffs
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
* Purchase Order with quantity received: 0, quantity invoiced: 0
|
||||
This will not make an cutoff entry
|
||||
|
||||
* Purchase Order with quantity received: 10, quantity invoiced: 0
|
||||
This will make an cutoff entry with invoice to receive: 10
|
||||
|
||||
* Purchase Order with quantity received: 0, quantity invoiced: 10
|
||||
This will make an cutoff entry with goods to receive: 10
|
||||
|
||||
* Purchase Order with quantity received: 10, quantity invoiced: 0
|
||||
This will make an cutoff entry with invoice to receive: 10
|
||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
||||
The cutoff entry is updated in the existing cut-off
|
||||
|
||||
* Purchase Order with quantity received: 0, quantity invoiced: 0
|
||||
This will not make an cutoff entry
|
||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
||||
An cutoff entry is added in the existing cut-off
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
|
|
@ -0,0 +1,486 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>Account Cut-off Accrual Purchase</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="account-cut-off-accrual-purchase">
|
||||
<h1 class="title">Account Cut-off Accrual Purchase</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:a0536b91a6e1c6035a5c0a21557f7bf3d7c392b59c460a6ab9ed1e40d9f6180c
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_purchase"><img alt="OCA/account-closing" src="https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_purchase"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module extends the functionality of account_cutoff_accrual_order_base
|
||||
to allow the computation of expense cutoffs on purchase orders.</p>
|
||||
<p>The accrual is computed by comparing on the order, the quantity
|
||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
||||
invoices have occurred after the cutoff date, those quantities can be affected
|
||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
||||
processing few lines.</p>
|
||||
<p>For PO, you can make the difference between:
|
||||
* invoice to receive (received qty > invoiced qty)
|
||||
* goods to receive (prepayment) (received qty < invoiced qty)</p>
|
||||
<p>If you expect a refund, you can make it in draft. In standard, this update
|
||||
the PO and the quantity will not be accrued as goods to receive. You can accrue
|
||||
the draft credit note as “credit notes to receive”.</p>
|
||||
<p>Orders forced in status invoiced won’t have cutoff entries.
|
||||
For instance, if you know you will never receive the missing invoiced goods,
|
||||
you can force it as invoiced.</p>
|
||||
<p>Once the cutoff lines have been generated but the accounting entries are not yet
|
||||
created, you are still able to create or modify invoices before the accounting
|
||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
||||
situation.</p>
|
||||
<p>Once the cutoff accounting entries are generated you cannot create or modify
|
||||
invoices before the accounting cutoff date.
|
||||
Nevertheless, you can still reset to draft a supplier invoice but you won’t be
|
||||
able to modify any amount. You are then supposed to re-validate the invoice.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
||||
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
|
||||
<li><a class="reference internal" href="#examples" id="toc-entry-3">Examples</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-6">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-7">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-8">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="configuration">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
|
||||
<p>To configure this module, you need to:</p>
|
||||
<ol class="arabic simple">
|
||||
<li>Go to the accounting settings to select the journals and accounts used for
|
||||
the cutoff.</li>
|
||||
<li>Analytic accounting needs to be enable in Accounting - Settings.</li>
|
||||
<li>If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
||||
each type of taxes an accrued tax account.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
|
||||
<p>To use this module, you need to:</p>
|
||||
<ol class="arabic simple">
|
||||
<li>Go to Accounting - Cut-offs to configure and generate the cutoffs</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="section" id="examples">
|
||||
<h1><a class="toc-backref" href="#toc-entry-3">Examples</a></h1>
|
||||
<ul class="simple">
|
||||
<li>Purchase Order with quantity received: 0, quantity invoiced: 0
|
||||
This will not make an cutoff entry</li>
|
||||
<li>Purchase Order with quantity received: 10, quantity invoiced: 0
|
||||
This will make an cutoff entry with invoice to receive: 10</li>
|
||||
<li>Purchase Order with quantity received: 0, quantity invoiced: 10
|
||||
This will make an cutoff entry with goods to receive: 10</li>
|
||||
<li>Purchase Order with quantity received: 10, quantity invoiced: 0
|
||||
This will make an cutoff entry with invoice to receive: 10
|
||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
||||
The cutoff entry is updated in the existing cut-off</li>
|
||||
<li>Purchase Order with quantity received: 0, quantity invoiced: 0
|
||||
This will not make an cutoff entry
|
||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
||||
An cutoff entry is added in the existing cut-off</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-closing/issues">GitHub Issues</a>.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_purchase%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#toc-entry-5">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>BCIM</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Jacques-Etienne Baudoux (BCIM) <<a class="reference external" href="mailto:je@bcim.be">je@bcim.be</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.</p>
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
||||
<p><a class="reference external image-reference" href="https://github.com/jbaudoux"><img alt="jbaudoux" src="https://github.com/jbaudoux.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_purchase">OCA/account-closing</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="account_accrual_action" model="ir.actions.act_window">
|
||||
<field name="name">Accrued Expense on Purchase Orders</field>
|
||||
<field name="res_model">account.cutoff</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('order_line_model', '=', 'purchase.order.line')]</field>
|
||||
<field
|
||||
name="context"
|
||||
>{'default_order_line_model': 'purchase.order.line', 'default_cutoff_type': 'accrued_expense'}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to start preparing a new expense accrual.
|
||||
</p><p>
|
||||
This view can be used by accountants in order to collect information about accrued expenses. It then allows to generate the corresponding cut-off journal entry in one click.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="account_accrual_menu"
|
||||
parent="account_cutoff_base.cutoff_menu"
|
||||
action="account_accrual_action"
|
||||
sequence="5"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="account_cutoff_line_form" model="ir.ui.view">
|
||||
<field name="model">account.cutoff.line</field>
|
||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_line_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="parent_id" position="after">
|
||||
<field name="purchase_line_id" invisible="1" />
|
||||
<field
|
||||
name="purchase_order_id"
|
||||
attrs="{'invisible': [('purchase_line_id', '=', False)]}"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
# Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
U[Users] -->|HTTP| V[Views and QWeb Templates]
|
||||
V --> C[Controllers]
|
||||
V --> W[Wizards – Transient Models]
|
||||
C --> M[Models and ORM]
|
||||
W --> M
|
||||
M --> R[Reports]
|
||||
DX[Data XML] --> M
|
||||
S[Security – ACLs and Groups] -. enforces .-> M
|
||||
|
||||
subgraph Account_cutoff_accrual_purchase Module - account_cutoff_accrual_purchase
|
||||
direction LR
|
||||
M:::layer
|
||||
W:::layer
|
||||
C:::layer
|
||||
V:::layer
|
||||
R:::layer
|
||||
S:::layer
|
||||
DX:::layer
|
||||
end
|
||||
|
||||
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
|
||||
```
|
||||
|
||||
Notes
|
||||
- Views include tree/form/kanban templates and report templates.
|
||||
- Controllers provide website/portal routes when present.
|
||||
- Wizards are UI flows implemented with `models.TransientModel`.
|
||||
- Data XML loads data/demo records; Security defines groups and access.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Configuration
|
||||
|
||||
Refer to Odoo settings for account_cutoff_accrual_purchase. Configure related models, access rights, and options as needed.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Controllers
|
||||
|
||||
This module does not define custom HTTP controllers.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# Dependencies
|
||||
|
||||
This addon depends on:
|
||||
|
||||
- [account_cutoff_accrual_order_base](../../odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base)
|
||||
- [purchase](../../odoo-bringout-oca-ocb-purchase)
|
||||
- [purchase_force_invoiced](../../odoo-bringout-oca-purchase-workflow-purchase_force_invoiced)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# FAQ
|
||||
|
||||
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
|
||||
- Q: How to enable? A: Start server with --addon account_cutoff_accrual_purchase or install in UI.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# Install
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_purchase"
|
||||
# or
|
||||
uv pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_purchase"
|
||||
```
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# Models
|
||||
|
||||
Detected core models and extensions in account_cutoff_accrual_purchase.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class purchase_order_line
|
||||
class account_cutoff
|
||||
class account_cutoff_line
|
||||
class account_move
|
||||
class purchase_order
|
||||
```
|
||||
|
||||
Notes
|
||||
- Classes show model technical names; fields omitted for brevity.
|
||||
- Items listed under _inherit are extensions of existing models.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# Overview
|
||||
|
||||
Packaged Odoo addon: account_cutoff_accrual_purchase. Provides features documented in upstream Odoo 16 under this addon.
|
||||
|
||||
- Source: OCA/OCB 16.0, addon account_cutoff_accrual_purchase
|
||||
- License: LGPL-3
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Reports
|
||||
|
||||
This module does not define custom reports.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
# Security
|
||||
|
||||
This module does not define custom security rules or access controls beyond Odoo defaults.
|
||||
|
||||
Default Odoo security applies:
|
||||
- Base user access through standard groups
|
||||
- Model access inherited from dependencies
|
||||
- No custom row-level security rules
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue