diff --git a/website_fleet_service/README.rst b/website_fleet_service/README.rst new file mode 100644 index 000000000..e8b803afb --- /dev/null +++ b/website_fleet_service/README.rst @@ -0,0 +1,45 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Website Fleet Service +===================== +This module helps Users to book the Car services through online. + +Configuration +============0 +* No additional configurations needed + +License +------- +Affero General Public License, Version 3 (AGPL v3). +https://www.gnu.org/licenses/agpl-3.0-standalone.html + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developer : (V15) Jumana Haseen, Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/website_fleet_service/__init__.py b/website_fleet_service/__init__.py new file mode 100644 index 000000000..e42d94832 --- /dev/null +++ b/website_fleet_service/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from . import controllers +from . import models diff --git a/website_fleet_service/__manifest__.py b/website_fleet_service/__manifest__.py new file mode 100644 index 000000000..0c415c7f7 --- /dev/null +++ b/website_fleet_service/__manifest__.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +############################################################################### +{ + "name": "Website Fleet Service", + "version": "15.0.1.0.0", + "category": "Website", + "summary": """Car booking service through Website.""", + "description": """This module helps Users to book the Car services through + online.""", + "author": "Cybrosys Techno Solutions", + "company": "Cybrosys Techno Solutions", + "maintainer": "Cybrosys Techno Solutions", + "website": "https://www.cybrosys.com", + "depends": ["website", "fleet_car_workshop", "account"], + "data": [ + "security/website_fleet_service_security.xml", + "security/ir.model.access.csv", + "data/ir_sequence_data.xml", + "data/service_type_data.xml", + "data/website_fleet_service_menu_data.xml", + "views/service_booking_views.xml", + "views/service_package_views.xml", + "views/service_type_views.xml", + "views/service_worksheet_views.xml", + "views/website_service_booking_templates.xml", + "views/website_service_package_templates.xml", + "views/website_service_booking_portal_templates.xml", + ], + "assets": { + "web.assets_frontend": [ + "website_fleet_service/static/src/css/website_service.css", + "website_fleet_service/static/src/js/website_service.js", + ], + }, + "images": ["static/description/banner.png"], + "license": "AGPL-3", + "installable": True, + "auto_install": False, + "application": True, +} diff --git a/website_fleet_service/controllers/__init__.py b/website_fleet_service/controllers/__init__.py new file mode 100644 index 000000000..1c4b23813 --- /dev/null +++ b/website_fleet_service/controllers/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from . import portal +from . import website_fleet_service diff --git a/website_fleet_service/controllers/portal.py b/website_fleet_service/controllers/portal.py new file mode 100644 index 000000000..107a78651 --- /dev/null +++ b/website_fleet_service/controllers/portal.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from odoo import http +from odoo.http import request +from odoo.addons.portal.controllers import portal + + +class CustomerPortal(portal.CustomerPortal): + """Class to count total number of service created""" + def _prepare_home_portal_values(self, counters): + """Function to add total service created by the current user""" + values = super()._prepare_home_portal_values(counters) + if "contact_count" in counters: + values["contact_count"] = ( + request.env["service.booking"] + .sudo() + .search_count( + [("partner_id.id", "=", request.env.user.commercial_partner_id.id)] + ) + ) + return values + + @http.route(["/service_portal"], type="http", auth="public", website=True) + def car_service_portal(self): + """Function to create the tree view car service""" + service_booking = ( + request.env["service.booking"] + .sudo() + .search([("partner_id.id", "=", request.env.user.commercial_partner_id.id)]) + ) + return request.render( + "website_fleet_service.portal_car_service", + {"car_service_portal": service_booking, "page_name": "car_service_booking"}, + ) + + @http.route( + ['/service_portal/'], + type="http", + auth="public", + website=True, + ) + def service_portal(self, contract): + """Function to add form view of the car service""" + car_service_ids = request.env["service.booking"].sudo().browse(contract.id) + service_worksheet_ids = ( + request.env["service.worksheet"] + .sudo() + .search([("service_booking_id", "=", contract.id)]) + ) + return http.request.render( + "website_fleet_service.portal_car_service_details", + { + "car_service_ids": car_service_ids, + "service_worksheet_ids": service_worksheet_ids, + "page_name": "service_portal", + }, + ) diff --git a/website_fleet_service/controllers/website_fleet_service.py b/website_fleet_service/controllers/website_fleet_service.py new file mode 100644 index 000000000..83d6c10ef --- /dev/null +++ b/website_fleet_service/controllers/website_fleet_service.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from odoo import http +from odoo.http import request + + +class WebsiteFleetService(http.Controller): + """Class to add car service booking menu in website""" + @http.route("/service_booking", type="http", auth="public", website=True) + def service_booking(self): + """Function to render car service booking values to XML""" + vehicle_ids = ( + request.env["fleet.vehicle.model"] + .sudo() + .search([("vehicle_type", "=", "car")]) + ) + service_type_ids = request.env["service.package"].sudo().search([]) + return http.request.render( + "website_fleet_service.car_service_booking_page", + {"vehicle_ids": vehicle_ids, "service_type_ids": service_type_ids}, + ) + + @http.route("/service_booking/submit", type="http", auth="public", website=True) + def success_page(self, **post): + """Function to create booking and return to success page""" + booking_id = ( + request.env["service.booking"] + .sudo() + .create( + { + "partner_id": request.env.user.partner_id.id, + "model_id": post.get("vehicle_model"), + "vehicle_no": post.get("vehicle_no"), + "service_package_id": post.get("service_type"), + "date": post.get("date"), + "location": post.get("location"), + "number": post.get("number"), + "special_instruction": post.get("instruction"), + } + ) + ) + return request.render( + "website_fleet_service.car_service_booking_success_page", + {"booking_id": booking_id}, + ) + + @http.route("/service_package", type="http", auth="public", website=True) + def service_package_details(self): + """Function to render values to XML""" + service_package_ids = request.env["service.package"].sudo().search([]) + service_line_ids = request.env["service.line"].sudo().search([]) + return http.request.render( + "website_fleet_service.service_package_page", + { + "service_package_ids": service_package_ids, + "service_line_ids": service_line_ids, + }, + ) diff --git a/website_fleet_service/data/ir_sequence_data.xml b/website_fleet_service/data/ir_sequence_data.xml new file mode 100644 index 000000000..a406b708c --- /dev/null +++ b/website_fleet_service/data/ir_sequence_data.xml @@ -0,0 +1,13 @@ + + + + + + Service Booking Sequence + service.booking + CS + 5 + + + + diff --git a/website_fleet_service/data/service_type_data.xml b/website_fleet_service/data/service_type_data.xml new file mode 100644 index 000000000..72e6e0130 --- /dev/null +++ b/website_fleet_service/data/service_type_data.xml @@ -0,0 +1,90 @@ + + + + + + check the engine oil + 10 + + + Oil filter replacement + 20 + + + Fuel filter replacement + 21 + + + Replace the spark plugs + 25 + + + Refill Brake fluid + 30 + + + Refill Clutch fluid + 28 + + + check brake discs / Drums + 30 + + + Verify the Charging systems + 35 + + + Check power steering fluid + 31 + + + Inspect timing belt or timing chain + 45 + + + Check tire Conditions + 47 + + + Change the engine oil + 43 + + + Air filter replacement + 30 + + + Replace the airconfilter + 18 + + + Check brake pades / liners + 20 + + + verify coolant hoses + 26 + + + check the battery + 20 + + + Verify A/M transmission fluid + 39 + + + Grease and lubricate components + 54 + + + Replace timing belt or timing chain + 90 + + + Check lights, Wipers and others + 50 + + + diff --git a/website_fleet_service/data/website_fleet_service_menu_data.xml b/website_fleet_service/data/website_fleet_service_menu_data.xml new file mode 100644 index 000000000..4ee1741e3 --- /dev/null +++ b/website_fleet_service/data/website_fleet_service_menu_data.xml @@ -0,0 +1,18 @@ + + + + + + Car Service Booking + /service_booking + + 50 + + + Service Package + /service_package + + 51 + + + diff --git a/website_fleet_service/doc/RELEASE_NOTES.md b/website_fleet_service/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..e88cc3b76 --- /dev/null +++ b/website_fleet_service/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 11.09.2024 +#### Version 15.0.1.0.0 +##### ADD +- Initial commit for Website Fleet Service diff --git a/website_fleet_service/models/__init__.py b/website_fleet_service/models/__init__.py new file mode 100644 index 000000000..0d982f482 --- /dev/null +++ b/website_fleet_service/models/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from . import account_move +from . import service_booking +from . import service_type +from . import service_package +from . import service_worksheet diff --git a/website_fleet_service/models/account_move.py b/website_fleet_service/models/account_move.py new file mode 100644 index 000000000..4529918ac --- /dev/null +++ b/website_fleet_service/models/account_move.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from odoo import models + + +class AccountMove(models.Model): + """Inherit the class account_move""" + _inherit = "account.move" + + def action_post(self): + """Super the action_post() to change service_booking state into + invoice""" + res = super(AccountMove, self).action_post() + if self: + if self.invoice_origin in self.env["service.booking"].search([]).mapped( + "reference_no" + ): + booking_id = self.env["service.booking"].search( + [("reference_no", "=", self.invoice_origin)] + ) + amount = sum( + self.search( + [ + ("invoice_origin", "=", booking_id.reference_no), + ("state", "!=", "cancel"), + ] + ).mapped("amount_untaxed_signed") + ) + if booking_id.service_package_price == amount: + booking_id.write({"state": "invoice"}) + return res + + def button_cancel(self): + """Inherit the 'button_cancel' method to update related service + bookings' states when an invoice is canceled.""" + result = super(AccountMove, self).button_cancel() + if self.invoice_origin in self.env["service.booking"].search([]).mapped( + "reference_no" + ): + booking_id = self.env["service.booking"].search( + [("reference_no", "=", self.invoice_origin)] + ) + booking_id.write({"state": "confirm"}) + return result + + def button_draft(self): + """Inherit the 'button_draft' method to set related 'service.booking' + records to 'to_invoice' state.This method first calls the super method + to revert the invoice to 'draft' state.It then checks if the invoice is + linked to any 'service.booking' records. + If so, it sets the 'state' of those records to 'to_invoice' to indicate + that they need to be invoiced. + :return: Result of the 'button_draft' method""" + result = super(AccountMove, self).button_draft() + if self.invoice_origin in self.env["service.booking"].search([]).mapped( + "reference_no" + ): + booking_id = self.env["service.booking"].search( + [("reference_no", "=", self.invoice_origin)] + ) + booking_id.write({"state": "to_invoice"}) + return result diff --git a/website_fleet_service/models/service_booking.py b/website_fleet_service/models/service_booking.py new file mode 100644 index 000000000..1653ebb6f --- /dev/null +++ b/website_fleet_service/models/service_booking.py @@ -0,0 +1,221 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from odoo import _, api, fields, models +from odoo.exceptions import UserError + + +class ServiceBooking(models.Model): + """Class to add car service booking""" + _name = "service.booking" + _inherit = "mail.thread", "mail.activity.mixin" + _description = "Service Booking" + _rec_name = "reference_no" + + reference_no = fields.Char( + string="Order Reference", + readonly=True, + copy=False, + default=lambda self: _("New"), + help="This field represents the reference number of the order.") + vehicle_no = fields.Char(string="Vehicle Number", help="Enter vehicle number") + partner_id = fields.Many2one( + "res.partner", string="Customer", required=True, help="Select Customer name") + number = fields.Char(string="Mobile No", help="Enter your Mobile Number") + model_id = fields.Many2one( + comodel_name="fleet.vehicle.model", + string="Vehicle Model", + domain=[("vehicle_type", "=", "car")], + required=True, + help="Select your Car Model") + date = fields.Date(string="Date", required=True, help="Service Date") + service_package_id = fields.Many2one( + "service.package", + string="Service Package", + required=True, + help="Select service Package") + service_package_price = fields.Monetary( + string="Amount", + related="service_package_id.total", + help="Service type total amount") + location = fields.Char(string="Location", help="Enter your Current location") + special_instruction = fields.Text( + string="Any Special Instructions", + help="If you have any special instruction to add") + task_count = fields.Integer( + string="Task", + compute="compute_task_count", + help="This field represents the number of tasks associated with this " + "record.") + service_worksheet_ids = fields.One2many( + "service.worksheet", + "service_booking_id", + string="Worksheet", + help="Service worksheets related to this service booking.") + invoice_count = fields.Integer( + string="Invoice Count", + compute="compute_invoice_count", + help="Number of invoices associated with this record.") + company_id = fields.Many2one( + "res.company", + string="Company", + required=True, + default=lambda self: self.env.user.company_id.id, + help="Select the company to which this record belongs.") + currency_id = fields.Many2one( + "res.currency", + string="Currency", + related="company_id.currency_id", + help="The currency used by the company.") + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("confirm", "Confirm"), + ("to_invoice", "To Invoice"), + ("invoice", "Invoice"), + ], + string="State", + default="draft", + help="State of the record: Draft, Confirm, or " "Invoice.") + + def compute_task_count(self): + """Function to calculate task count""" + for vehicle in self: + vehicle.task_count = vehicle.env["service.worksheet"].search_count( + [("service_booking_id", "=", self.id)] + ) + + def action_view_worksheet(self): + """Smart button to view the corresponding worksheet of service + booking""" + return { + "type": "ir.actions.act_window", + "name": "Worksheet", + "view_mode": "tree,form", + "res_model": "service.worksheet", + "target": "current", + "domain": [("service_booking_id", "=", self.id)], + "context": {"create": False}, + } + + @api.model + def create(self, vals): + """Function to create sequence""" + if vals.get("reference_no", _("New")) == _("New"): + vals["reference_no"] = self.env["ir.sequence"].next_by_code( + "service.booking" + ) or _("New") + return super(ServiceBooking, self).create(vals) + + def action_confirm(self): + """Function to create worksheet for the service""" + self.write({"state": "confirm"}) + for service_type_id in self.service_package_id.service_ids.service_type_id: + self.env["service.worksheet"].create( + { + "model_id": self.model_id.id, + "service_type_id": service_type_id.id, + "service_booking_id": self.id, + "user_id": self.env.user.id, + } + ) + + def action_create_invoice(self): + """Function to create invoice""" + self.write({"state": "to_invoice"}) + invoiced_amount = sum( + self.env["account.move"] + .search( + [("invoice_origin", "=", self.reference_no), ("state", "!=", "cancel")] + ) + .mapped("amount_untaxed_signed") + ) + invoice = self.env["account.move"].create( + [ + { + "move_type": "out_invoice", + "partner_id": self.partner_id.id, + "invoice_origin": self.reference_no, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": "{} / {} / Service Package: {}".format( + self.model_id.name, + self.vehicle_no, + self.service_package_id.name, + ), + "quantity": 1, + "price_unit": self.service_package_price + - invoiced_amount, + "price_subtotal": self.service_package_price + - invoiced_amount, + }, + ) + ], + } + ] + ) + return { + "name": "invoice", + "view_mode": "form", + "res_id": invoice.id, + "res_model": "account.move", + "type": "ir.actions.act_window", + "target": "current", + } + + def compute_invoice_count(self): + """Function to count invoice""" + for record in self: + record.invoice_count = self.env["account.move"].search_count( + [("invoice_origin", "=", self.reference_no)] + ) + + def action_view_invoice(self): + """Action method to view invoices related to the current record. + :return: Action dictionary""" + return { + "type": "ir.actions.act_window", + "name": "Invoice", + "view_mode": "tree,form", + "res_model": "account.move", + "target": "current", + "domain": [("invoice_origin", "=", self.reference_no)], + "context": {"create": False}, + } + + def unlink(self): + """Inherit the 'unlink' method to prevent the deletion of confirmed or + invoiced records. + This method ensures that records in the 'confirmed' or 'invoiced' state + cannot be deleted. + If any of the selected records are in these states, it raises a user + error to prevent deletion. + :raises UserError: If any record is in the 'confirmed' or 'invoiced' + state, preventing deletion. + :return: Result of the 'unlink' method""" + for rec in self: + if rec.state != "draft": + raise UserError( + _("You can not delete a confirmed or a Invoiced service booking.") + ) + return super().unlink() diff --git a/website_fleet_service/models/service_package.py b/website_fleet_service/models/service_package.py new file mode 100644 index 000000000..11376e178 --- /dev/null +++ b/website_fleet_service/models/service_package.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from odoo import api, fields, models + + +class ServicePackage(models.Model): + """Class to add car service package""" + _name = "service.package" + _description = "Service Package" + + name = fields.Char( + string="Service Name", required=True, help="Enter service package name") + service_ids = fields.One2many( + "service.line", + "service_package_id", + string="Service Line", + help="Select the services associated with this record.") + total = fields.Monetary( + string="Total", + compute="compute_total", + store=True, + help="Service package total amount") + company_id = fields.Many2one( + "res.company", + string="Company", + required=True, + default=lambda self: self.env.user.company_id.id, + help="Select the company to which this record " "belongs.") + currency_id = fields.Many2one( + "res.currency", + string="Currency", + related="company_id.currency_id", + help="The currency used by the company.") + + @api.depends("service_ids.price") + def compute_total(self): + """Function to calculate total of service line""" + for record in self: + record.total = sum(self.service_ids.mapped("price")) + + +class ServiceLine(models.Model): + """Class to add related field""" + _name = "service.line" + _description = "Service Line" + + service_package_id = fields.Many2one( + "service.package", string="service Package", help="Select service package") + service_type_id = fields.Many2one( + "service.type", + string="Service Type", + help="Add service type include " "in this package", + required=True) + price = fields.Monetary( + string="Price", related="service_type_id.amount", help="Service type price") + company_id = fields.Many2one( + "res.company", + string="Company", + required=True, + default=lambda self: self.env.user.company_id.id, + help="Select the company to which this record belongs.") + currency_id = fields.Many2one( + "res.currency", + string="Currency", + related="company_id.currency_id", + help="The currency used by the company.") diff --git a/website_fleet_service/models/service_type.py b/website_fleet_service/models/service_type.py new file mode 100644 index 000000000..2d229fce0 --- /dev/null +++ b/website_fleet_service/models/service_type.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from odoo import fields, models + + +class ServiceType(models.Model): + """Class to add service types""" + _name = "service.type" + _description = "Service Type" + + name = fields.Char( + string="Service Type", help="Enter name of the service", required=True) + amount = fields.Monetary(string="Amount", required=True, help="Service amount") + company_id = fields.Many2one( + "res.company", + string="Company", + required=True, + default=lambda self: self.env.user.company_id.id, + help="Select the company to which this record belongs.") + currency_id = fields.Many2one( + "res.currency", + string="Currency", + related="company_id.currency_id", + help="The currency used by the company.") diff --git a/website_fleet_service/models/service_worksheet.py b/website_fleet_service/models/service_worksheet.py new file mode 100644 index 000000000..066b43b28 --- /dev/null +++ b/website_fleet_service/models/service_worksheet.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Jumana Haseen (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +################################################################################ +from odoo import fields, models + + +class ServiceWorksheet(models.Model): + """Class to add car service worksheet""" + _name = "service.worksheet" + _description = "Service Worksheet" + _rec_name = "model_id" + + service_type_id = fields.Many2one( + "service.type", + string="Service Type", + required=True, + help="select the service package") + model_id = fields.Many2one( + "fleet.vehicle.model", + string="Vehicle Model", + domain=[("vehicle_type", "=", "car")], + help="Select the Car model") + user_id = fields.Many2one( + "res.users", string="Assigned to", help="Work assigned person") + tag_ids = fields.Many2many( + "worksheet.tags", string="Tags", ondelete="cascade", help="Select tags") + description = fields.Html( + string="Description", help="Add any description of the service") + service_booking_id = fields.Many2one( + "service.booking", + string="Service Booking", + help="Select the service booking associated with this record.") + company_id = fields.Many2one( + "res.company", + string="Company", + required=True, + default=lambda self: self.env.user.company_id.id, + help="Select the company to which this record belongs.") + state = fields.Selection( + selection=[("draft", "Draft"), ("done", "Done")], + default="draft", + string="State", + help="The current state of the record.") + + def action_done(self): + """Function to change state to done""" + self.write({"state": "done"}) diff --git a/website_fleet_service/security/ir.model.access.csv b/website_fleet_service/security/ir.model.access.csv new file mode 100644 index 000000000..ff9d6bba9 --- /dev/null +++ b/website_fleet_service/security/ir.model.access.csv @@ -0,0 +1,11 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_service_booking,access.service.booking,model_service_booking,fleet.fleet_group_user,1,0,0,0 +access_service_package,access.service.package,model_service_package,fleet.fleet_group_user,1,0,0,0 +access_service_type,access.service.type,model_service_type,fleet.fleet_group_user,1,0,0,0 +access_service_line,access.service.line,model_service_line,fleet.fleet_group_user,1,0,0,0 +access_service_worksheet,access.service.worksheet,model_service_worksheet,fleet.fleet_group_user,1,0,0,0 +access_service_booking,access.service.booking,model_service_booking,fleet.fleet_group_manager,1,1,1,1 +access_service_package,access.service.package,model_service_package,fleet.fleet_group_manager,1,1,1,1 +access_service_type,access.service.type,model_service_type,fleet.fleet_group_manager,1,1,1,1 +access_service_line,access.service.line,model_service_line,fleet.fleet_group_manager,1,1,1,1 +access_service_worksheet,access.service.worksheet,model_service_worksheet,fleet.fleet_group_manager,1,1,1,1 diff --git a/website_fleet_service/security/website_fleet_service_security.xml b/website_fleet_service/security/website_fleet_service_security.xml new file mode 100644 index 000000000..797d05830 --- /dev/null +++ b/website_fleet_service/security/website_fleet_service_security.xml @@ -0,0 +1,22 @@ + + + + + + Service Booking multi company rule + + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + + + Service Worksheet multi company rule + + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + + + diff --git a/website_fleet_service/static/description/assets/icons/check.png b/website_fleet_service/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/check.png differ diff --git a/website_fleet_service/static/description/assets/icons/chevron.png b/website_fleet_service/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/chevron.png differ diff --git a/website_fleet_service/static/description/assets/icons/cogs.png b/website_fleet_service/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/cogs.png differ diff --git a/website_fleet_service/static/description/assets/icons/consultation.png b/website_fleet_service/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/consultation.png differ diff --git a/website_fleet_service/static/description/assets/icons/ecom-black.png b/website_fleet_service/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/ecom-black.png differ diff --git a/website_fleet_service/static/description/assets/icons/education-black.png b/website_fleet_service/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/education-black.png differ diff --git a/website_fleet_service/static/description/assets/icons/hotel-black.png b/website_fleet_service/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/hotel-black.png differ diff --git a/website_fleet_service/static/description/assets/icons/license.png b/website_fleet_service/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/license.png differ diff --git a/website_fleet_service/static/description/assets/icons/lifebuoy.png b/website_fleet_service/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/lifebuoy.png differ diff --git a/website_fleet_service/static/description/assets/icons/manufacturing-black.png b/website_fleet_service/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/manufacturing-black.png differ diff --git a/website_fleet_service/static/description/assets/icons/pos-black.png b/website_fleet_service/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/pos-black.png differ diff --git a/website_fleet_service/static/description/assets/icons/puzzle.png b/website_fleet_service/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/puzzle.png differ diff --git a/website_fleet_service/static/description/assets/icons/restaurant-black.png b/website_fleet_service/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/restaurant-black.png differ diff --git a/website_fleet_service/static/description/assets/icons/service-black.png b/website_fleet_service/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/service-black.png differ diff --git a/website_fleet_service/static/description/assets/icons/trading-black.png b/website_fleet_service/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/trading-black.png differ diff --git a/website_fleet_service/static/description/assets/icons/training.png b/website_fleet_service/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/training.png differ diff --git a/website_fleet_service/static/description/assets/icons/update.png b/website_fleet_service/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/update.png differ diff --git a/website_fleet_service/static/description/assets/icons/user.png b/website_fleet_service/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/user.png differ diff --git a/website_fleet_service/static/description/assets/icons/wrench.png b/website_fleet_service/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/website_fleet_service/static/description/assets/icons/wrench.png differ diff --git a/website_fleet_service/static/description/assets/misc/categories.png b/website_fleet_service/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/categories.png differ diff --git a/website_fleet_service/static/description/assets/misc/check-box.png b/website_fleet_service/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/check-box.png differ diff --git a/website_fleet_service/static/description/assets/misc/compass.png b/website_fleet_service/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/compass.png differ diff --git a/website_fleet_service/static/description/assets/misc/corporate.png b/website_fleet_service/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/corporate.png differ diff --git a/website_fleet_service/static/description/assets/misc/customer-support.png b/website_fleet_service/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/customer-support.png differ diff --git a/website_fleet_service/static/description/assets/misc/cybrosys-logo.png b/website_fleet_service/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/cybrosys-logo.png differ diff --git a/website_fleet_service/static/description/assets/misc/features.png b/website_fleet_service/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/features.png differ diff --git a/website_fleet_service/static/description/assets/misc/logo.png b/website_fleet_service/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/logo.png differ diff --git a/website_fleet_service/static/description/assets/misc/pictures.png b/website_fleet_service/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/pictures.png differ diff --git a/website_fleet_service/static/description/assets/misc/pie-chart.png b/website_fleet_service/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/pie-chart.png differ diff --git a/website_fleet_service/static/description/assets/misc/right-arrow.png b/website_fleet_service/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/right-arrow.png differ diff --git a/website_fleet_service/static/description/assets/misc/star.png b/website_fleet_service/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/star.png differ diff --git a/website_fleet_service/static/description/assets/misc/support.png b/website_fleet_service/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/support.png differ diff --git a/website_fleet_service/static/description/assets/misc/whatsapp.png b/website_fleet_service/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/website_fleet_service/static/description/assets/misc/whatsapp.png differ diff --git a/website_fleet_service/static/description/assets/modules/Customize-Signup.png b/website_fleet_service/static/description/assets/modules/Customize-Signup.png new file mode 100644 index 000000000..afb97d272 Binary files /dev/null and b/website_fleet_service/static/description/assets/modules/Customize-Signup.png differ diff --git a/website_fleet_service/static/description/assets/modules/Disable-Variants-in-Website.png b/website_fleet_service/static/description/assets/modules/Disable-Variants-in-Website.png new file mode 100644 index 000000000..275dad20d Binary files /dev/null and b/website_fleet_service/static/description/assets/modules/Disable-Variants-in-Website.png differ diff --git a/website_fleet_service/static/description/assets/modules/Quick-Product-Publish-Unpublish.png b/website_fleet_service/static/description/assets/modules/Quick-Product-Publish-Unpublish.png new file mode 100644 index 000000000..eac8ba1dd Binary files /dev/null and b/website_fleet_service/static/description/assets/modules/Quick-Product-Publish-Unpublish.png differ diff --git a/website_fleet_service/static/description/assets/modules/Website-HelpDesk-Dashboard.png b/website_fleet_service/static/description/assets/modules/Website-HelpDesk-Dashboard.png new file mode 100644 index 000000000..f40fbc4b0 Binary files /dev/null and b/website_fleet_service/static/description/assets/modules/Website-HelpDesk-Dashboard.png differ diff --git a/website_fleet_service/static/description/assets/modules/Website-Maintenance-Page.png b/website_fleet_service/static/description/assets/modules/Website-Maintenance-Page.png new file mode 100644 index 000000000..b0021fcf4 Binary files /dev/null and b/website_fleet_service/static/description/assets/modules/Website-Maintenance-Page.png differ diff --git a/website_fleet_service/static/description/assets/modules/Website-Return-Order-Management.png b/website_fleet_service/static/description/assets/modules/Website-Return-Order-Management.png new file mode 100644 index 000000000..611c7f8ea Binary files /dev/null and b/website_fleet_service/static/description/assets/modules/Website-Return-Order-Management.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/1.png b/website_fleet_service/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..2289b50a7 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/1.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/10.png b/website_fleet_service/static/description/assets/screenshots/10.png new file mode 100644 index 000000000..e0b97b9e2 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/10.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/11.png b/website_fleet_service/static/description/assets/screenshots/11.png new file mode 100644 index 000000000..2dab3e782 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/11.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/12.png b/website_fleet_service/static/description/assets/screenshots/12.png new file mode 100644 index 000000000..3b9577985 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/12.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/2.png b/website_fleet_service/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..0c9ae6697 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/2.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/3.png b/website_fleet_service/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..bc3dee827 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/3.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/4.png b/website_fleet_service/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..eb1165fde Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/4.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/5.png b/website_fleet_service/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..b7d1c6886 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/5.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/6.png b/website_fleet_service/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..03e7e2a39 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/6.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/7.png b/website_fleet_service/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..9d0c3eee7 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/7.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/8.png b/website_fleet_service/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..91d741d8a Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/8.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/9.png b/website_fleet_service/static/description/assets/screenshots/9.png new file mode 100644 index 000000000..69cb4f8f1 Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/9.png differ diff --git a/website_fleet_service/static/description/assets/screenshots/hero.gif b/website_fleet_service/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..e244f037b Binary files /dev/null and b/website_fleet_service/static/description/assets/screenshots/hero.gif differ diff --git a/website_fleet_service/static/description/banner.png b/website_fleet_service/static/description/banner.png new file mode 100644 index 000000000..02fc70f50 Binary files /dev/null and b/website_fleet_service/static/description/banner.png differ diff --git a/website_fleet_service/static/description/icon.png b/website_fleet_service/static/description/icon.png new file mode 100644 index 000000000..8ded62a11 Binary files /dev/null and b/website_fleet_service/static/description/icon.png differ diff --git a/website_fleet_service/static/description/index.html b/website_fleet_service/static/description/index.html new file mode 100644 index 000000000..7f8f88e9c --- /dev/null +++ b/website_fleet_service/static/description/index.html @@ -0,0 +1,659 @@ +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+
+ +
+
+
+ +

