Browse Source

[UPDATE] version 3 with change log

pull/30/merge
SHEREEF PT 8 years ago
parent
commit
5536a48677
  1. 4
      fleet_rental/README.rst
  2. 14
      fleet_rental/__init__.py
  3. 30
      fleet_rental/__manifest__.py
  4. 46
      fleet_rental/__manifest__.py~
  5. 715
      fleet_rental/data/fleet_rental_data.xml
  6. 22
      fleet_rental/data/fleet_rental_data.xml~
  7. 39
      fleet_rental/doc/changelog.rst
  8. 16
      fleet_rental/models/__init__.py
  9. 249
      fleet_rental/models/car_rental.py
  10. 47
      fleet_rental/models/fleet.py
  11. 14
      fleet_rental/reports/__init__.py
  12. 14
      fleet_rental/reports/rental_report.py
  13. 10
      fleet_rental/security/ir.model.access.csv
  14. 19
      fleet_rental/static/description/index.html
  15. 228
      fleet_rental/static/description/index.html~
  16. 72
      fleet_rental/views/car_rental_view.xml
  17. 8
      fleet_rental/views/car_tools_view.xml
  18. 11
      fleet_rental/views/checklist_view.xml

4
fleet_rental/README.rst

@ -1,5 +1,5 @@
Fleet Rental Management
=======================
Fleet Rental Management v10
===========================
This module will helps you to give the vehicles for Rent.
Features

14
fleet_rental/__init__.py

