Repository
OCA/vertical-rental · module folder · Try on Runboat
Module version
1.0.4
Category
Sales
Folder size
1.73 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/vertical-rental
Last tracking update
2026-08-07 08:09:33
Authors
Akretion, Odoo Community Association (OCA), Sodexis
Maintainers
Akretion, Odoo Community Association (OCA), Sodexis
Committers
Weblate, OCA-git-bot, oca-ci, pwitte, chaule97
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
rental_base
Description

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
create_rental_product_form rental.product.product.form create.rental.product form New
product_normal_form_view rental.product.product.form product.product form Inherits product.product_normal_form_view
product_template_only_form_view rental.product.template.only.form product.template form Inherits product.product_template_only_form_view
res_config_settings_view_form_sale_rental res.config.settings.view.form.inherit.sale.stock.sale res.config.settings form Inherits sale.res_config_settings_view_form
sale_rental_calendar sale.rental.calendar sale.rental calendar New
sale_rental_form sale.rental.form sale.rental form New
sale_rental_graph sale.rental.graph sale.rental graph New
sale_rental_pivot sale.rental.pivot sale.rental pivot New
sale_rental_search sale.rental.search sale.rental search New
sale_rental_tree sale.rental.tree sale.rental tree New
view_order_form sale_rental.view_order_form sale.order form Inherits sale_start_end_dates.view_order_form
view_warehouse rental.stock.warehouse.form stock.warehouse form Inherits stock.view_warehouse
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (10)

New fields (6)
  • categ_id Many2one → product.category
    required=True string='Product Category' args: 'product.category'
  • copy_image Boolean
    string='Copy Product Image'
  • default_code Char
  • hw_product_id Many2one → product.product
    readonly=True required=True string='Product to Rent' args: 'product.product'
  • name Char
    required=True string='Rental Service Name'
  • sale_price_per_day Float
    default=1.0 digits='Product Price' required=True string='Rental Price per Day'
Public methods (2)
  • create_rental_product(self)
  • default_get(self, fields_list)
    @api.model

New fields (2)
  • rental_service_ids One2many → product.product
    string='Related Rental Services' args: 'product.product', 'rented_product_id'
  • rented_product_id Many2one → product.product
    domain=[('type', 'in', ('product', 'consu'))] string='Related Rented Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (2)
  • rental_service_tmpl_ids One2many → product.template
    string='Rental Services' args: 'product.template', 'rented_product_tmpl_id'
  • rented_product_tmpl_id Many2one → product.template
    compute='_compute_rented_product_tmpl_id' inverse='_inverse_rented_product_tmpl_id' store=True string='Rented Product' args: 'product.template'
Public methods (0)

No public methods.

New fields (2)
  • reminder_days Integer
    config_parameter='sale_rental.reminder_days' default=3.0 string='Rental Reminder Days'
  • send_return_reminder Boolean
    config_parameter='sale_rental.send_return_reminder' string='Send Return Reminders'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_cancel(self)
    When the user cancels a rental extension, Odoo writes the initial end date on the return picking

New fields (6)
  • can_sell_rental Boolean
    string='Can Sell from Rental'
  • extension_rental_id Many2one → sale.rental
    check_company=True readonly=True states={'draft': [('readonly', False)]} string='Rental to Extend' args: 'sale.rental'
  • rental Boolean
    default=False
  • rental_qty Float
    digits='Product Unit of Measure' help='Indicate the number of items that will be rented.' readonly=True states={'draft': [('readonly', False)]} string='Rental Quantity'
  • rental_type Selection
    readonly=True states={'draft': [('readonly', False)]} args: [('new_rental', 'New Rental'), ('rental_extension', 'Rental Extension')]
  • sell_rental_id Many2one → sale.rental
    check_company=True readonly=True states={'draft': [('readonly', False)]} string='Rental to Sell' args: 'sale.rental'
Public methods (5)
  • extension_rental_id_change(self)
    @api.onchange('extension_rental_id')
  • rental_product_id_change(self)
    @api.onchange('product_id', 'rental_qty')
  • rental_qty_number_of_days_change(self)
    @api.onchange('rental_qty', 'number_of_days', 'product_id')
  • rental_type_change(self)
    @api.onchange('rental_type')
  • sell_rental_id_change(self)
    @api.onchange('sell_rental_id')