+ Website Fleet Service

+

+ Detailed Website Fleet Service View.

+ + +
+
+
+
+ +
+
+ +
+

+ Explore This + Module

+
+ + + +
+
+ +
+

+ Overview +

+
+
+
+ This module allows users to book car services online through the customer portal. + It is available on both desktop and mobile views and supports Odoo 15 community and enterprise editions. +
+
+ + +
+
+ +
+

+ Features +

+
+
+
+
+ + Dedicated Website view for Users. +
+
+ + Allow Users to easily Book Car Services. +
+
+ + Service Package menu in Website. +
+
+ + Portal View for the Users. +
+
+ + Available in Odoo 15.0 Community and Enterprise. +
+
+
+ + +
+
+ +
+

+ Screenshots +

+
+
+
+
+

+ Service Type.

+

+ To create service types navigate to Configuration -> Service Type. +

+ +
+
+

+ Service Package.

+

Navigate to Configuration -> Service Package. Add the package name and service types to be included in the package. + Total cost will be automatically calculated based on the costs of the service types.

+ +
+
+

+ Service Booking. +

+

+ To create service booking navigate to Service -> Service Booking and fill the details including vehicle, service package etc. +

+ +
+
+

+ Service Worksheet is Automatically Added. +

+ + +
+
+

+ Service Packages in Website. +