@ -2,10 +2,10 @@
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Cybrosys(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AGPL (v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
@ -13,11 +13,7 @@
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
# GNU AGPL (AGPL v3) for more details.
#
##############################################################################
import models

30
fleet_rental/__manifest__.py

@ -2,10 +2,10 @@
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Cybrosys(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AGPL (v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
@ -13,22 +13,20 @@
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
# GNU AGPL (AGPL v3) for more details.
#
##############################################################################
{
'name': 'Fleet Rental Management',
'summary': """The Complete Solution for a Car/Vehicle Rental System""",
'version': '10.0.2.0.0',
'version': '10.0.3.0.0',
'summary': """This module will helps you to give the vehicles for Rent.""",
'description': "Module Helps You To Manage Rental Contracts",
'category': "Industries",
'author': 'Cybrosys Techno Solutions',
'website': "http://www.cybrosys.com",
'company': 'Cybrosys Techno Solutions',
"category": "Industries",
'depends': ['base', 'account', 'fleet', 'mail'],
'website': "http://www.cybrosys.com",
'depends': ['base', 'account', 'fleet', 'mail', 'web_widget_color'],
'data': ['security/rental_security.xml',
'security/ir.model.access.csv',
'views/car_rental_view.xml',
@ -40,7 +38,7 @@
'demo': [
],
'images': ['static/description/banner.jpg'],
'license': 'LGPL-3',
'license': 'AGPL-3',
'installable': True,
'application': False,
'application': True,
}

46
fleet_rental/__manifest__.py~

@ -1,46 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Cybrosys(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Fleet Rental Management',
'summary': """The Complete Solution for a Car/Vehicle Rental System""",
'version': '10.0.2.0.0',
'author': 'Cybrosys Techno Solutions',
'website': "http://www.cybrosys.com",
'company': 'Cybrosys Techno Solutions',
"category": "Industries",
'depends': ['base', 'account', 'fleet', 'mail'],
'data': ['security/rental_security.xml',
'security/ir.model.access.csv',
'views/car_rental_view.xml',
'views/checklist_view.xml',
'views/car_tools_view.xml',
'reports/rental_report.xml',
'data/fleet_rental_data.xml',
],
'demo': [
],
'images': ['static/description/banner.jpg'],
'license': 'LGPL-3',
'installable': True,
'application': False,
}

715
fleet_rental/data/fleet_rental_data.xml

@ -5,10 +5,12 @@
<field name="name">Fleet Rental Service</field>
<field name="type">service</field>
</record>
<record id="vehicle_state_rent" model="fleet.vehicle.state">
<field name="name">Rent</field>
<field name="sequence">3</field>
</record>
<record id="fleet.fleet_rule_vehicle_visibility_user" model="ir.rule">
<field name="name">User can only see his/her vehicle</field>
<field name="model_id" ref="fleet.model_fleet_vehicle"/>
@ -19,5 +21,718 @@
<field name="perm_unlink" eval="False"/>
<field name="domain_force">[]</field>
</record>
<record id="base.main_company" model="res.company">
<field name="logo">
iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAAF96VFh0
UmF3IHByb2ZpbGUgdHlwZSBBUFAxAAAImeNKT81LLcpMVigoyk/LzEnlUgADYxMuE0sTS6NEAwMD
CwMIMDQwMDYEkkZAtjlUKNEABZiYm6UBoblZspkpiM8FAE+6FWgbLdiMAAAgAElEQVR4nOy9ebQd
x3kf+Kvq7rvf+1asBEiQBAHuokhKokyQFLiYki3JUiLJSywfy0kc2c4Z2Y493o8zJ1GOk+NJ4jlj
j8exfEZOvESSY8uxFMtaQIoiAXAVKQIQse/b2++7++2qb/6opav7Lu89EKQewP4OLrq7ul93VXV9
3/f7lqoGUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRS
SimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWU
UkoppZRSSiklh9j3ugIpXRoREXvhhRf8kZERPj09zWu1WmbNmjW3ZzKZO4Ig2Mo538w5X+d53gTn
vMI5L3iel+WcB5xzHwDnnDMiAikSQohQStkVQrSklHUhxIIQYlpKea7b7Z5otVqvNZvN71Sr1WNj
Y2PdyclJefr0afGe97xHMMboe90nKa2cUgFwhdCuXbv8XC4X1Gq1TLFY3FAoFB7K5XL3+L5/M+f8
2mw2uyaTyRQ8z7N/wxiLbZP7/YiIevbNVkqJTqeDTqdT63a75zudzrFOp7NvcXFxb6PReN7zvKlS
qdRptVrdnTt3hpet8Sm9YZQKgFVKRMS/+tWv5oMgyGez2W2VSuUD2Wz23iAItudyuQ1BEPiMMZgf
sDJGv4T6xPZd4RCGIRqNRrfdbp9st9uv1uv1Z+r1+lc9zzvV7Xabjz32WJMxJi9rhVK6LJQKgFVE
n/vc57w1a9aUAUyOjo6+P5/PP5rL5e7M5XLXZDIZ7jK6u09EfRn+cgkBl/ndMvNsc2x+QgjU63XR
bDaPNxqN5+r1+lc6nc43Pc+bnZqaWvzYxz4mLkvFUnrdlAqAVUBPPfXUGIAN5XL5RwqFwsOFQuH2
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
</field>
</record>
</data>
</odoo>

22
fleet_rental/data/fleet_rental_data.xml~

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record model="product.template" id="fleet_service_product">
<field name="name">Fleet Rental Service</field>
<field name="type">service</field>
</record>
<record id="vehicle_state_rent" model="fleet.vehicle.state">
<field name="name">Rent</field>
<field name="sequence">3</field>
</record>
<record id="fleet.fleet_rule_vehicle_visibility_user" model="ir.rule">
<field name="name">User can only see his/her vehicle</field>
<field name="model_id" ref="fleet.model_fleet_vehicle"/>
<field name="groups" eval="[(4, ref('fleet.fleet_group_user')), (4, ref('rental_group_user'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="False"/>
</record>
</data>
</odoo>

39
fleet_rental/doc/changelog.rst

@ -0,0 +1,39 @@
Changelog
=========
* Nilmar Shereef contact: shereef@cybrosys.in
* Jesni Banu contact: jesni@cybrosys.in
`10.0.2.0.0`
------------
- Pre Invoices Feature Added: Contract may be past record.
- Smart Buttons: Related invoices in Rental Contracts.
- Image of Vehicle in Rental Contract.
- Date Validations in rental record.
- Pending Invoice validations added.
- Reporting on Rental Management.
`9.0.2.0.0`
-----------
- Pre Invoices Feature Added: Contract may be past record.
- Smart Buttons: Related invoices in Rental Contracts.
- Image of Vehicle in Rental Contract.
- Date Validations in rental record.
- Pending Invoice validations added.
- Reporting on Rental Management.
- Coloured Tree View for Rentals.
`9.0.3.0.0`
-----------
- Changed Menus: accessories/tools.
- Security changed.
- Checking list invoicing changed.
- Field changed in recurrent invoice line.
- Company Image added.
`10.0.3.0.0`
------------
- Changed Menus: accessories/tools.
- Security changed.
- Checking list invoicing changed.
- Due date of invoice added in recurrent invoice line.
- Company Image added to "Fleet Rental Module Logo".

16
fleet_rental/models/__init__.py

@ -2,10 +2,10 @@
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Cybrosys(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AGPL (v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
@ -13,12 +13,10 @@
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
# GNU AGPL (AGPL v3) for more details.
#
##############################################################################
import car_rental
import fleet

249
fleet_rental/models/car_rental.py

@ -2,10 +2,10 @@
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Cybrosys(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AGPL (v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
@ -13,14 +13,10 @@
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
# GNU AGPL (AGPL v3) for more details.
#
##############################################################################
from datetime import datetime, date
from datetime import datetime, date, timedelta
from odoo import models, fields, api, _
from odoo.exceptions import UserError, Warning
@ -30,23 +26,47 @@ class CarRentalContract(models.Model):
_description = 'Fleet Rental Management'
_inherit = ['mail.thread', 'ir.needaction_mixin']
image = fields.Binary(related='vehicle_id.image', string="Logo")
@api.onchange('rent_start_date', 'rent_end_date')
def check_availability(self):
self.vehicle_id = ''
fleet_obj = self.env['fleet.vehicle'].search([])
for i in fleet_obj:
for each in i.rental_reserved_time:
if each.date_from <= self.rent_start_date <= each.date_to:
i.write({'rental_check_availability': False})
elif self.rent_start_date < each.date_from:
if each.date_from <= self.rent_end_date <= each.date_to:
i.write({'rental_check_availability': False})
elif self.rent_end_date > each.date_to:
i.write({'rental_check_availability': False})
else:
i.write({'rental_check_availability': True})
else:
i.write({'rental_check_availability': True})
image = fields.Binary(related='vehicle_id.image', string="Image of Vehicle")
reserved_fleet_id = fields.Many2one('rental.fleet.reserved', invisible=True, copy=False)
image_medium = fields.Binary(related='vehicle_id.image_medium', string="Logo (medium)")
image_small = fields.Binary(related='vehicle_id.image_small', string="Logo (small)")
name = fields.Char(string="Name", default="Draft Contract", readonly=True, copy=False)
customer_id = fields.Many2one('res.partner', required=True, string='Customer', help="Customer")
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", required=True, help="Vehicle")
car_brand = fields.Char(string="Fleet Brand", size=50)
car_color = fields.Char(string="Fleet Color", size=50)
cost = fields.Float(string="Rent Cost", help="This fields is to determine the cost of rent per hour", required=True)
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", required=True, help="Vehicle",
readonly=True,
states={'draft': [('readonly', False)]}
)
car_brand = fields.Many2one('fleet.vehicle.model.brand', string="Fleet Brand", size=50,
related='vehicle_id.model_id.brand_id', store=True, readonly=True)
car_color = fields.Char(string="Fleet Color", size=50, related='vehicle_id.color', store=True, copy=False,
default='#FFFFFF', readonly=True)
cost = fields.Float(string="Rent Cost", help="This fields is to determine the cost of rent", required=True)
rent_start_date = fields.Date(string="Rent Start Date", required=True, default=datetime.today(),
help="Starting date of your contract", track_visibility='onchange')
rent_end_date = fields.Date(string="Rent End Date", required=True, help="Ending date of your contract",
help="Start date of contract", track_visibility='onchange')
rent_end_date = fields.Date(string="Rent End Date", required=True, help="End date of contract",
track_visibility='onchange')
state = fields.Selection([('draft', 'Draft'), ('running', 'Running'), ('cancel', 'Cancel'),
state = fields.Selection([('draft', 'Draft'), ('reserved', 'Reserved'), ('running', 'Running'), ('cancel', 'Cancel'),
('checking', 'Checking'), ('invoice', 'Invoice'), ('done', 'Done')], string="State",
default="draft", copy=False, track_visibility='onchange')
notes = fields.Text(string="Details")
notes = fields.Text(string="Details & Notes")
cost_generated = fields.Float(string='Recurring Cost',
help="Costs paid at regular intervals, depending on the cost frequency")
cost_frequency = fields.Selection([('no', 'No'), ('daily', 'Daily'), ('weekly', 'Weekly'), ('monthly', 'Monthly'),
@ -58,22 +78,51 @@ class CarRentalContract(models.Model):
default=lambda self: self.env['account.account'].search([('id', '=', 17)]))
recurring_line = fields.One2many('fleet.rental.line', 'rental_number', readonly=True, help="Recurring Invoices",
copy=False)
first_payment = fields.Float(string='First Payment', help="Advance Payment", track_visibility='onchange')
first_payment = fields.Float(string='First Payment',
help="Transaction/Office/Contract charge amount, must paid by customer side other "
"than recurrent payments",
track_visibility='onchange',
required=True)
first_payment_inv = fields.Many2one('account.invoice', copy=False)
first_invoice_created = fields.Boolean(string="First Invoice Created", invisible=True, copy=False)
attachment_ids = fields.Many2many('ir.attachment', 'car_rent_checklist_ir_attachments_rel',
'rental_id', 'attachment_id', string="Attachments",
help="Images of the vehicle before contract/any attachments")
checklist_line = fields.One2many('car.rental.checklist', 'checklist_number', string="Checklist", help="Check List")
total = fields.Float(string="Total(Tools)", readonly=True, copy=False)
tools_missing_cost = fields.Float(string="Tools missing cost", readonly=True, copy=False)
damage_cost = fields.Float(string="Damage cost", copy=False)
damage_cost_sub = fields.Float(string="Damage cost", readonly=True, copy=False)
total_cost = fields.Float(string="Total cost", readonly=True, copy=False)
checklist_line = fields.One2many('car.rental.checklist', 'checklist_number', string="Checklist",
help="Facilities/Accessories, That should verify when closing the contract.",
states={'invoice': [('readonly', True)],
'done': [('readonly', True)],
'cancel': [('readonly', True)]})
total = fields.Float(string="Total (Accessories/Tools)", readonly=True, copy=False)
tools_missing_cost = fields.Float(string="Missing Cost", readonly=True, copy=False,
help='This is the total amount of missing tools/accessories')
damage_cost = fields.Float(string="Damage Cost", copy=False)
damage_cost_sub = fields.Float(string="Damage Cost", readonly=True, copy=False)
total_cost = fields.Float(string="Total", readonly=True, copy=False)
invoice_count = fields.Integer(compute='_invoice_count', string='# Invoice', copy=False)
check_verify = fields.Boolean(compute='check_action_verify', copy=False)
sales_person = fields.Many2one('res.users', string='Sales Person', default=lambda self: self.env.uid,
track_visibility='always')
@api.multi
def action_run(self):
self.state = 'running'
@api.multi
@api.depends('checklist_line.checklist_active')
def check_action_verify(self):
flag = 0
for each in self:
for i in each.checklist_line:
if i.checklist_active:
continue
else:
flag = 1
if flag == 1:
each.check_verify = False
else:
each.check_verify = True
@api.constrains('rent_start_date', 'rent_end_date')
def validate_dates(self):
if self.rent_end_date < self.rent_start_date:
@ -100,10 +149,14 @@ class CarRentalContract(models.Model):
@api.constrains('state')
def state_changer(self):
if self.state == "running":
state_id = self.env['fleet.vehicle.state'].search([('name', '=', "Rent")]).id
state_id = self.env.ref('fleet_rental.vehicle_state_rent').id
self.vehicle_id.write({'state_id': state_id})
elif self.state == "cancel":
state_id = self.env.ref('fleet.vehicle_state_active').id
self.vehicle_id.write({'state_id': state_id})
elif self.state == "done":
state_id = self.env['fleet.vehicle.state'].search([('name', '=', "Active")]).id
elif self.state == "invoice":
self.rent_end_date = fields.datetime.now()
state_id = self.env.ref('fleet.vehicle_state_active').id
self.vehicle_id.write({'state_id': state_id})
@api.constrains('checklist_line', 'damage_cost')
@ -119,6 +172,76 @@ class CarRentalContract(models.Model):
self.damage_cost_sub = self.damage_cost
self.total_cost = tools_missing_cost + self.damage_cost
@api.multi
def fleet_scheduler1(self, rent_date):
inv_obj = self.env['account.invoice']
inv_line_obj = self.env['account.invoice.line']
recurring_obj = self.env['fleet.rental.line']
start_date = datetime.strptime(self.rent_start_date, '%Y-%m-%d').date()
end_date = datetime.strptime(self.rent_end_date, '%Y-%m-%d').date()
supplier = self.customer_id
inv_data = {
'name': supplier.name,
'reference': supplier.name,
'account_id': supplier.property_account_payable_id.id,
'partner_id': supplier.id,
'currency_id': self.account_type.company_id.currency_id.id,
'journal_id': self.journal_type.id,
'origin': self.name,
'company_id': self.account_type.company_id.id,
'date_due': self.rent_end_date,
}
inv_id = inv_obj.create(inv_data)
product_id = self.env['product.product'].search([("name", "=", "Fleet Rental Service")])
if product_id.property_account_income_id.id:
income_account = product_id.property_account_income_id
elif product_id.categ_id.property_account_income_categ_id.id:
income_account = product_id.categ_id.property_account_income_categ_id
else:
raise UserError(
_('Please define income account for this product: "%s" (id:%d).') % (product_id.name,
product_id.id))
recurring_data = {
'name': self.vehicle_id.name,
'date_today': rent_date,
'account_info': income_account.name,
'rental_number': self.id,
'recurring_amount': self.cost_generated,
'invoice_number': inv_id.id,
'invoice_ref': inv_id.id,
}
recurring_obj.create(recurring_data)
inv_line_data = {
'name': self.vehicle_id.name,
'account_id': income_account.id,
'price_unit': self.cost_generated,
'quantity': 1,
'product_id': product_id.id,
'invoice_id': inv_id.id,
}
inv_line_obj.create(inv_line_data)
mail_content = _(
'<h3>Reminder Recurrent Payment!</h3><br/>Hi %s, <br/> This is to remind you that the '
'recurrent payment for the '
'rental contract has to be done.'
'Please make the payment at the earliest.'
'<br/><br/>'
'Please find the details below:<br/><br/>'
'<table><tr><td>Contract Ref<td/><td> %s<td/><tr/>'
'<tr/><tr><td>Amount <td/><td> %s<td/><tr/>'
'<tr/><tr><td>Due Date <td/><td> %s<td/><tr/>'
'<tr/><tr><td>Responsible Person <td/><td> %s, %s<td/><tr/><table/>') % \
(self.customer_id.name, self.name, inv_id.amount_total, inv_id.date_due,
inv_id.user_id.name,
inv_id.user_id.mobile)
main_content = {
'subject': "Reminder Recurrent Payment!",
'author_id': self.env.user.partner_id.id,
'body_html': mail_content,
'email_to': self.customer_id.email,
}
self.env['mail.mail'].create(main_content).send()
@api.model
def fleet_scheduler(self):
inv_obj = self.env['account.invoice']
@ -172,7 +295,8 @@ class CarRentalContract(models.Model):
'account_info': income_account.name,
'rental_number': records.id,
'recurring_amount': records.cost_generated,
'invoice_number': inv_id.id
'invoice_number': inv_id.id,
'invoice_ref': inv_id.id,
}
recurring_obj.create(recurring_data)
inv_line_data = {
@ -182,6 +306,7 @@ class CarRentalContract(models.Model):
'quantity': 1,
'product_id': product_id.id,
'invoice_id': inv_id.id,
}
inv_line_obj.create(inv_line_data)
mail_content = _(
@ -195,7 +320,8 @@ class CarRentalContract(models.Model):
'<tr/><tr><td>Amount <td/><td> %s<td/><tr/>'
'<tr/><tr><td>Due Date <td/><td> %s<td/><tr/>'
'<tr/><tr><td>Responsible Person <td/><td> %s, %s<td/><tr/><table/>') % \
(self.customer_id.name, self.name, inv_id.amount_total, inv_id.date_due, inv_id.user_id.name,
(self.customer_id.name, self.name, inv_id.amount_total, inv_id.date_due,
inv_id.user_id.name,
inv_id.user_id.mobile)
main_content = {
'subject': "Reminder Recurrent Payment!",
@ -205,11 +331,14 @@ class CarRentalContract(models.Model):
}
self.env['mail.mail'].create(main_content).send()
else:
if self.state == 'running':
records.state = "checking"
@api.multi
def action_verify(self):
self.state = "invoice"
self.reserved_fleet_id.unlink()
self.rent_end_date = fields.datetime.now()
if self.total_cost != 0:
inv_obj = self.env['account.invoice']
inv_line_obj = self.env['account.invoice.line']
@ -269,7 +398,29 @@ class CarRentalContract(models.Model):
@api.multi
def action_confirm(self):
self.state = "running"
check_availability = 0
for each in self.vehicle_id.rental_reserved_time:
if each.date_from <= self.rent_start_date <= each.date_to:
check_availability = 1
elif self.rent_start_date < each.date_from:
if each.date_from <= self.rent_end_date <= each.date_to:
check_availability = 1
elif self.rent_end_date > each.date_to:
check_availability = 1
else:
check_availability = 0
else:
check_availability = 0
if check_availability == 0:
reserved_id = self.vehicle_id.rental_reserved_time.create({'customer_id': self.customer_id.id,
'date_from': self.rent_start_date,
'date_to': self.rent_end_date,
'reserved_obj': self.vehicle_id.id
})
self.write({'reserved_fleet_id': reserved_id.id})
else:
raise Warning('Sorry This vehicle is already booked by another customer')
self.state = "reserved"
sequence_code = 'car.rental.sequence'
order_date = self.create_date
order_date = order_date[0:10]
@ -295,6 +446,8 @@ class CarRentalContract(models.Model):
@api.multi
def action_cancel(self):
self.state = "cancel"
if self.reserved_fleet_id:
self.reserved_fleet_id.unlink()
@api.multi
def force_checking(self):
@ -338,11 +491,20 @@ class CarRentalContract(models.Model):
rent_date = datetime.strptime(each.rent_start_date, "%Y-%m-%d").date()
if each.cost_frequency != 'no' and rent_date < date.today():
rental_days = (date.today() - rent_date).days
for each1 in range(1, rental_days):
each.fleet_scheduler()
recurrent_obj = self.env.ref('fleet_rental.cron_scheduler_for_fleet')
if datetime.today() > datetime.strptime(recurrent_obj.nextcall, "%Y-%m-%d %H:%M:%S"):
each.fleet_scheduler()
if each.cost_frequency == 'weekly':
rental_days = int(rental_days / 7)
if each.cost_frequency == 'monthly':
rental_days = int(rental_days / 30)
for each1 in range(0, rental_days + 1):
if rent_date > datetime.strptime(each.rent_end_date, "%Y-%m-%d").date():
break
each.fleet_scheduler1(rent_date)
if each.cost_frequency == 'daily':
rent_date = rent_date + timedelta(days=1)
if each.cost_frequency == 'weekly':
rent_date = rent_date + timedelta(days=7)
if each.cost_frequency == 'monthly':
rent_date = rent_date + timedelta(days=30)
if self.first_payment != 0:
self.first_invoice_created = True
@ -420,13 +582,6 @@ class CarRentalContract(models.Model):
else:
raise Warning("Please enter advance amount to make first payment")
@api.onchange('vehicle_id')
def update_fields(self):
if self.vehicle_id:
obj = self.env['fleet.vehicle'].search([('name', '=', self.vehicle_id.name)])
self.car_brand = obj.model_id.brand_id.name
self.car_color = obj.color
class FleetRentalLine(models.Model):
_name = 'fleet.rental.line'
@ -438,6 +593,8 @@ class FleetRentalLine(models.Model):
rental_number = fields.Many2one('car.rental.contract', string='Rental Number')
payment_info = fields.Char(compute='paid_info', string='Payment Stage', default='draft')
invoice_number = fields.Integer(string='Invoice ID')
invoice_ref = fields.Many2one('account.invoice', string='Invoice Ref')
date_due = fields.Date(string='Due Date', related='invoice_ref.date_due')
@api.multi
@api.depends('payment_info')
@ -453,8 +610,8 @@ class CarRentalChecklist(models.Model):
_name = 'car.rental.checklist'
name = fields.Many2one('car.tools', string="Name")
checklist_active = fields.Boolean(string="Active", default=False)
checklist_number = fields.Many2one('car.rental.contract', string="Checklist number")
checklist_active = fields.Boolean(string="Available", default=True)
checklist_number = fields.Many2one('car.rental.contract', string="Checklist Number")
price = fields.Float(string="Price")
@api.onchange('name')

47
fleet_rental/models/fleet.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AGPL (v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AGPL (AGPL v3) for more details.
#
##############################################################################
from odoo import models, fields
class FleetReservedTime(models.Model):
_name = "rental.fleet.reserved"
_description = "Reserved Time"
customer_id = fields.Many2one('res.partner', string='Customer')
date_from = fields.Date(string='Reserved Date From')
date_to = fields.Date(string='Reserved Date To')
reserved_obj = fields.Many2one('fleet.vehicle')
class EmployeeFleet(models.Model):
_inherit = 'fleet.vehicle'
rental_check_availability = fields.Boolean(default=True, copy=False)
color = fields.Char(string='Color', default='#FFFFFF')
rental_reserved_time = fields.One2many('rental.fleet.reserved', 'reserved_obj', String='Reserved Time', readonly=1,
ondelete='cascade')
fuel_type = fields.Selection([('gasoline', 'Gasoline'),
('diesel', 'Diesel'),
('electric', 'Electric'),
('hybrid', 'Hybrid'),
('petrol', 'Petrol')],
'Fuel Type', help='Fuel Used by the vehicle')
_sql_constraints = [('vin_sn_unique', 'unique (vin_sn)', "Chassis Number already exists !"),
('license_plate_unique', 'unique (license_plate)', "License plate already exists !")]

14
fleet_rental/reports/__init__.py

@ -2,10 +2,10 @@
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Cybrosys(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AGPL (v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
@ -13,11 +13,7 @@
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
# GNU AGPL (AGPL v3) for more details.
#
##############################################################################
import rental_report

14
fleet_rental/reports/rental_report.py

@ -2,10 +2,10 @@
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Cybrosys(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AGPL (v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
@ -13,11 +13,7 @@
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
# GNU AGPL (AGPL v3) for more details.
#
##############################################################################
from odoo import models, fields, tools

10
fleet_rental/security/ir.model.access.csv

@ -14,7 +14,15 @@ fleet_cron_right_user1,fleet_vehicle_access_right11,base.model_ir_cron,fleet.fle
fleet_vehicle_model_access_right_user,fleet_vehicle_model_access_right,fleet.model_fleet_vehicle_model,rental_group_user,1,1,1,0
fleet_vehicle_model_brand_access_right_user,fleet_vehicle_model_brand_access_right,fleet.model_fleet_vehicle_model_brand,rental_group_user,1,1,1,0
fleet_vehicle_access_right_user,fleet_vehicle_access_right,fleet.model_fleet_vehicle,rental_group_user,1,1,1,0
fleet_vehicle_access_right_user1,fleet_vehicle_access_right,fleet.model_fleet_vehicle,fleet.fleet_group_user,1,1,1,0
fleet_vehicle_log_fuel_access_right_rental_user,fleet_vehicle_log_fuel_access_right_rental_user,fleet.model_fleet_vehicle_log_fuel,rental_group_user,1,1,1,1
fleet_vehicle_odometer_access_right_rental_user,fleet_vehicle_odometer_access_right_rental_user,fleet.model_fleet_vehicle_odometer,rental_group_user,1,1,1,1
fleet_vehicle_log_services_access_right_rental_user,fleet_vehicle_log_services_access_right_rental_user,fleet.model_fleet_vehicle_log_services,fleet.fleet_group_manager,1,1,1,1
fleet_rental_fleet_reserved_access_right_user,fleet_rental_fleet_reserved_access_right,model_rental_fleet_reserved,rental_group_user,1,1,1,0
fleet_rental_fleet_reserved_access_right_manager,fleet_rental_fleet_reserved_access_right1,model_rental_fleet_reserved,fleet.fleet_group_manager,1,1,1,1

1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
14 fleet_vehicle_model_access_right_user fleet_vehicle_model_access_right fleet.model_fleet_vehicle_model rental_group_user 1 1 1 0
15 fleet_vehicle_model_brand_access_right_user fleet_vehicle_model_brand_access_right fleet.model_fleet_vehicle_model_brand rental_group_user 1 1 1 0
16 fleet_vehicle_access_right_user fleet_vehicle_access_right fleet.model_fleet_vehicle rental_group_user 1 1 1 0
17 fleet_vehicle_access_right_user1 fleet_vehicle_log_fuel_access_right_rental_user fleet_vehicle_access_right fleet_vehicle_log_fuel_access_right_rental_user fleet.model_fleet_vehicle fleet.model_fleet_vehicle_log_fuel fleet.fleet_group_user rental_group_user 1 1 1 0 1
18 fleet_vehicle_odometer_access_right_rental_user fleet_vehicle_odometer_access_right_rental_user fleet.model_fleet_vehicle_odometer rental_group_user 1 1 1 1
19 fleet_vehicle_log_services_access_right_rental_user fleet_vehicle_log_services_access_right_rental_user fleet.model_fleet_vehicle_log_services fleet.fleet_group_manager 1 1 1 1
20 fleet_rental_fleet_reserved_access_right_user fleet_rental_fleet_reserved_access_right model_rental_fleet_reserved rental_group_user 1 1 1 0
21 fleet_rental_fleet_reserved_access_right_manager fleet_rental_fleet_reserved_access_right1 model_rental_fleet_reserved fleet.fleet_group_manager 1 1 1 1
22
23
24
25
26
27
28

19
fleet_rental/static/description/index.html

@ -1,7 +1,7 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Fleet/Vehicle Rental Management</h2>
<h3 class="oe_slogan">This module helps with an opportunity to give the vehicles for Rent.</h3>
<h3 class="oe_slogan">This module helps with an opportunity to give the vehicles like car,van,bike,jeep etc.. for Rent.</h3>
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4>
</div>
<div class="oe_row oe_spaced" style="padding-left:65px;">
@ -18,6 +18,7 @@
<span style="color:green;"> &#9745; </span> Contract Payment Validations.<br/>
<span style="color:green;"> &#9745; </span> Detailed Fleet Rental Analysis Report.<br/>
<span style="color:green;"> &#9745; </span> Access Rights From Multiple Level.<br/>
<span style="color:green;"> &#9745; </span> Flexible for further customization.<br/>
</div>
</div>
</section>
@ -27,7 +28,7 @@
<div class="oe_picture">
<h3 class="oe_slogan">Overview</h3>
<p class="oe_mt32" style="text-align: center;">
This module is an application for Vehicle Rental System by Cybrosys Technologies which helps in managing the rental of fleet/vehicle.
This module is an application for Vehicle Rental System which helps in managing the rental of vehicles like car,van,bike, jeep etc...
It manages fleet/vehicle property by extending the basic fleet module of Odoo.
Currently fleet module does not have any connection with accounting module. But in this module,
we integrate the module with accounting also.
@ -199,26 +200,22 @@
</section>
<section class="oe_container">
<br/>
<h2 class="oe_slogan" style="margin-top:20px;" >You Looking for a functional Documentation of this Application.?</h2>
<h3 class="oe_slogan">Give a Request Mail to:&nbsp;&nbsp;<i class="fa fa-envelope" aria-hidden="true"></i>&nbsp;&nbsp;<a href="#" style="color:blue;">odoo@cybrosys.com</a></h3>
<br/>
<br/>
<h5 class="oe_slogan" style="margin-bottom:0px !important;font-weight: 400;margin-top:20px; color:#bb0706; font-size:20px;" >You Looking for a Documentation of this Application.?</h5>
<h5 class="oe_slogan" style="font-size:20px;margin-top: 11px;">Give a Request Mail to:&nbsp;&nbsp;<i class="fa fa-envelope" aria-hidden="true"></i>&nbsp;&nbsp;<a href="#" style="color:blue;">odoo@cybrosys.com</a></h5>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<div>
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i
style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="http://www.cybrosys.com/contact/"><i
href="https://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
href="https://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>

228
fleet_rental/static/description/index.html~

@ -1,228 +0,0 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Fleet/Vehicle Rental Management</h2>
<h3 class="oe_slogan">This module helps with an opportunity to give the vehicles for Rent.</h3>
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4>
</div>
<div class="oe_row oe_spaced" style="padding-left:65px;">
<h4>Features:</h4>
<div>
<span style="color:green;"> &#9745; </span> Multiple Plans for Rental Contract(Days/Weeks/Months/Years).<br/>
<span style="color:green;"> &#9745; </span> Integrated with Accounting Module.<br/>
<span style="color:green;"> &#9745; </span> Automatically Create Recurring Invoices.<br/>
<span style="color:green;"> &#9745; </span> Sending email for confirmation, first payment and recurrent invoices.<br/>
<span style="color:green;"> &#9745; </span> Check List Facility.<br/>
<span style="color:green;"> &#9745; </span> Separate Tree view for Checklist.<br/>
<span style="color:green;"> &#9745; </span> Damage Checking Facility.<br/>
<span style="color:green;"> &#9745; </span> Billing Facility for Damages/Check Lists.<br/>
<span style="color:green;"> &#9745; </span> Contract Payment Validations.<br/>
<span style="color:green;"> &#9745; </span> Detailed Fleet Rental Analysis Report.<br/>
<span style="color:green;"> &#9745; </span> Access Rights From Multiple Level.<br/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_picture">
<h3 class="oe_slogan">Overview</h3>
<p class="oe_mt32" style="text-align: center;">
This module is an application for Vehicle Rental System by Cybrosys Technologies which helps in managing the rental of fleet/vehicle.
It manages fleet/vehicle property by extending the basic fleet module of Odoo.
Currently fleet module does not have any connection with accounting module. But in this module,
we integrate the module with accounting also.
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Fleet Rental Management</h3>
<div style="text-align: center">
<p>
<h4>Fleet Rental -> Rental Management</h4>
<p>
</div>
<div style="text-align: center">
<a href="https://www.cybrosys.com">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height: 400px;" src="menu_items.png">
</div>
</a>
<span style="text-align: center;padding-left:65px;">&#9755; When you install the module, an extra menu named Rental Management is created
under the Fleet Menu. Also "Fleet" menu is replaced as "Fleet Rental". Here you can see different color
codes according to each state. This helps you in finding out contracts easily.</span>
</div>
<br>
<div class="" style="text-align: center">
<div class="" style="text-align: center">
<p>
<h4>Fleet Rental -> Rental Management -> Rental Contract</h4>
<p>
</div>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="contract_menu.png">
</div>
<div style="padding-left:65px;">
<span>&#9755; This is the Rental Contract form. You can see the Recurring lines created according to
the Recurring cost. And also you can see all the invoices related to this contract from the smart
button "Invoices".</span>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Checklist</h3>
<div class="" style="text-align: center">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height: 400px;" src="checklist_contract.png">
</div>
<span>&#9755; Checklist Tab in Rental Contract Form.</span>
</div>
<br>
<div class="" style="text-align: center">
<div class="" style="text-align: center;padding-left:65px;">
<p>
Here you can add the list of tools given with the vehicle.
When the vehicle is returned back, the checklist can be validated and helps you to identify the
tools that are not returned. The price of unreturned tools will be added to the missing tool cost.
The renter have to pay that amount and you can also add damage cost if any. Check the damages by
using the images of vehicle uploaded before the contract.
<p>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Checklist Easy Access</h3>
<div style="text-align: center">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="check_list_tree.png">
</div>
<span style="text-align: center">&#9755; No need to open all rental contract to see the checklist.</span>
</div>
<div class="" style="text-align: center">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="check_list_form.png">
</div>
<div style="padding-left:65px;">
<span>
You can also create invoice against the checklist from here.
The checklists are those which are in the checking state,
that means the ones ready for checking the operation.
If there is any damage or any missing tool, then you can charge all that from customer.</span>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Email Notifications</h3>
<div class="">
<div style="padding-left:65px;">
<span>
&#9755;The system will send email notification to notify the confirmation of contract.<br/>
&#9755;The system will notify the first payment through email.<br/>
&#9755;The system will remind all recurrent invoices through email.<br/>
<I>Note:- You should configure outgoing and incoming e-mail settings from your odoo for email service.</I>
</span>
</div>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="email3.png">
</div>
</div>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="email2.png">
</div>
</div>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="email1.png">
</div>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Contract Payment Validations</h3>
<div class="" style="text-align: center">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="rental_inv.png">
</div>
<div style="padding-left:65px;">
<span>&#9755;
Here you can see you have 4 invoices and this contract is in 'Invoice' state.
So you can set this contract to done only if all the invoices are in 'paid' state.
Otherwise it will raise a warning as follow.
</span>
</div>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="rental_validation.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Fleet Rental Analysis Report</h3>
<div class="" style="text-align: center">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="report.png">
</div>
<span>&#9755;
You can also analyse all your fleet rentals from Fleet Rental -> Reports -> Fleet Rental Analysis.
</span>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Access Rights</h3>
<div class="" style="padding-left:65px;">
<span>&#9755;Fleet Manager :- Fleet manager has the complete access across the fleet rental management <br/></span>
<span>&#9755;Fleet Rental User :- Fleet rental user can read, write and create the records.</span>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<div>
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="http://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
<div>
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td>
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td>
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td>
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td>
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td>
</div>
</div>
</section>

72
fleet_rental/views/car_rental_view.xml

@ -24,6 +24,21 @@
<field eval="'fleet_scheduler'" name="function"/>
</record>
<record model="ir.ui.view" id="rental_fleet_vehicle_inherit_form_view">
<field name="name">fleet.vehicle.form.inherit.view</field>
<field name="model">fleet.vehicle</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_view_form"/>
<field name="arch" type="xml">
<field name="car_value" position="after">
<field name="rental_check_availability" invisible="1"/>
<field name="rental_reserved_time" invisible="1"/>
</field>
<field name="color" position="replace">
<field name="color" widget="color"/>
</field>
</field>
</record>
<record id="car_rental_contract_form_view" model="ir.ui.view">
<field name="name">car.contract.result.form</field>
<field name="model">car.rental.contract</field>
@ -33,8 +48,10 @@
<header>
<button name="action_confirm" string="Confirm" type="object"
attrs="{'invisible': [('state', '!=', 'draft')]}" class="oe_highlight"/>
<button name="action_run" string="Run" type="object"
attrs="{'invisible': [('state', '!=', 'reserved')]}" class="oe_highlight"/>
<button name="action_cancel" string="Cancel" type="object"
attrs="{'invisible': [('state', '!=', 'draft')]}" class="oe_highlight"/>
attrs="{'invisible': [('state', 'not in', ('draft', 'reserved'))]}" class="oe_highlight"/>
<button name="action_invoice_create" string="Create Invoice"
attrs="{'invisible': ['|',('state', '!=', 'running'),
('first_invoice_created','=',True)]}" type="object" class="oe_highlight"/>
@ -60,25 +77,19 @@
<group>
<separator string="Contract Details " colspan="4" />
<group>
<field name="customer_id" string="Customer"
attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="vehicle_id" domain="[('state_id', 'not in', ('Rent', 'Sold', 'Inactive'))]"
attrs="{'readonly': [('state','!=','draft')]}" widget="selection"/>
<label for="cost_generated"/>
<div>
<field name="cost_frequency" class="oe_inline"
attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="cost_generated" style="width:142px;"
attrs="{'invisible': [('cost_frequency','=','no')],
'readonly': [('state','!=','draft')]}"/>
</div>
<field name="customer_id" string="Customer" attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="rent_start_date" attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="rent_end_date" attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="vehicle_id" domain="[('rental_check_availability','=',True),
('state_id.name','!=','Inactive')]"
options="{'no_create': True}"/>
<field name="journal_type" invisible="1" />
<field name="check_verify" invisible="1" />
<field name="sales_person" attrs="{'readonly': [('state','!=','draft')]}"/>
</group>
<group>
<field name="car_brand" attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="car_color" attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="car_brand"/>
<field name="car_color" widget="color"/>
<field name="first_invoice_created" invisible="1"/>
<label for="first_payment"/>
<div>
@ -88,30 +99,30 @@
<field name="first_payment_inv" style="width:142px;" readonly="1"/>
</div>
<field name="account_type" invisible="1"/>
</group>
</group>
<group>
<separator string="Rental Information"/>
<group colspan="2">
<group>
<field name="rent_start_date" attrs="{'readonly': [('state','!=','draft')]}"/>
</group>
<group>
<field name="rent_end_date" attrs="{'readonly': [('state','=','done')]}"/>
<field name="cost" invisible="1"/>
</group>
<label for="cost_generated"/>
<div>
<field name="cost_frequency" class="oe_inline"
attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="cost_generated" style="width:142px;"
attrs="{'invisible': [('cost_frequency','=','no')],
'readonly': [('state','!=','draft')],
'required': [('cost_frequency','not in',[None,False,'no'])]}"/>
</div>
</group>
</group>
<notebook>
<page string="Recurring Invoices">
<page string="Recurring Invoices" attrs="{'invisible': [('cost_frequency','in',[None,False,'no'])]}">
<field name="recurring_line" mode="tree">
<tree string="Fleet Reccurring Lines"
colors="#0b7a35:payment_info=='paid';#f20b07:payment_info!='paid'">
<field name="date_today"/>
<field name="date_due"/>
<field name="name"/>
<field name="account_info"/>
<field name="recurring_amount"/>
<field name="payment_info"/>
<field name="invoice_ref"/>
</tree>
</field>
</page>
@ -121,14 +132,14 @@
<field name="attachment_ids" widget="many2many_binary" class="oe_inline"/>
</group>
<group>
<field name="damage_cost"
attrs="{'invisible': [('state','!=','checking')]}"/>
<field name="damage_cost" attrs="{'invisible': [('state','!=','checking')]}"/>
</group>
</group>
<field name="checklist_line">
<tree string="Fleet Checklist Lines" editable="bottom">
<field name="name"/>
<field name="checklist_active"/>
<field name="checklist_number" invisible="True"/>
<field name="price"/>
</tree>
<form>
@ -193,7 +204,6 @@
<field name="name">Rental Contract</field>
<field name="res_model">car.rental.contract</field>
<field name="view_type">form</field>
<field name="domain">[('sales_person','=', uid)]</field>
<field name="view_mode">tree,form</field>
</record>

8
fleet_rental/views/car_tools_view.xml

@ -6,7 +6,7 @@
<field name="model">car.tools</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="car_tools_form">
<form string="Accessories/Tools">
<sheet>
<group>
<group>
@ -26,7 +26,7 @@
<field name="model">car.tools</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="car_tools_tree">
<tree string="Accessories/Tools">
<field name="name"/>
<field name="price"/>
</tree>
@ -34,13 +34,13 @@
</record>
<record id="action_fleet_car_tools" model="ir.actions.act_window">
<field name="name">Tools</field>
<field name="name">Accessories/Tools</field>
<field name="res_model">car.tools</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="menu_car_tools" parent="menu_car_parent" name="Tools"
<menuitem id="menu_car_tools" parent="menu_car_parent" name="Accessories/Tools"
action="action_fleet_car_tools" sequence="3"/>
</data>
</odoo>

11
fleet_rental/views/checklist_view.xml

@ -9,17 +9,20 @@
<form string="car_checklist2" create="false">
<header>
<button name="action_verify" string="Create invoice" type="object"
attrs="{'invisible': [('state', '!=', 'checking')]}" class="oe_highlight"/>
attrs="{'invisible': ['|',('state','!=', 'checking'),('check_verify','=',True)]}" class="oe_highlight"/>
<field name="state" widget="statusbar" statusbar_visible="checking"/>
</header>
<sheet>
<group>
<group>
<field name="name" string="Contract" readonly="1"/>
<field name="attachment_ids" widget="many2many_binary" class="oe_inline" readonly="1"/>
<field name="customer_id" string="Customer" readonly="1"/>
<field name="vehicle_id" string="Vehicle" readonly="1"/>
<field name="check_verify" invisible="1"/>
</group>
<group>
<field name="damage_cost"/>
<field name="attachment_ids" widget="many2many_binary" class="oe_inline" readonly="1"/>
</group>
</group>
<notebook>
@ -53,7 +56,7 @@
<field name="arch" type="xml">
<tree string="car_contract_result2" create="false" colors="#f20b07:state=='checking';green:state=='running'" decoration-info="state == 'draft'">
<field name="name" string="Contract"/>
<field name="name" string="Renter"/>
<field name="customer_id" string="Renter"/>
<field name="state"/>
</tree>
</field>
@ -64,7 +67,7 @@
<field name="res_model">car.rental.contract</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state', 'in', ('running', 'checking')), ('sales_person','=', uid)]</field>
<field name="domain">[('state', 'in', ('running', 'checking'))]</field>
<field name="view_id" ref="car_rental_contract_checklist_form_view"/>
</record>

Loading…
Cancel
Save