New fields (21)
  • company_id Many2one → res.company
    readonly=True related='start_order_line_id.company_id' store=True string='Company' args: 'res.company'
  • end_date Date
    compute='_compute_end_date' help='End Date of the Rental (extensions included), taking into account all the extensions sold to the customer.' store=True
  • extension_order_line_ids One2many → sale.order.line
    readonly=True string='Rental Extensions' args: 'sale.order.line', 'extension_rental_id'
  • in_move_id Many2one → stock.move
    compute='_compute_move_and_state' readonly=True store=True string='Incoming Move' args: 'stock.move'
  • in_picking_id Many2one → stock.picking
    readonly=True related='in_move_id.picking_id' string='Receipt' args: 'stock.picking'
  • in_state Selection
    readonly=True related='in_move_id.state' string='In Move State'
  • out_move_id Many2one → stock.move
    compute='_compute_move_and_state' readonly=True store=True string='Outgoing Move' args: 'stock.move'
  • out_picking_id Many2one → stock.picking
    readonly=True related='out_move_id.picking_id' string='Delivery Order' args: 'stock.picking'
  • out_state Selection
    readonly=True related='out_move_id.state' string='Out Move State'
  • partner_id Many2one → res.partner
    readonly=True related='start_order_line_id.order_id.partner_id' store=True string='Customer' args: 'res.partner'
  • rental_product_id Many2one → product.product
    readonly=True related='start_order_line_id.product_id' store=True string='Rental Service' args: 'product.product'
  • rental_qty Float
    readonly=True related='start_order_line_id.rental_qty' store=True
  • rented_product_id Many2one → product.product
    readonly=True related='start_order_line_id.product_id.rented_product_id' store=True string='Rented Product' args: 'product.product'
  • sell_move_id Many2one → stock.move
    compute='_compute_move_and_state' readonly=True store=True string='Selling Move' args: 'stock.move'
  • sell_order_line_ids One2many → sale.order.line
    readonly=True string='Sell Rented Product' args: 'sale.order.line', 'sell_rental_id'
  • sell_picking_id Many2one → stock.picking
    readonly=True related='sell_move_id.picking_id' string='Sell Delivery Order' args: 'stock.picking'
  • sell_state Selection
    readonly=True related='sell_move_id.state' string='Sell Move State'
  • start_date Date
    readonly=True related='start_order_line_id.start_date' store=True
  • start_order_id Many2one → sale.order
    readonly=True related='start_order_line_id.order_id' store=True string='Rental SO' args: 'sale.order'
  • start_order_line_id Many2one → sale.order.line
    readonly=True string='Rental SO Line' args: 'sale.order.line'
  • state Selection
    compute='_compute_move_and_state' readonly=True store=True args: [('ordered', 'Ordered'), ('out', 'Out'), ('sell_progress', 'Sell in progress'), ('sold', 'Sold'), ('in', 'Back In'), ('cancel', 'Cancelled')]
Public methods (2)
  • cron_send_return_reminders(self)
    @api.model
    Send reminder emails X days before end_date.
  • name_get(self)
    @api.depends('start_order_line_id', 'extension_order_line_ids.end_date', 'extension_order_line_ids.state', 'start_order_line_id.end_date')

New fields (0)

No new fields.

Public methods (1)
  • create_demo_and_validate(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • rental_allowed Boolean
  • rental_in_location_id Many2one → stock.location
    check_company=True domain="[('usage', '=', 'internal'), ('company_id', '=', company_id)]" args: 'stock.location', 'Rental In'
  • rental_out_location_id Many2one → stock.location
    check_company=True domain="[('usage', '=', 'internal'), ('company_id', '=', company_id)]" args: 'stock.location', 'Rental Out'
  • rental_route_id Many2one → stock.route
    string='Rental Route' args: 'stock.route'
  • rental_view_location_id Many2one → stock.location
    check_company=True domain="[('usage', '=', 'view'), ('company_id', '=', company_id)]" args: 'stock.location', 'Parent Rental'
  • sell_rented_product_route_id Many2one → stock.route
    string='Sell Rented Product Route' args: 'stock.route'
Public methods (1)
  • write(self, vals)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Status
Open migration PR — not merged yet for this version
CI status
green — ready to merge
Open since
631 days ago
Last activity
72 days ago
Repository
OCA/vertical-rental
Pull request
[17.0][MIG] sale_rental (#52)
Status
Open migration PR — not merged yet for this version
CI status
checks failing
Open since
290 days ago
Last activity
30 days ago
Repository
OCA/vertical-rental
Pull request
[18.0][MIG] sale_rental (#70)