+ +
+
+

+ Service Booking in Website. +

+

+ Create new service booking from the website. +

+ +
+
+

+ Car Service Menu in the Customer Portal. +

+ +
+
+

+ Customer will be able to View the Service Bookings.

+ +
+
+
+ + + +
+
+ +
+

+ Related Products +

+
+
+
+ +
+
+ + +
+
+ +
+

+ Our Services +

+
+
+
+
+
+ +
+
+ Odoo + Customization
+
+
+
+ +
+
+ Odoo + Implementation
+
+
+
+ +
+
+ Odoo + Support
+
+
+
+ +
+
+ Hire + Odoo + Developer
+
+
+
+ +
+
+ Odoo + Integration
+
+
+
+ +
+
+ Odoo + Migration
+
+
+
+ +
+
+ Odoo + Consultancy
+
+
+
+ +
+
+ Odoo + Implementation
+
+
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + +
+
+ +
+

+ Our + Industries +

+
+
+
+
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+
+
+ + +
+
+ +
+

+ Support +

+
+
+
+
+
+
+ +
+
+

Need Help?

+

Got questions or need + help? + Get in touch.

+ +

+ odoo@cybrosys.com

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on + WhatsApp!

+ +

+ +91 86068 + 27707

+
+
+
+
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/website_fleet_service/static/src/css/website_service.css b/website_fleet_service/static/src/css/website_service.css new file mode 100644 index 000000000..edc1bc669 --- /dev/null +++ b/website_fleet_service/static/src/css/website_service.css @@ -0,0 +1,90 @@ +.image{ +background-image:url("/website_fleet_service/static/src/img/car_service.jpg"); +background-size:cover; +height:415px; +width:600px; +margin-left:-20px; +} +h1{ +color:gray; +font-family:"Lucida consol","Courier Nem",monospace; +} +.head{ +margin-top:25px; +margin-left:60px; +} +.body{ +margin-top:-475px; +margin-left:875px; +margin-bottom:10px; +} +.link-style{ +width:500px; +height:50px; +border-color:#407ccc; +} +.button{ +width:500px; +height:50px; +background-color:#407ccc; +color:white; +border-color:#407ccc; +} +.form-group{ +padding-bottom:10px; +padding-top:10px; +} +.success{ +font-size:20px; +color:white; +text-align:center; +background-color:#407ccc; +height:75px; +padding:15px; +margin-bottom:10px; +} +.link{ +color:#407ccc; +} +table{ +border-collapse:collapse; +width:100%; +} +th,td{ +text_align:left; +padding:8px; +border: 1px solid white; +} +thead{ +background-color:#407ccc; +color:white; +} +tr:nth-child(even){ +background-color:#dcdcdc; +} +.wrap{ +overflow-y: auto; +} + +@media(max-width:790px){ +.head{ +margin-top:15px; +margin-left:11px; +} +.image{ +height:242px; +width:337px; +margin-left:-21px; +margin-top: -45px; +} +.body{ +margin-top:25px; +margin-left:2px; +} +.button{ +width:332px; +} +.link-style{ +width:332px; +} +} diff --git a/website_fleet_service/static/src/img/car_service.jpg b/website_fleet_service/static/src/img/car_service.jpg new file mode 100644 index 000000000..0e96d6064 Binary files /dev/null and b/website_fleet_service/static/src/img/car_service.jpg differ diff --git a/website_fleet_service/static/src/js/website_service.js b/website_fleet_service/static/src/js/website_service.js new file mode 100644 index 000000000..0e9b77df3 --- /dev/null +++ b/website_fleet_service/static/src/js/website_service.js @@ -0,0 +1,14 @@ +odoo.define('website_fleet_service.website_service', function(require) { + "use strict"; + var publicWidget = require('web.public.widget'); + var rpc = require('web.rpc'); + publicWidget.registry.WebsiteFleetServiceWidget = publicWidget.Widget.extend({//Extend public widget to add the total amount for te service + selector: '.website_fleet_service_widget', + events: { + 'change #service_type': function(ev) { + this.$('#amount').val($(ev.target.options[ev.target.selectedIndex]).getAttributes().amount) + }, + }, + }); + return publicWidget.registry.WebsiteFleetServiceWidget; +}); diff --git a/website_fleet_service/views/service_booking_views.xml b/website_fleet_service/views/service_booking_views.xml new file mode 100644 index 000000000..39a429d79 --- /dev/null +++ b/website_fleet_service/views/service_booking_views.xml @@ -0,0 +1,128 @@ + + + + + Service Booking + service.booking + tree,form + + + + service.booking.view.search + service.booking + + + + + + + + + + + + + + + + + + + + + + service.booking.view.tree + service.booking + + + + + + + + + + + + + service.booking.view.form + service.booking + +
+
+
+ +
+ + +
+
+

+ +

+
+ + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + + + + diff --git a/website_fleet_service/views/service_package_views.xml b/website_fleet_service/views/service_package_views.xml new file mode 100644 index 000000000..4892c4fe0 --- /dev/null +++ b/website_fleet_service/views/service_package_views.xml @@ -0,0 +1,57 @@ + + + + + Service Package + service.package + tree,form + + + + service.package.view.tree + service.package + + + + + + + + + service.package.view.form + service.package + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+
+
+
+ +
diff --git a/website_fleet_service/views/service_type_views.xml b/website_fleet_service/views/service_type_views.xml new file mode 100644 index 000000000..66eb5645a --- /dev/null +++ b/website_fleet_service/views/service_type_views.xml @@ -0,0 +1,43 @@ + + + + + Service Type + service.type + tree + + + + service.type.view.tree + service.type + + + + + + + + + + + + service.type.view.form + service.type + +
+ + + + + + + + + + +
+
+
+ +
diff --git a/website_fleet_service/views/service_worksheet_views.xml b/website_fleet_service/views/service_worksheet_views.xml new file mode 100644 index 000000000..ac39c9b2e --- /dev/null +++ b/website_fleet_service/views/service_worksheet_views.xml @@ -0,0 +1,65 @@ + + + + + Service Worksheet + service.worksheet + tree,form + + + + service.worksheet.view.tree + service.worksheet + + + + + + + + + + + + service.worksheet.view.form + service.worksheet + +
+
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + +
+ + + + + + + + diff --git a/website_fleet_service/views/website_service_booking_portal_templates.xml b/website_fleet_service/views/website_service_booking_portal_templates.xml new file mode 100644 index 000000000..23f848d8d --- /dev/null +++ b/website_fleet_service/views/website_service_booking_portal_templates.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/website_fleet_service/views/website_service_booking_templates.xml b/website_fleet_service/views/website_service_booking_templates.xml new file mode 100644 index 000000000..be2b42b19 --- /dev/null +++ b/website_fleet_service/views/website_service_booking_templates.xml @@ -0,0 +1,114 @@ + + + + + + + diff --git a/website_fleet_service/views/website_service_package_templates.xml b/website_fleet_service/views/website_service_package_templates.xml new file mode 100644 index 000000000..b662164e3 --- /dev/null +++ b/website_fleet_service/views/website_service_package_templates.xml @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file