You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.2 KiB
80 lines
3.2 KiB
# -*- coding: utf-8 -*-
|
|
###############################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
#
|
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
|
# Author: Anfas Faisal K (odoo@cybrosys.com)
|
|
#
|
|
# This program is under the terms of the Odoo Proprietary License v1.0(OPL-1)
|
|
# It is forbidden to publish, distribute, sublicense, or sell copies of the
|
|
# Software or modified copies of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL
|
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING
|
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
# DEALINGS IN THE SOFTWARE.
|
|
#
|
|
###############################################################################
|
|
from odoo import fields, models, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class DamageInvoice(models.TransientModel):
|
|
"""
|
|
This model handles the linking of invoices to sale orders.
|
|
"""
|
|
_name = 'damage.invoice'
|
|
_description = "Damage Report"
|
|
|
|
is_damage = fields.Boolean(string="Any Damage",
|
|
help="The Vehicle is Damaged")
|
|
damage_amount = fields.Float(string="Damage Amount",
|
|
help="Total Amount for the damages")
|
|
description = fields.Text(
|
|
'Description', translate=True)
|
|
contract_id = fields.Many2one(
|
|
'fleet.rental.contract',
|
|
string='Contract Rent',
|
|
help='Reference to the vehicle rent.')
|
|
|
|
def action_create_damage_invoice(self):
|
|
"""
|
|
Creates an invoice for the reported damages based on the provided
|
|
details.
|
|
"""
|
|
self.ensure_one()
|
|
if not self.contract_id:
|
|
raise ValidationError(_("No contract associated with this damage report."))
|
|
if not self.damage_amount:
|
|
raise ValidationError(_("Damage amount is required to create an invoice."))
|
|
|
|
product_id = self.env.ref(
|
|
'advanced_fleet_rental.product_product_vehicle_damage_charge')
|
|
invoice_vals = {
|
|
'partner_id': self.contract_id.customer_id.id,
|
|
'move_type': 'out_invoice',
|
|
'invoice_date': fields.Date.today(),
|
|
'vehicle_rental_id': self.contract_id.id,
|
|
'invoice_line_ids': [(0, 0, {
|
|
'product_id': product_id.id,
|
|
'name': self.description or '',
|
|
'quantity': 1,
|
|
'price_unit': self.damage_amount,
|
|
})],
|
|
}
|
|
self.contract_id.is_damaged_invoiced = True
|
|
self.contract_id.damage_description = self.description
|
|
self.contract_id.damage_amount = self.damage_amount
|
|
invoice = self.env['account.move'].create(invoice_vals)
|
|
invoice.action_post()
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'res_model': 'account.move',
|
|
'view_mode': 'form',
|
|
'res_id': invoice.id,
|
|
'target': 'current',
|
|
}
|
|
|