diff --git a/courier_management/README.rst b/courier_management/README.rst new file mode 100644 index 000000000..38a270b05 --- /dev/null +++ b/courier_management/README.rst @@ -0,0 +1,51 @@ +.. image:: https://img.shields.io/badge/license-OPL--1-red.svg + :target: https://www.odoo.com/documentation/17.0/legal/licenses.html#odoo-apps + :alt: License: OPL-1 + +Courier Management +================== +This module helps you to create and manage courier requests for the courier management. + +Configuration +============= +No additional configuration required + +Company +------- +* `Cybrosys Techno Solutions `__ + + +License +------- +Odoo Proprietary License v1.0 (OPL-1) +(https://www.odoo.com/documentation/17.0/legal/licenses.html#odoo-apps) + +Credits +------- +Developer: (V15) Gayathri V, + (V16) Albin PJ + (V17) Saneen K, + (V18) Safa Faheem PE +Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://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/courier_management/__init__.py b/courier_management/__init__.py new file mode 100644 index 000000000..af409a4be --- /dev/null +++ b/courier_management/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import controllers +from . import models diff --git a/courier_management/__manifest__.py b/courier_management/__manifest__.py new file mode 100644 index 000000000..2398ccde8 --- /dev/null +++ b/courier_management/__manifest__.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +{ + 'name': 'Courier Management', + 'version': '18.0.1.0.0', + 'category': 'Extra Tools', + 'summary': """This module allows you to create and manage courier + requests""", + 'description': 'This module helps you to create and manage courier ' + 'requests for the courier management.Courier Management ' + 'module is designed to efficiently manage and track the ' + 'movement of goods or packages within your organization.' + ' This module streamlines the delivery processes,ensuring' + ' that your shipments are handled smoothly and delivered ' + 'to the right recipients in a timely manner.', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['contacts', 'mail', 'stock', 'account', 'website'], + 'data': [ + 'security/courier_management_groups.xml', + 'security/courier_request_security.xml', + 'security/ir.model.access.csv', + 'views/account_move_views.xml', + 'views/courier_request_views.xml', + 'views/courier_detail_views.xml', + 'views/courier_tag_views.xml', + 'views/courier_priority_views.xml', + 'views/courier_dimension_price_views.xml', + 'views/courier_distance_price_views.xml', + 'views/courier_weight_price_views.xml', + 'views/courier_type_views.xml', + 'views/courier_category_views.xml', + 'views/courier_management_menus.xml', + 'views/courier_request_templates.xml', + 'views/courier_request_search_group_by_templates.xml', + 'data/courier_request_data.xml', + 'report/courier_request_reports.xml', + 'report/courier_request_templates.xml' + ], + 'demo': [ + 'data/product_product_demo.xml', + 'data/courier_categories_demo.xml', + 'data/courier_priority_demo.xml', + 'data/courier_weight_price_demo.xml', + 'data/courier_dimension_price_demo.xml', + 'data/courier_distance_price_demo.xml', + 'data/courier_tag_demo.xml', + 'data/courier_type_demo.xml', + ], + 'assets': { + 'web.assets_frontend': [ + 'courier_management/static/src/js/courier_request_group_by_search.js', + ], + }, + 'images': ['static/description/banner.jpg'], + 'license': 'OPL-1', + 'price': 29, + 'currency': 'EUR', + 'installable': True, + 'auto_install': False, + 'application': True, +} diff --git a/courier_management/controllers/__init__.py b/courier_management/controllers/__init__.py new file mode 100644 index 000000000..d1fb44ff5 --- /dev/null +++ b/courier_management/controllers/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import courier_management diff --git a/courier_management/controllers/courier_management.py b/courier_management/controllers/courier_management.py new file mode 100644 index 000000000..9671fb382 --- /dev/null +++ b/courier_management/controllers/courier_management.py @@ -0,0 +1,125 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import http +from odoo.http import request +from odoo.addons.portal.controllers import portal + + +class CourierRequests(http.Controller): + """This controller is for portal""" + + def _get_courier_domain(self): + """It returns the login person""" + return [('sender_id', '=', request.env.user.partner_id.id)] + + @http.route(['/my/courier/requests'], type='http', auth="user", + website=True) + def get_my_courier_requests(self): + """Take values from courier requests and render to portal tree + template """ + domain = self._get_courier_domain() + values = { + 'courier_request': request.env['courier.request'].sudo().search( + domain), + } + return request.render( + "courier_management.portal_my_courier_requests_tree", values) + + @http.route(['/my/courier/requests/form/'], type='http', + auth="user", website=True) + def get_my_courier_request_form(self, courier_id): + """Take values from courier_request and render to portal form + template.It also passes the id in the root for rendering the + corresponding form template""" + return request.render( + "courier_management.portal_my_courier_requests_form", + {'record_courier_requests': request.env[ + 'courier.request'].sudo().browse(courier_id)}) + + @http.route(['/courier/requests/group/by'], type='json', auth="public", + website=True) + def courier_requests_group_by(self, **kwargs): + """Call from rpc for group by, and it returns the corresponding + values""" + context = [] + group_value = kwargs.get("search_value") + if group_value == '1': + context = [] + for types in request.env['courier.type'].sudo().search([]): + courier_requests_ids = request.env[ + 'courier.request'].sudo().search([ + ('type_id', '=', types.id), + ('sender_id', '=', request.env.user.partner_id.id) + ]) + if courier_requests_ids: + context.append({ + 'name': types.courier_type, + 'data': courier_requests_ids + }) + if group_value == '2': + context = [] + for categories in request.env['courier.category'].sudo().search( + []): + courier_requests_ids = request.env[ + 'courier.request'].sudo().search([ + ('category_id', '=', categories.id), + ('sender_id', '=', request.env.user.partner_id.id) + ]) + if courier_requests_ids: + context.append({ + 'name': categories.courier_category, + 'data': courier_requests_ids + }) + values = { + 'courier_request': context, + } + response = http.Response( + template='courier_management.courier_requests_group_by_template', + qcontext=values) + return response.render() + + @http.route(['/courier/requests/search'], type='json', auth="public", + website=True) + def courier_requests_search(self, **kwargs): + """It gives the values and return the response to corresponding + template""" + record = request.env["courier.request"].sudo().search( + [('name', 'ilike', f'{kwargs.get("search_value").upper()}%'), + ('sender_id', '=', request.env.user.partner_id.id)]) + response = http.Response( + template='courier_management.portal_my_certificates_search', + qcontext={'courier_request': record}) + return response.render() + + +class Return(portal.CustomerPortal): + """This will take the count of total courier requests""" + + def _prepare_home_portal_values(self, counters): + """This will return the certificates count""" + values = super(Return, self)._prepare_home_portal_values(counters) + values.update({ + 'courier_requests_count': request.env[ + 'courier.request'].sudo().search_count( + [('sender_id', '=', request.env.user.partner_id.id)]) + }) + return values diff --git a/courier_management/data/courier_categories_demo.xml b/courier_management/data/courier_categories_demo.xml new file mode 100644 index 000000000..ce53f8053 --- /dev/null +++ b/courier_management/data/courier_categories_demo.xml @@ -0,0 +1,27 @@ + + + + + + Wooden Products + + + Metals Products + + + Ceramic Products + + + Glass Products + + + Plastic Products + + + Solid Products + + + Other Products + + + diff --git a/courier_management/data/courier_dimension_price_demo.xml b/courier_management/data/courier_dimension_price_demo.xml new file mode 100644 index 000000000..21baa6839 --- /dev/null +++ b/courier_management/data/courier_dimension_price_demo.xml @@ -0,0 +1,78 @@ + + + + + + 33 X 18 X 10 + 33 + 18 + 10 + 15 + + + 33 X 32 X 10 + 33 + 32 + 10 + 15 + + + 33 X 33 X 19 + 33 + 33 + 19 + 15 + + + 33 X 33 X 35 + 33 + 33 + 35 + 25 + + + 42 X 37 X 36 + 42 + 37 + 36 + 35 + + + 49 X 41 X 39 + 49 + 41 + 39 + 50 + + + 54 X 44 X 42 + 54 + 44 + 42 + 55 + + + 50 X 50 X 50 + 50 + 50 + 50 + 60 + + + 40 X 40 X 40 + 40 + 40 + 40 + 47 + + + diff --git a/courier_management/data/courier_distance_price_demo.xml b/courier_management/data/courier_distance_price_demo.xml new file mode 100644 index 000000000..49cd75b51 --- /dev/null +++ b/courier_management/data/courier_distance_price_demo.xml @@ -0,0 +1,62 @@ + + + + + + If Distance 5.00 To 15.00 Kilometres + 5.00 + 15.00 + 20 + + + If Distance 15.00 To 30.00 Kilometres + 15.00 + 30.00 + 35 + + + If Distance 30.00 To 50.00 Kilometres + 30.00 + 50.00 + 45 + + + If Distance 50.00 To 80.00 Kilometres + 50.00 + 80.00 + 60 + + + If Distance 80.00 To 100.00 Kilometres + 80.00 + 100.00 + 75 + + + If Distance 100.00 To 130.00 Kilometres + 100.00 + 130.00 + 90 + + + If Distance 130.00 To 150.00 Kilometres + 130.00 + 150.00 + 100 + + + If Distance 150.00 To 200.00 Kilometres + 150.00 + 200.00 + 150 + + + diff --git a/courier_management/data/courier_priority_demo.xml b/courier_management/data/courier_priority_demo.xml new file mode 100644 index 000000000..6355b5eac --- /dev/null +++ b/courier_management/data/courier_priority_demo.xml @@ -0,0 +1,34 @@ + + + + + + Standard Delivery Service + 10 + + + Same Day Delivery + 20 + + + Overnight Shipping Service + 15 + + + Rush And On-Demand Deliveries + 25 + + + Parsel Service + 20 + + + Luggage Delivery Service + 18 + + + Expensed Service + 100 + + + diff --git a/courier_management/data/courier_request_data.xml b/courier_management/data/courier_request_data.xml new file mode 100644 index 000000000..bd89422b6 --- /dev/null +++ b/courier_management/data/courier_request_data.xml @@ -0,0 +1,15 @@ + + + + + + Courier Requests + courier.request + TRUE + COURIER/ + 5 + 1 + 1 + + + diff --git a/courier_management/data/courier_tag_demo.xml b/courier_management/data/courier_tag_demo.xml new file mode 100644 index 000000000..ac72d5467 --- /dev/null +++ b/courier_management/data/courier_tag_demo.xml @@ -0,0 +1,39 @@ + + + + + + Courier Service + + + Logistics + + + Expensed + + + Important + + + Shipping + + + Weightless + + + Electrical + + + Handle With Care + + + Cargo + + + Inventory + + + Cross Docking + + + diff --git a/courier_management/data/courier_type_demo.xml b/courier_management/data/courier_type_demo.xml new file mode 100644 index 000000000..2e0fb49d6 --- /dev/null +++ b/courier_management/data/courier_type_demo.xml @@ -0,0 +1,24 @@ + + + + + + Local + + + Parsel + + + Expense + + + Non Expense + + + Metals + + + Non Metals + + + diff --git a/courier_management/data/courier_weight_price_demo.xml b/courier_management/data/courier_weight_price_demo.xml new file mode 100644 index 000000000..1cb2a736d --- /dev/null +++ b/courier_management/data/courier_weight_price_demo.xml @@ -0,0 +1,72 @@ + + + + + + If Weight 1 To 5 Kilograms + 1 + 5 + 15 + + + If Weight 5 To 10 Kilograms + 5 + 10 + 25 + + + If Weight 5 To 15 Kilograms + 5 + 15 + 30 + + + If Weight 1 To 15 Kilograms + 1 + 15 + 9 + + + If Weight 15 To 20 Kilograms + 15 + 20 + 40 + + + If Weight 15 To 25 Kilograms + 15 + 25 + 45 + + + If Weight 20 To 30 Kilograms + 20 + 30 + 50 + + + If Weight 30 To 50 Kilograms + 30 + 50 + 100 + + + If Weight 30 To 40 Kilograms + 30 + 40 + 70 + + + If Weight 40 To 50 Kilograms + 40 + 50 + 99 + + + If Weight 0.01 To 1 Kilograms + 0.01 + 1 + 5 + + + diff --git a/courier_management/data/product_product_demo.xml b/courier_management/data/product_product_demo.xml new file mode 100644 index 000000000..d4591b4c5 --- /dev/null +++ b/courier_management/data/product_product_demo.xml @@ -0,0 +1,34 @@ + + + + + + Additional Charges + COURIER 001 + 0.00 + consu + + False + False + + + Distance Charges + COURIER 002 + 0.00 + consu + + False + False + + + Volumetric Weight Charges + COURIER 003 + 0.00 + consu + + False + False + + + diff --git a/courier_management/doc/RELEASE_NOTES.md b/courier_management/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..4bc353c19 --- /dev/null +++ b/courier_management/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 17.04.2025 +#### Version 18.0.1.0.0 +#### ADD +- Initial commit for Courier Management diff --git a/courier_management/models/__init__.py b/courier_management/models/__init__.py new file mode 100644 index 000000000..1b3fd151c --- /dev/null +++ b/courier_management/models/__init__.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import account_move +from . import courier_category +from . import courier_detail +from . import courier_dimension_price +from . import courier_distance_price +from . import courier_priority +from . import courier_request +from . import courier_tag +from . import courier_type +from . import courier_weight_price diff --git a/courier_management/models/account_move.py b/courier_management/models/account_move.py new file mode 100644 index 000000000..2abd4ea90 --- /dev/null +++ b/courier_management/models/account_move.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import fields, models + + +class AccountMove(models.Model): + """This is for adding courier sequence number to invoice""" + _inherit = 'account.move' + + courier_ref_id = fields.Many2one('courier.request', string="Courier", + readonly=True, help="Shows the courier " + "reference") diff --git a/courier_management/models/courier_category.py b/courier_management/models/courier_category.py new file mode 100644 index 000000000..333bebd19 --- /dev/null +++ b/courier_management/models/courier_category.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import fields, models + + +class CourierCategory(models.Model): + """This is for creating courier category""" + _name = 'courier.category' + _description = "Courier Category" + _rec_name = 'courier_category' + + courier_category = fields.Char(string="Courier Category", required=True, + help="Choose the courier category") diff --git a/courier_management/models/courier_detail.py b/courier_management/models/courier_detail.py new file mode 100644 index 000000000..9976405f8 --- /dev/null +++ b/courier_management/models/courier_detail.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import api, fields, models + + +class CourierDetail(models.Model): + """This is the order line of courier requests""" + _name = 'courier.detail' + _description = "Courier Detail" + _rec_name = 'product_id' + + product_id = fields.Many2one('product.product', string="Product", + required=True, help="Courier product name") + quantity = fields.Integer(string="Quantity", required=True, default=1, + help="Quantity of the courier product") + weight = fields.Float(string="Weight", related='product_id.weight', + help="Weight of the courier product") + total_weight = fields.Float(string="Total Weight", + compute='_compute_total_weight', + help="Total weight of the courier product") + weight_price = fields.Float(string="Weight Price", readonly=True, + help="Product weight price") + company_id = fields.Many2one('res.company', string="Company", + default=lambda self: self.env.company, + readonly=True, help="Choose company") + currency_id = fields.Many2one("res.currency", string='Currency', + related='company_id.currency_id', + help="Company currency") + sub_total = fields.Monetary(string="Sub Total", + compute='_compute_sub_total', + help="Get the total amount") + courier_requests_id = fields.Many2one('courier.request', + string="Courier Request", + help="Relational field of courier " + "request") + + @api.depends('weight', 'quantity') + def _compute_total_weight(self): + """It will compute the total weight""" + for record in self: + record.total_weight = record.quantity * record.weight \ + if record.quantity else record.weight + prices = [] + record.weight_price = False + for rec in self.env['courier.weight.price'].search( + [('minimum_weight', '<=', record.total_weight), + ('maximum_weight', '>=', record.total_weight)]): + prices.append(rec.price) + if prices: + record.weight_price = min(prices) + else: + minimum = [] + maximum = [] + price = [] + for records in self.env['courier.weight.price'].search([]): + minimum.append(records.minimum_weight) + maximum.append(records.maximum_weight) + price.append(records.price) + if record.total_weight < min(minimum): + record.weight_price = min(price) + elif record.total_weight > max(maximum): + record.weight_price = max(price) + + @api.depends('quantity', 'product_id') + def _compute_sub_total(self): + """Compute the sub-total of courier requests""" + for record in self: + record.sub_total = record.weight_price diff --git a/courier_management/models/courier_dimension_price.py b/courier_management/models/courier_dimension_price.py new file mode 100644 index 000000000..04b147728 --- /dev/null +++ b/courier_management/models/courier_dimension_price.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class CourierDimensionPrice(models.Model): + """This is for creating courier dimension price rule""" + _name = 'courier.dimension.price' + _description = "Courier Dimension PriceRule" + + name = fields.Char(string="Name", required=True, + help="Name of courier dimension price") + length = fields.Integer(string="Length", required=True, + help="Length of box") + width = fields.Integer(string="Width", required=True, help="Width of box") + height = fields.Integer(string="Height", required=True, + help="Height of box") + volumetric_weight = fields.Float(string="Volumetric Weight(kg)", + compute='_compute_volumetric_weight', + help="Weight of the courier") + company_id = fields.Many2one('res.company', string="Company", + required=True, + default=lambda self: self.env.company, + readonly=True, help="Choose company") + currency_id = fields.Many2one("res.currency", string='Currency', + related='company_id.currency_id', + help="Company currency") + price = fields.Monetary(string="Price", required=True, + help="The price based on weight") + + @api.constrains('length', 'width', 'height') + def _check_available_combinations(self): + """Returns validation based on length, width and height""" + if self.length <= 0 or self.width <= 0 or self.height <= 0: + raise ValidationError(_('Invalid Combination')) + + @api.depends('length', 'width', 'height') + def _compute_volumetric_weight(self): + """Compute the volumetric weight of courier""" + for rec in self: + rec.volumetric_weight = (rec.length * rec.width * rec.height) / \ + 5000 diff --git a/courier_management/models/courier_distance_price.py b/courier_management/models/courier_distance_price.py new file mode 100644 index 000000000..4e494423f --- /dev/null +++ b/courier_management/models/courier_distance_price.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class CourierDistancePrice(models.Model): + """This is for creating courier distance price rule""" + _name = 'courier.distance.price' + _description = "Courier Distance PriceRule" + + name = fields.Char(string="Name", required=True, + help="Name of courier distance price rule") + minimum_distance = fields.Float(string="Minimum Distance", required=True, + help="Minimum distance for delivery") + maximum_distance = fields.Float(string="Maximum Distance", required=True, + help="Maximum distance for delivery") + company_id = fields.Many2one('res.company', string="Company", + required=True, + default=lambda self: self.env.company, + readonly=True, help="Current company") + currency_id = fields.Many2one("res.currency", string='Currency', + related='company_id.currency_id', + help="Company currency") + price = fields.Monetary(string="Price", required=True, + help="Price based on the distance") + + @api.constrains('maximum_distance', 'minimum_distance') + def _check_distance(self): + """Returns validation based on distance""" + if self.minimum_distance <= 0 or self.maximum_distance <= 0: + raise ValidationError(_('Delivery is not possible')) + if self.minimum_distance == 0 or self.maximum_distance == 0: + raise ValidationError(_('Invalid Distance')) + if self.minimum_distance > self.maximum_distance: + raise ValidationError( + _('Minimum Distance must be less than Maximum Distance')) diff --git a/courier_management/models/courier_priority.py b/courier_management/models/courier_priority.py new file mode 100644 index 000000000..773e7f969 --- /dev/null +++ b/courier_management/models/courier_priority.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import fields, models + + +class CourierPriority(models.Model): + """This is for creating courier priority""" + _name = 'courier.priority' + _description = "Courier Priority" + + name = fields.Char(string="Name", required=True, help="The priority name") + company_id = fields.Many2one('res.company', string="Company", + required=True, + default=lambda self: self.env.company, + readonly=True, help="Choose company") + currency_id = fields.Many2one("res.currency", string='Currency', + related='company_id.currency_id', + help="Company currency") + charges = fields.Monetary(string="Charges", required=True, + help="Priority charges") diff --git a/courier_management/models/courier_request.py b/courier_management/models/courier_request.py new file mode 100644 index 000000000..50a528ed2 --- /dev/null +++ b/courier_management/models/courier_request.py @@ -0,0 +1,359 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from datetime import date +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class CourierRequest(models.Model): + """This is for creating courier requests""" + _name = 'courier.request' + _description = "Courier Request" + _inherit = ["mail.thread", "mail.activity.mixin"] + + state = fields.Selection( + selection=[('new', 'New'), ('collected', 'Collected'), + ('invoiced', 'Invoiced'), ('dispatched', 'Dispatched'), + ('in_transit', 'In Transit'), + ('arrived_at_destination', 'Arrived At Destination'), + ('out_for_delivery', 'Out For Delivery'), + ('delivered', 'Delivered'), ('cancelled', 'Cancelled')], + string="State", default='new', help="State of the courier request") + name = fields.Char(string='Name', readonly=True, copy=False, + default='New', help="Sequence number") + sender_id = fields.Many2one('res.partner', + string="Sender Name", + help="Name of The Sender", required=True) + sender_address = fields.Char(string="Sender Address", + help="Address Of The Sender") + sender_mobile_number = fields.Char(string="Sender Phone Number", + help="Mobile Number Of The Sender", + related='sender_id.phone', + readonly=False, + required=True) + sender_email = fields.Char(string="Sender Email", + help="Email Of The Sender", + related='sender_id.email', + readonly=False, required=True) + sender_street = fields.Char(string="Sender Street", + related='sender_id.street', readonly=False, + help="Street of the sender") + sender_street2 = fields.Char(string="Sender Second Street", + related='sender_id.street2', readonly=False, + help="Second street of the sender") + sender_city = fields.Char(string="Sender City", related='sender_id.city', + readonly=False, + help="City of the sender") + sender_state_id = fields.Many2one('res.country.state', + string="Sender State", + related='sender_id.state_id', + readonly=False, + domain="[('country_id', '=?', " + "sender_address_country_id)]", + help="State of the sender") + sender_zip = fields.Char(string="Sender Zip", related='sender_id.zip', + help="Zip of the sender") + sender_address_country_id = fields.Many2one('res.country', + string="Sender Country " + "Address", + related='sender_id.country_id', + readonly=False, + help="Country of the sender") + receiver_id = fields.Many2one('res.partner', + string="Receiver Name", + help="Name of the receiver", required=True) + receiver_address = fields.Char(string="Receiver Address", + help="Address of the receiver") + receiver_street = fields.Char(string="Receiver Street", + related='receiver_id.street', readonly=False, + help="Street of the receiver") + receiver_street2 = fields.Char(string="Receiver Second Street", + related='receiver_id.street2', + readonly=False, + help="Second street of the receiver") + receiver_city = fields.Char(string="Receiver City", + related='receiver_id.city', readonly=False, + help="City of the receiver") + receiver_state_id = fields.Many2one('res.country.state', + string="Receiver State", + related='receiver_id.state_id', + readonly=False, + domain="[('country_id', '=?', " + "receiver_address_country_id)]", + help="State of the receiver") + receiver_zip = fields.Char(string="Receiver Zip", + related='receiver_id.zip', + readonly=False, + help="Zip of the receiver") + receiver_address_country_id = fields.Many2one('res.country', + string="Receiver Country " + "Address", + related='receiver_id.' + 'country_id', + readonly=False, + help="Country of the " + "receiver") + receiver_mobile_number = fields.Char(string="Receiver Phone Number", + help="Mobile Number Of The Receiver", + related='receiver_id.phone', + readonly=False, + required=True) + receiver_email = fields.Char(string="Receiver Email", help="Email Of The " + "Receiver", + related='receiver_id.email', + readonly=False, required=True) + registration_date = fields.Date(string="Registration Date", + help="Courier Registration Date", + default=date.today(), + readonly=True) + delivery_date = fields.Date(string="Delivery Date", + help="Courier Delivery Date", required=True) + total_kilometres = fields.Float(string="Total Kilometres", + help="Total Kilometers To Courier Sends", + required=True) + distance_amount = fields.Monetary(string="Distance Amount", + compute='_compute_distance_amount', + store=True, + help="Distance amount based on the " + "distance") + responsible_user_id = fields.Many2one('res.users', + default=lambda self: self.env.user, + string="Responsible User", + help="Responsible User Of This " + "Courier", + readonly=True) + type_id = fields.Many2one('courier.type', string="Type", + required=True, help="Courier type") + tag_ids = fields.Many2many('courier.tag', string="Tag", + help="Courier tags") + l_w_h_id = fields.Many2one('courier.dimension.price', + string="L x W x H", required=True, + help="Courier box size") + volumetric_weight = fields.Float(string="Volumetric Weight", + related='l_w_h_id.volumetric_weight', + help="Weight of the courier") + volumetric_weight_price = fields.Monetary(string="Volumetric Weight Price", + compute='_compute_volumetric_' + 'weight_price', + help="Weight price of the" + " courier") + priority_id = fields.Many2one('courier.priority', + string="Priority", help="Courier priority") + priority_amount = fields.Monetary(string="Priority Amount", + compute='_compute_priority_amount', + help="Courier priority amount based on " + "priority") + category_id = fields.Many2one('courier.category', + string="Category", required=True, + help="Courier category") + description = fields.Char(string="Description", help="Add description") + internal_note = fields.Char(string="Internal Note", help="Add internal " + "note") + total_courier_charges = fields.Float(string="Total Courier Charges", + readonly=True, + help="The total courier charges") + total = fields.Monetary(string="Total", compute='_compute_total', + help="Total") + company_id = fields.Many2one('res.company', string="Company", + required=True, + default=lambda self: self.env.company, + readonly=True, help="Choose company") + currency_id = fields.Many2one("res.currency", string='Currency', + related='company_id.currency_id', + help="Company currency") + courier_details_ids = fields.One2many('courier.detail', + 'courier_requests_id', + string="Courier Details", + help="Courier details") + + def action_collected(self): + """This will change the state to collected or give validation error""" + for record in self: + if record.courier_details_ids: + self.state = 'collected' + else: + raise ValidationError(_( + 'You Need To Add A Line Before Collecting')) + + def action_dispatched(self): + """This will change the state to dispatched""" + self.state = 'dispatched' + + def action_in_transit(self): + """This will change the state to in transit""" + self.state = 'in_transit' + + def action_arrived_at_destination(self): + """This will change the state to arrived at destination""" + self.state = 'arrived_at_destination' + + def action_out_for_delivery(self): + """This will change the state to out for delivery""" + self.state = 'out_for_delivery' + + def action_delivered(self): + """This will change the state to delivered""" + self.state = 'delivered' + + def action_cancelled(self): + """This will change the state to cancelled""" + self.state = 'cancelled' + + @api.onchange('delivery_date') + def _onchange_delivery_date(self): + """If the delivery date is smaller than registration date. It gives + a validation error""" + if self.delivery_date and self.delivery_date <= self.registration_date: + raise ValidationError(_('Delivery Is Not Possible On This Date')) + + @api.onchange('total_kilometres') + def _onchange_total_kilometres(self): + """If the total kilometres is smaller than one.It gives a validation""" + if self.total_kilometres and self.total_kilometres < 1: + raise ValidationError(_('Delivery Is Not Available')) + + def action_create_invoice(self): + """Creating invoices for corresponding courier request""" + self.state = 'invoiced' + for rec in self: + invoice_id = self.env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': rec.sender_id.id, + 'invoice_date': rec.registration_date, + 'invoice_user_id': rec.responsible_user_id.id, + 'courier_ref_id': rec.id + }) + for courier_order_line in self.courier_details_ids: + invoice_id.write({ + 'invoice_line_ids': [(0, 0, { + 'product_id': courier_order_line.product_id.id, + 'quantity': 1, + 'price_unit': courier_order_line.weight_price, + })] + }) + if self.l_w_h_id: + invoice_id.write({ + 'invoice_line_ids': [(0, 0, { + 'product_id': self.env.ref( + 'courier_management.' + 'volumetric_weight_charges_product').id, + })] + }) + if self.priority_id: + invoice_id.write({ + 'invoice_line_ids': [(0, 0, { + 'product_id': self.env.ref( + 'courier_management.' + 'additional_charges_priority_product').id, + })] + }) + if self.distance_amount: + invoice_id.write({ + 'invoice_line_ids': [(0, 0, { + 'product_id': self.env.ref( + 'courier_management.distance_charges_product').id, + })] + }) + invoice_id.action_post() + + def action_view_invoices(self): + """It returns the Invoices tree view""" + return { + 'name': 'Invoice', + 'view_mode': 'list,form', + 'res_model': 'account.move', + 'type': 'ir.actions.act_window', + 'domain': [('courier_ref_id', '=', self.id)], + 'context': "{'create': False}" + } + + @api.onchange('courier_details_ids') + def _onchange_courier_details_ids(self): + """Returns the total courier charges""" + total = 0 + courier = self.courier_details_ids + total_charge = courier.mapped('sub_total') + for record in range(0, len(total_charge)): + total = total + total_charge[record] + self.total_courier_charges = total + + @api.depends('priority_amount', 'distance_amount', + 'total_courier_charges', 'volumetric_weight_price') + def _compute_total(self): + """Computes the total""" + self.total = (self.priority_amount + self.distance_amount + + self.total_courier_charges + + self.volumetric_weight_price) + + @api.depends('total_kilometres') + def _compute_distance_amount(self): + """Returns the distance amount""" + prices = [] + self.distance_amount = False + for record in self.env['courier.distance.price'].search( + [('minimum_distance', '<=', self.total_kilometres), + ('maximum_distance', '>=', self.total_kilometres)]): + prices.append(record.price) + if prices: + self.distance_amount = min(prices) + else: + distances = self.env['courier.distance.price'].search([]) + minimum_distances = [rec.minimum_distance for rec in distances] + maximum_distances = [rec.maximum_distance for rec in distances] + prices = [rec.price for rec in distances] + + if self.total_kilometres < min(minimum_distances): + self.distance_amount = min(prices) + elif self.total_kilometres > max(maximum_distances): + self.distance_amount = max(prices) + + distance = self.env['product.product'].browse( + [self.env.ref('courier_management.distance_charges_product').id]) + distance.list_price = self.distance_amount + + @api.depends('priority_id') + def _compute_priority_amount(self): + """Returns the priority amount based on priority""" + self.priority_amount = self.priority_id.charges + priority = self.env['product.product'].browse( + [self.env.ref( + 'courier_management.additional_charges_priority_product').id]) + priority.list_price = self.priority_amount + + @api.depends('l_w_h_id') + def _compute_volumetric_weight_price(self): + """Returns the volumetric weight price""" + self.volumetric_weight_price = self.l_w_h_id.price + volume = self.env['product.product'].browse( + [self.env.ref( + 'courier_management.volumetric_weight_charges_product').id]) + volume.list_price = self.volumetric_weight_price + + @api.model_create_multi + def create(self, vals_list): + """This is used to get the Courier sequence number""" + for vals in vals_list: + if vals.get('name', 'New') == 'New': + vals['name'] = self.env['ir.sequence'].next_by_code( + 'courier.request') or 'New' + result = super(CourierRequest, self).create(vals_list) + return result diff --git a/courier_management/models/courier_tag.py b/courier_management/models/courier_tag.py new file mode 100644 index 000000000..800596416 --- /dev/null +++ b/courier_management/models/courier_tag.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from random import randint +from odoo import fields, models + + +class CourierTag(models.Model): + """This is for creating courier tags""" + _name = 'courier.tag' + _description = "Courier Tag" + _rec_name = 'courier_tags' + + def _get_default_color(self): + """It returns the color""" + return randint(1, 11) + + courier_tags = fields.Char(string="Courier Tag", required=True, + help="Tags") + color = fields.Integer(string="Color", default=_get_default_color, + help="Color of tag") diff --git a/courier_management/models/courier_type.py b/courier_management/models/courier_type.py new file mode 100644 index 000000000..d4449f578 --- /dev/null +++ b/courier_management/models/courier_type.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import fields, models + + +class CourierType(models.Model): + """This is for creating courier type""" + _name = 'courier.type' + _description = "Courier Type" + _rec_name = 'courier_type' + + courier_type = fields.Char(string="Type", required=True, + help="Type of the courier") diff --git a/courier_management/models/courier_weight_price.py b/courier_management/models/courier_weight_price.py new file mode 100644 index 000000000..a3a86b691 --- /dev/null +++ b/courier_management/models/courier_weight_price.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions () +# +# This program is under the terms of Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class CourierWeightPrice(models.Model): + """This is for creating courier weight price rule""" + _name = 'courier.weight.price' + _description = "Courier Weight PriceRule" + + name = fields.Char(string="Name", required=True, + help="Name of courier weight price rule") + minimum_weight = fields.Float(string="Minimum Weight", required=True, + help="Minimum weight") + maximum_weight = fields.Float(string="Maximum Weight", required=True, + help="Maximum weight") + company_id = fields.Many2one('res.company', string="Company", + required=True, + default=lambda self: self.env.company, + readonly=True, help="Choose company") + currency_id = fields.Many2one("res.currency", string='Currency', + related='company_id.currency_id', + help="Company currency") + price = fields.Monetary(string="Price", required=True, + help="The price based on courier weight") + + @api.constrains('maximum_weight', 'minimum_weight') + def _check_weight(self): + """Returns validations based on the weight""" + if self.minimum_weight <= 0 or self.maximum_weight <= 0: + raise ValidationError(_('Weight must be greater than zero')) + if self.minimum_weight >= self.maximum_weight: + raise ValidationError( + _('Minimum Weight must be less than Maximum Weight')) diff --git a/courier_management/report/courier_request_reports.xml b/courier_management/report/courier_request_reports.xml new file mode 100644 index 000000000..9e548690f --- /dev/null +++ b/courier_management/report/courier_request_reports.xml @@ -0,0 +1,14 @@ + + + + + Courier Request Report + courier.request + qweb-pdf + courier_management.report_courier_request + courier_management.report_courier_request + + report + form + + diff --git a/courier_management/report/courier_request_templates.xml b/courier_management/report/courier_request_templates.xml new file mode 100644 index 000000000..83adba1cf --- /dev/null +++ b/courier_management/report/courier_request_templates.xml @@ -0,0 +1,257 @@ + + + + + diff --git a/courier_management/security/courier_management_groups.xml b/courier_management/security/courier_management_groups.xml new file mode 100644 index 000000000..cccb41309 --- /dev/null +++ b/courier_management/security/courier_management_groups.xml @@ -0,0 +1,25 @@ + + + + + + Courier Management + Access For Courier Management Module + 11 + + + User + + + + Administrator + + + + + + + + diff --git a/courier_management/security/courier_request_security.xml b/courier_management/security/courier_request_security.xml new file mode 100644 index 000000000..aa04013fe --- /dev/null +++ b/courier_management/security/courier_request_security.xml @@ -0,0 +1,31 @@ + + + + + + Courier Requests Administrator + + [(1,'=',1)] + + + + + + + + + Courier Requests User + + [('sender_id','=',user.partner_id.id)] + + + + + + + + + + diff --git a/courier_management/security/ir.model.access.csv b/courier_management/security/ir.model.access.csv new file mode 100644 index 000000000..1f94f5c02 --- /dev/null +++ b/courier_management/security/ir.model.access.csv @@ -0,0 +1,19 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_courier_requests_admin,access.courier.request,model_courier_request,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_requests,access.courier.request,model_courier_request,courier_management.courier_management_group_user,1,0,1,1 +access_courier_tags_admin,access.courier.tag,model_courier_tag,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_tags,access.courier.tag,model_courier_tag,courier_management.courier_management_group_user,1,1,1,1 +access_courier_category_admin,access.courier.category,model_courier_category,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_category,access.courier.category,model_courier_category,courier_management.courier_management_group_user,1,1,1,1 +access_courier_type_admin,access.courier.type,model_courier_type,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_type,access.courier.type,model_courier_type,courier_management.courier_management_group_user,1,1,1,1 +access_courier_priority_admin,access.courier.priority,model_courier_priority,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_priority,access.courier.priority,model_courier_priority,courier_management.courier_management_group_user,1,1,1,1 +access_courier_weight_price_admin,access.courier.weight.price,model_courier_weight_price,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_weight_price,access.courier.weight.price,model_courier_weight_price,courier_management.courier_management_group_user,1,1,1,1 +access_courier_dimension_price_admin,access.courier.dimension.price,model_courier_dimension_price,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_dimension_price,access.courier.dimension.price,model_courier_dimension_price,courier_management.courier_management_group_user,1,1,1,1 +access_courier_distance_price_admin,access.courier.distance.price,model_courier_distance_price,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_distance_price,access.courier.distance.price,model_courier_distance_price,courier_management.courier_management_group_user,1,1,1,1 +access_courier_details_admin,access.courier.detail,model_courier_detail,courier_management.courier_management_group_administrator,1,1,1,1 +access_courier_details,access.courier.detail,model_courier_detail,courier_management.courier_management_group_user,1,1,1,1 diff --git a/courier_management/static/description/assets/cybro-icon.png b/courier_management/static/description/assets/cybro-icon.png new file mode 100644 index 000000000..06e73e11d Binary files /dev/null and b/courier_management/static/description/assets/cybro-icon.png differ diff --git a/courier_management/static/description/assets/cybro-odoo.png b/courier_management/static/description/assets/cybro-odoo.png new file mode 100644 index 000000000..ed02e07a4 Binary files /dev/null and b/courier_management/static/description/assets/cybro-odoo.png differ diff --git a/courier_management/static/description/assets/h2.png b/courier_management/static/description/assets/h2.png new file mode 100644 index 000000000..0bfc4707d Binary files /dev/null and b/courier_management/static/description/assets/h2.png differ diff --git a/courier_management/static/description/assets/icons/arrows-repeat.svg b/courier_management/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/courier_management/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/banner-1.png b/courier_management/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/courier_management/static/description/assets/icons/banner-1.png differ diff --git a/courier_management/static/description/assets/icons/banner-2.svg b/courier_management/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/courier_management/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/banner-bg.png b/courier_management/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/courier_management/static/description/assets/icons/banner-bg.png differ diff --git a/courier_management/static/description/assets/icons/banner-bg.svg b/courier_management/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/courier_management/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/banner-call.svg b/courier_management/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/courier_management/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/courier_management/static/description/assets/icons/banner-mail.svg b/courier_management/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/courier_management/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/courier_management/static/description/assets/icons/banner-pattern.svg b/courier_management/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/courier_management/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/banner-promo.svg b/courier_management/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/courier_management/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/brand-pair.svg b/courier_management/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/courier_management/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/check.png b/courier_management/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/courier_management/static/description/assets/icons/check.png differ diff --git a/courier_management/static/description/assets/icons/chevron.png b/courier_management/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/courier_management/static/description/assets/icons/chevron.png differ diff --git a/courier_management/static/description/assets/icons/close-icon.svg b/courier_management/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/courier_management/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/courier_management/static/description/assets/icons/cogs.png b/courier_management/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/courier_management/static/description/assets/icons/cogs.png differ diff --git a/courier_management/static/description/assets/icons/collabarate-icon.svg b/courier_management/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/courier_management/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/courier_management/static/description/assets/icons/consultation.png b/courier_management/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/courier_management/static/description/assets/icons/consultation.png differ diff --git a/courier_management/static/description/assets/icons/cybro-logo.png b/courier_management/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/courier_management/static/description/assets/icons/cybro-logo.png differ diff --git a/courier_management/static/description/assets/icons/down.svg b/courier_management/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/courier_management/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/courier_management/static/description/assets/icons/ecom-black.png b/courier_management/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/courier_management/static/description/assets/icons/ecom-black.png differ diff --git a/courier_management/static/description/assets/icons/education-black.png b/courier_management/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/courier_management/static/description/assets/icons/education-black.png differ diff --git a/courier_management/static/description/assets/icons/faq.png b/courier_management/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/courier_management/static/description/assets/icons/faq.png differ diff --git a/courier_management/static/description/assets/icons/feature-icon.svg b/courier_management/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/courier_management/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/feature.png b/courier_management/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/courier_management/static/description/assets/icons/feature.png differ diff --git a/courier_management/static/description/assets/icons/gear.svg b/courier_management/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/courier_management/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/hero.gif b/courier_management/static/description/assets/icons/hero.gif new file mode 100644 index 000000000..ea45e3041 Binary files /dev/null and b/courier_management/static/description/assets/icons/hero.gif differ diff --git a/courier_management/static/description/assets/icons/hire-odoo.svg b/courier_management/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/courier_management/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/hotel-black.png b/courier_management/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/courier_management/static/description/assets/icons/hotel-black.png differ diff --git a/courier_management/static/description/assets/icons/license.png b/courier_management/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/courier_management/static/description/assets/icons/license.png differ diff --git a/courier_management/static/description/assets/icons/life-ring-icon.svg b/courier_management/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/courier_management/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/lifebuoy.png b/courier_management/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/courier_management/static/description/assets/icons/lifebuoy.png differ diff --git a/courier_management/static/description/assets/icons/mail.svg b/courier_management/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/courier_management/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/courier_management/static/description/assets/icons/manufacturing-black.png b/courier_management/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/courier_management/static/description/assets/icons/manufacturing-black.png differ diff --git a/courier_management/static/description/assets/icons/notes.png b/courier_management/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/courier_management/static/description/assets/icons/notes.png differ diff --git a/courier_management/static/description/assets/icons/notification icon.svg b/courier_management/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/courier_management/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/odoo-consultancy.svg b/courier_management/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/courier_management/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/courier_management/static/description/assets/icons/odoo-licencing.svg b/courier_management/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/courier_management/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/courier_management/static/description/assets/icons/odoo-logo.png b/courier_management/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/courier_management/static/description/assets/icons/odoo-logo.png differ diff --git a/courier_management/static/description/assets/icons/patter.svg b/courier_management/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/courier_management/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/pattern1.png b/courier_management/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/courier_management/static/description/assets/icons/pattern1.png differ diff --git a/courier_management/static/description/assets/icons/pos-black.png b/courier_management/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/courier_management/static/description/assets/icons/pos-black.png differ diff --git a/courier_management/static/description/assets/icons/puzzle-piece-icon.svg b/courier_management/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/courier_management/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/puzzle.png b/courier_management/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/courier_management/static/description/assets/icons/puzzle.png differ diff --git a/courier_management/static/description/assets/icons/replace-icon.svg b/courier_management/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/courier_management/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/restaurant-black.png b/courier_management/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/courier_management/static/description/assets/icons/restaurant-black.png differ diff --git a/courier_management/static/description/assets/icons/screenshot-main.png b/courier_management/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/courier_management/static/description/assets/icons/screenshot-main.png differ diff --git a/courier_management/static/description/assets/icons/screenshot.png b/courier_management/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/courier_management/static/description/assets/icons/screenshot.png differ diff --git a/courier_management/static/description/assets/icons/service-black.png b/courier_management/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/courier_management/static/description/assets/icons/service-black.png differ diff --git a/courier_management/static/description/assets/icons/skype-fill.svg b/courier_management/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/courier_management/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/skype.png b/courier_management/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/courier_management/static/description/assets/icons/skype.png differ diff --git a/courier_management/static/description/assets/icons/skype.svg b/courier_management/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/courier_management/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/courier_management/static/description/assets/icons/star-1.svg b/courier_management/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/courier_management/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/star-2.svg b/courier_management/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/courier_management/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/support.png b/courier_management/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/courier_management/static/description/assets/icons/support.png differ diff --git a/courier_management/static/description/assets/icons/test-1 - Copy.png b/courier_management/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/courier_management/static/description/assets/icons/test-1 - Copy.png differ diff --git a/courier_management/static/description/assets/icons/test-1.png b/courier_management/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/courier_management/static/description/assets/icons/test-1.png differ diff --git a/courier_management/static/description/assets/icons/test-2.png b/courier_management/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/courier_management/static/description/assets/icons/test-2.png differ diff --git a/courier_management/static/description/assets/icons/trading-black.png b/courier_management/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/courier_management/static/description/assets/icons/trading-black.png differ diff --git a/courier_management/static/description/assets/icons/training.png b/courier_management/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/courier_management/static/description/assets/icons/training.png differ diff --git a/courier_management/static/description/assets/icons/translate.svg b/courier_management/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/courier_management/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/update.png b/courier_management/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/courier_management/static/description/assets/icons/update.png differ diff --git a/courier_management/static/description/assets/icons/user.png b/courier_management/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/courier_management/static/description/assets/icons/user.png differ diff --git a/courier_management/static/description/assets/icons/video.png b/courier_management/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/courier_management/static/description/assets/icons/video.png differ diff --git a/courier_management/static/description/assets/icons/whatsapp.png b/courier_management/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/courier_management/static/description/assets/icons/whatsapp.png differ diff --git a/courier_management/static/description/assets/icons/wrench-icon.svg b/courier_management/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/courier_management/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/courier_management/static/description/assets/icons/wrench.png b/courier_management/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/courier_management/static/description/assets/icons/wrench.png differ diff --git a/courier_management/static/description/assets/modules/1.gif b/courier_management/static/description/assets/modules/1.gif new file mode 100644 index 000000000..ae3a880a2 Binary files /dev/null and b/courier_management/static/description/assets/modules/1.gif differ diff --git a/courier_management/static/description/assets/modules/1.jpg b/courier_management/static/description/assets/modules/1.jpg new file mode 100644 index 000000000..08bbafeb6 Binary files /dev/null and b/courier_management/static/description/assets/modules/1.jpg differ diff --git a/courier_management/static/description/assets/modules/2.gif b/courier_management/static/description/assets/modules/2.gif new file mode 100644 index 000000000..d19e2b352 Binary files /dev/null and b/courier_management/static/description/assets/modules/2.gif differ diff --git a/courier_management/static/description/assets/modules/2.jpg b/courier_management/static/description/assets/modules/2.jpg new file mode 100644 index 000000000..39006b41a Binary files /dev/null and b/courier_management/static/description/assets/modules/2.jpg differ diff --git a/courier_management/static/description/assets/modules/2.png b/courier_management/static/description/assets/modules/2.png new file mode 100644 index 000000000..a1209a01f Binary files /dev/null and b/courier_management/static/description/assets/modules/2.png differ diff --git a/courier_management/static/description/assets/modules/3.jpg b/courier_management/static/description/assets/modules/3.jpg new file mode 100644 index 000000000..3d171226b Binary files /dev/null and b/courier_management/static/description/assets/modules/3.jpg differ diff --git a/courier_management/static/description/assets/modules/3.png b/courier_management/static/description/assets/modules/3.png new file mode 100644 index 000000000..8513873ea Binary files /dev/null and b/courier_management/static/description/assets/modules/3.png differ diff --git a/courier_management/static/description/assets/modules/4.jpg b/courier_management/static/description/assets/modules/4.jpg new file mode 100644 index 000000000..1f3f2e27f Binary files /dev/null and b/courier_management/static/description/assets/modules/4.jpg differ diff --git a/courier_management/static/description/assets/modules/4.png b/courier_management/static/description/assets/modules/4.png new file mode 100644 index 000000000..3bedf7981 Binary files /dev/null and b/courier_management/static/description/assets/modules/4.png differ diff --git a/courier_management/static/description/assets/modules/5.jpg b/courier_management/static/description/assets/modules/5.jpg new file mode 100644 index 000000000..0db717519 Binary files /dev/null and b/courier_management/static/description/assets/modules/5.jpg differ diff --git a/courier_management/static/description/assets/modules/5.png b/courier_management/static/description/assets/modules/5.png new file mode 100644 index 000000000..0e311ca87 Binary files /dev/null and b/courier_management/static/description/assets/modules/5.png differ diff --git a/courier_management/static/description/assets/modules/6.jpg b/courier_management/static/description/assets/modules/6.jpg new file mode 100644 index 000000000..67c7f7062 Binary files /dev/null and b/courier_management/static/description/assets/modules/6.jpg differ diff --git a/courier_management/static/description/assets/modules/courier_management.jpg b/courier_management/static/description/assets/modules/courier_management.jpg new file mode 100644 index 000000000..3e4a22c32 Binary files /dev/null and b/courier_management/static/description/assets/modules/courier_management.jpg differ diff --git a/courier_management/static/description/assets/modules/cw_sale.png b/courier_management/static/description/assets/modules/cw_sale.png new file mode 100644 index 000000000..1b75c62d5 Binary files /dev/null and b/courier_management/static/description/assets/modules/cw_sale.png differ diff --git a/courier_management/static/description/assets/modules/cw_stock.png b/courier_management/static/description/assets/modules/cw_stock.png new file mode 100644 index 000000000..62af09ec6 Binary files /dev/null and b/courier_management/static/description/assets/modules/cw_stock.png differ diff --git a/courier_management/static/description/assets/modules/delivery_split.jpg b/courier_management/static/description/assets/modules/delivery_split.jpg new file mode 100644 index 000000000..76724ebda Binary files /dev/null and b/courier_management/static/description/assets/modules/delivery_split.jpg differ diff --git a/courier_management/static/description/assets/modules/multi_product_return_from_website.jpg b/courier_management/static/description/assets/modules/multi_product_return_from_website.jpg new file mode 100644 index 000000000..7f2cc2ab5 Binary files /dev/null and b/courier_management/static/description/assets/modules/multi_product_return_from_website.jpg differ diff --git a/courier_management/static/description/assets/modules/purchase_history_of_product.jpg b/courier_management/static/description/assets/modules/purchase_history_of_product.jpg new file mode 100644 index 000000000..dab7b184c Binary files /dev/null and b/courier_management/static/description/assets/modules/purchase_history_of_product.jpg differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_01.png b/courier_management/static/description/assets/screenshots/courier_management_01.png new file mode 100644 index 000000000..52c76baaa Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_01.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_02.png b/courier_management/static/description/assets/screenshots/courier_management_02.png new file mode 100644 index 000000000..1321c0968 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_02.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_03.png b/courier_management/static/description/assets/screenshots/courier_management_03.png new file mode 100644 index 000000000..31d77b4e1 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_03.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_04.png b/courier_management/static/description/assets/screenshots/courier_management_04.png new file mode 100644 index 000000000..8144b139c Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_04.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_05.png b/courier_management/static/description/assets/screenshots/courier_management_05.png new file mode 100644 index 000000000..f31a475cd Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_05.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_06.png b/courier_management/static/description/assets/screenshots/courier_management_06.png new file mode 100644 index 000000000..4f9ee3122 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_06.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_07.png b/courier_management/static/description/assets/screenshots/courier_management_07.png new file mode 100644 index 000000000..6f43e37a9 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_07.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_08.png b/courier_management/static/description/assets/screenshots/courier_management_08.png new file mode 100644 index 000000000..1f1c2e6c5 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_08.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_09.png b/courier_management/static/description/assets/screenshots/courier_management_09.png new file mode 100644 index 000000000..210ceef0e Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_09.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_10.png b/courier_management/static/description/assets/screenshots/courier_management_10.png new file mode 100644 index 000000000..bd22c3f4b Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_10.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_11.png b/courier_management/static/description/assets/screenshots/courier_management_11.png new file mode 100644 index 000000000..2b2f6f287 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_11.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_12.png b/courier_management/static/description/assets/screenshots/courier_management_12.png new file mode 100644 index 000000000..685da6f79 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_12.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_13.png b/courier_management/static/description/assets/screenshots/courier_management_13.png new file mode 100644 index 000000000..ac178f370 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_13.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_14.png b/courier_management/static/description/assets/screenshots/courier_management_14.png new file mode 100644 index 000000000..1d5ea4189 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_14.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_15.png b/courier_management/static/description/assets/screenshots/courier_management_15.png new file mode 100644 index 000000000..a2281993e Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_15.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_16.png b/courier_management/static/description/assets/screenshots/courier_management_16.png new file mode 100644 index 000000000..270442915 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_16.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_17.png b/courier_management/static/description/assets/screenshots/courier_management_17.png new file mode 100644 index 000000000..896456ae7 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_17.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_18.png b/courier_management/static/description/assets/screenshots/courier_management_18.png new file mode 100644 index 000000000..e8df64f4d Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_18.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_19.png b/courier_management/static/description/assets/screenshots/courier_management_19.png new file mode 100644 index 000000000..9956b4b52 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_19.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_20.png b/courier_management/static/description/assets/screenshots/courier_management_20.png new file mode 100644 index 000000000..692eed02e Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_20.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_21.png b/courier_management/static/description/assets/screenshots/courier_management_21.png new file mode 100644 index 000000000..aa4232d63 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_21.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_22.png b/courier_management/static/description/assets/screenshots/courier_management_22.png new file mode 100644 index 000000000..466413121 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_22.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_23.png b/courier_management/static/description/assets/screenshots/courier_management_23.png new file mode 100644 index 000000000..eba12297b Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_23.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_24.png b/courier_management/static/description/assets/screenshots/courier_management_24.png new file mode 100644 index 000000000..154ff478d Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_24.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_25.png b/courier_management/static/description/assets/screenshots/courier_management_25.png new file mode 100644 index 000000000..259828e81 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_25.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_26.png b/courier_management/static/description/assets/screenshots/courier_management_26.png new file mode 100644 index 000000000..d0f0c3b66 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_26.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_27.png b/courier_management/static/description/assets/screenshots/courier_management_27.png new file mode 100644 index 000000000..9eec5e17e Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_27.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_28.png b/courier_management/static/description/assets/screenshots/courier_management_28.png new file mode 100644 index 000000000..668826150 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_28.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_29.png b/courier_management/static/description/assets/screenshots/courier_management_29.png new file mode 100644 index 000000000..1fc637c66 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_29.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_30.png b/courier_management/static/description/assets/screenshots/courier_management_30.png new file mode 100644 index 000000000..a8876c868 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_30.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_31.png b/courier_management/static/description/assets/screenshots/courier_management_31.png new file mode 100644 index 000000000..5395ca794 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_31.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_32.png b/courier_management/static/description/assets/screenshots/courier_management_32.png new file mode 100644 index 000000000..a83277851 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_32.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_33.png b/courier_management/static/description/assets/screenshots/courier_management_33.png new file mode 100644 index 000000000..f3e97f74d Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_33.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_34.png b/courier_management/static/description/assets/screenshots/courier_management_34.png new file mode 100644 index 000000000..41405ef23 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_34.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_35.png b/courier_management/static/description/assets/screenshots/courier_management_35.png new file mode 100644 index 000000000..3b0bf285b Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_35.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_36.png b/courier_management/static/description/assets/screenshots/courier_management_36.png new file mode 100644 index 000000000..b331c7d93 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_36.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_37.png b/courier_management/static/description/assets/screenshots/courier_management_37.png new file mode 100644 index 000000000..d573e4f45 Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_37.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_38.png b/courier_management/static/description/assets/screenshots/courier_management_38.png new file mode 100644 index 000000000..4ef49a4cb Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_38.png differ diff --git a/courier_management/static/description/assets/screenshots/courier_management_39.png b/courier_management/static/description/assets/screenshots/courier_management_39.png new file mode 100644 index 000000000..cc025673a Binary files /dev/null and b/courier_management/static/description/assets/screenshots/courier_management_39.png differ diff --git a/courier_management/static/description/assets/y18.jpg b/courier_management/static/description/assets/y18.jpg new file mode 100644 index 000000000..eea1714f2 Binary files /dev/null and b/courier_management/static/description/assets/y18.jpg differ diff --git a/courier_management/static/description/banner.jpg b/courier_management/static/description/banner.jpg new file mode 100644 index 000000000..3e4a22c32 Binary files /dev/null and b/courier_management/static/description/banner.jpg differ diff --git a/courier_management/static/description/icon.png b/courier_management/static/description/icon.png new file mode 100644 index 000000000..dee0a7148 Binary files /dev/null and b/courier_management/static/description/icon.png differ diff --git a/courier_management/static/description/index.html b/courier_management/static/description/index.html new file mode 100644 index 000000000..e39efeab6 --- /dev/null +++ b/courier_management/static/description/index.html @@ -0,0 +1,2269 @@ + + + + + + Courier Management + + + + + + + + + + +
+
+ + + +
+
+ Community +
+
+ Enterprise +
+
+
+ +
+
+
+
+

+ This Module Helps to Create and Manage Courier Requests. +

+

+ Courier Management +

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

Key + Highlights

+
+
+
+
+ +
+
+ Create and Manage Courier +
+

+ This module helps you to create and manage courier requests for the courier management. +

+
+
+
+
+
+ +
+
+ Track Movement of Goods +
+

+ Courier Management module is designed to efficiently manage and track the movement of goods or packages within your organization. +

+
+
+
+
+
+ +
+
+ Streamlines the Delivery Processes +
+

+ This module streamlines the delivery processes, ensuring that your shipments are handled smoothly and delivered to the right recipients in a timely manner. +

+
+
+
+
+
+ +
+
+ Portal Access +
+

+ We can manage the courier request through portal. +

+
+
+
+
+ +
+
+
+ COURIER MANAGEMENT +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ Courier Management + + Menu +

+
+
+

+ Click on the Courier Management menu in the app view. +

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

+ Courier Management + + + Configuration Menu Of Administrator. +

+
+
+

+ These are the menus for configuring the details of courier for administrators. +

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

+ Courier Request + + Tree View +

+
+
+

+ This is the tree view of courier requests. +

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

+ Courier Request + + + Filters +

+
+
+

+ These are the filter options in the courier requests. +

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

+ Courier Request + + + Group By +

+
+
+

+ These are the group by options in the courier requests. +

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

+ Courier Request + + + Form View +

+
+
+

+ This is the form view of the courier requests. +

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

+ Courier Request + + + Kanban View +

+
+
+

+ This is the kanban view of the courier requests. +

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

+ Courier Request + + + Calendar View +

+
+
+

+ This is the Calendar view of the courier requests. +

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

+ Courier Request + + + Graph View +

+
+
+

+ This is the graph view of the courier requests. +

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

+ Courier Request + + + Pivot View +

+
+
+

+ This is the pivot view of the courier requests. +

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

+ Courier Request + + + Invoice Button +

+
+
+

+ There is a button create invoices for courier request in request form view. +

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

+ Courier Request + + + Invoice Smart Tab +

+
+
+

+ There is a smart tab to show the related invoice of the courier request in form. +

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

+ Courier Request + + + Invoice Tree View +

+
+
+

+ This is the list view of the related invoice of the courier request. +

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

+ Courier Request + + + Invoice Form View +

+
+
+

+ This is the form view of the related invoice of the courier request. +

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

+ Courier Request + + + Report +

+
+
+

+ There is option to print te courier request report. +

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

+ Courier Request + + + PDF Report +

+
+
+

+ This is the printed report. +

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

+ Courier Request + + + Tag Tree View +

+
+
+

+ This is the tree view of the courier request tags. +

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

+ Courier Request + + + Type Tree View +

+
+
+

+ This is the tree view of the courier request types. +

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

+ Courier Request + + + Category Tree View +

+
+
+

+ This is the tree view of the courier request categories. +

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

+ Courier Request + + + Priority Tree View +

+
+
+

+ This is the tree view of the courier request priorities. +

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

+ Courier Request + + + Priority Form View +

+
+
+

+ This is the form view of the courier request priority. +

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

+ Courier Request + + + Weight Price Rules Tree View +

+
+
+

+ This is the tree view of the courier request weight price rules. +

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

+ Courier Request + + + Weight Price Rule Form View +

+
+
+

+ This is the form view of the courier request weight price rule. +

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

+ Courier Request + + + Dimension Price Rules Tree View +

+
+
+

+ This is the tree view of the courier request dimension price rules. +

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

+ Courier Request + + + Dimension Price Rule Form View +

+
+
+

+ This is the form view of the courier request dimension price rule. +

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

+ Courier Request + + + Distance Price Rules Tree View +

+
+
+

+ This is the tree view of the courier request distance price rules. +

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

+ Courier Request + + + Distance Price Rule Form View +

+
+
+

+ This is the form view of the courier request distance price rule. +

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

+ Courier Request + + + Portal View +

+
+
+

+ This is the portal view of the courier request in my account. +

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

+ Courier Request + + + Portal Tree View +

+
+
+

+ This is the tree view of the courier request in the portal. +

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

+ Courier Request + + + Portal Search +

+
+
+

+ This is the search option in the courier request list in the portal. +

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

+ Courier Request + + + Portal Group By Type +

+
+
+

+ There is an option to group the courier request by the type in the portal view. +

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

+ Courier Request + + + Portal Group By Category +

+
+
+

+ There is an option to group the courier request by the category in the portal view. +

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

+ Courier Request + + + Portal Form View +

+
+
+

+ This is the form view of the courier request in the portal. +

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

+ Courier Request + + + Administrator +

+
+
+

+ There is access of administrator in the courier request module. +

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

+ Courier Request + + + Administrator Login +

+
+
+

+ Administrator can access all the requests and all the menu under configuration. +

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

+ Courier Request + + + User +

+
+
+

+ There is access of User in the courier request module. +

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

+ Courier Request + + + User Login +

+
+
+

+ Users can only access their own courier requests. +

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

+ Courier Request + + + User View of Configuration +

+
+
+

+ Users can only access certain menus under configuration. +

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

+ Allow you to manage courier requests.

+
+ +
+
+
+
+
+
+ +
+

+ Priority

+
+
+

+ Allow the users to add priority, and it has a price based on priority.The price will be affected on the invoice. +

+
+
+
+
+
+
+
+ +
+

+ Dimension

+
+
+

+ Allow the users to add L X W X H, and it has a price based on L X W X H.The price will be affected on the invoice. +

+
+
+
+
+
+
+
+ +
+

+ Distance

+
+
+

+ Allow the users to add the distance, and it has a price based on distance.The price will be affected on the invoice. +

+
+
+
+
+
+
+
+ +
+

+ Weight Price Rule

+
+
+

+ Courier request line with total weight field the system will check weight price rule for that weight if any weight price rule will match with that weight it added to the line.If there is no weight rule match with that weight, We will check the weight is smaller than minimum weight or greater than maximum weight. If the weight is smaller than minimum weights the smallest price is added, If the weight is greater than maximum weight the large price is added. +

+
+
+
+
+
+
+
+ +
+

+ Distance Price Rule

+
+
+

+ Courier request have a total kilometres field the system will check distance price rule for that distance if any distance price rule will match with that distance it added to the line.If there is no distance price rule match with that distance, We will check the distance is smaller than minimum distance or greater than maximum distance. If the distance is smaller than minimum distance the smallest price is added, If the distance is greater than maximum distance the large price is added. +

+
+
+
+
+
+
+
+ +
+

+ The subtotal of the courier line is based on the weight price.

+
+
+
+
+
+
+
+ +
+

+ Allow the courier administrator to create an invoice from courier request.

+
+
+
+
+
+
+
+ +
+

+ Allow the courier administrator can print pdf report.

+
+
+
+
+
+
+
+ +
+

+ Courier administrator can only configure the courier priority.

+
+
+
+
+
+
+
+ +
+

+ Courier administrator can only configure the courier distance price rule.

+
+
+
+
+
+
+
+ +
+

+ Courier administrator can only configure the courier weight price.

+
+
+
+
+
+
+
+ +
+

+ Courier administrator can only configure the courier dimension price rule.

+
+
+
+
+
+
+
+ +
+

+ Courier administrator and user can configure the courier tags,type and category.

+
+
+
+
+
+
+
+ +
+

+ Portal user login and see its own courier request.

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

+ Courier request line with total weight field the system will check weight price rule for that weight if any weight price rule will match with that weight it added to the line.If there is no weight rule match with that weight, We will check the weight is smaller than minimum weight or greater than maximum weight. If the weight is smaller than minimum weights the smallest price is added, If the weight is greater than maximum weight the large price is added. +

+
+
+ +
+ +
+

+ Courier request have a total kilometres field the system will check distance price rule for that distance if any distance price rule will match with that distance it added to the line.If there is no distance price rule match with that distance, We will check the distance is smaller than minimum distance or greater than maximum distance. If the distance is smaller than minimum distance the smallest price is added, If the distance is greater than maximum distance the large price is added. +

+
+
+ +
+ +
+

+ No, Only administrators can access the priority, distance and weight price rule configurations. +

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

+ Latest Release 18.0.1.0.0 +

+ + 24th February, 2025 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ + +
+

+ Related Products +

+ +
+ + + +
+

+ Our Services

+ +
+ +
+
+ .... +
+
+ +
+ + +
+
+ + + + + + diff --git a/courier_management/static/src/js/courier_request_group_by_search.js b/courier_management/static/src/js/courier_request_group_by_search.js new file mode 100644 index 000000000..d38a4f35d --- /dev/null +++ b/courier_management/static/src/js/courier_request_group_by_search.js @@ -0,0 +1,36 @@ +/** @odoo-module **/ +import publicWidget from "@web/legacy/js/public/public_widget"; +import { rpc } from "@web/core/network/rpc"; + +publicWidget.registry.CourierRequest = publicWidget.Widget.extend({ + selector: '.groupby_courier', + events : { + 'change #group_select_courier_requests' : '_onChangeCourierRequests', + 'change #courier_requests_search_box' : '_onChangeCourierRequestsSearch', + 'click #search_courier_requests_button' : '_onClickCourierRequests' + }, + // This is for getting group value of courier requests + _onChangeCourierRequests: function(){ + let self = this + var search_value = this.$el.find("#group_select_courier_requests").val(); + rpc('/courier/requests/group/by', { + 'search_value': search_value, + }).then(function(result) { + self.$el.find("#search_courier_requests_group").html(result); + }); + }, + // This is for getting search value of courier requests + _onClickCourierRequests: function(){ + let self = this + var search_value = self.$el.find("#courier_requests_search_box").val(); + rpc('/courier/requests/search', { + 'search_value': search_value, + }).then(function(result) { + self.$el.find("#search_courier_requests_group").html(result); + }); + }, + + _onChangeCourierRequestsSearch: function(){ + this._onClickCourierRequests() + } +}) diff --git a/courier_management/views/account_move_views.xml b/courier_management/views/account_move_views.xml new file mode 100644 index 000000000..d9601009e --- /dev/null +++ b/courier_management/views/account_move_views.xml @@ -0,0 +1,14 @@ + + + + + account.move.view.form.inherit.courier.management + account.move + + + + + + + + diff --git a/courier_management/views/courier_category_views.xml b/courier_management/views/courier_category_views.xml new file mode 100644 index 000000000..aeec2b450 --- /dev/null +++ b/courier_management/views/courier_category_views.xml @@ -0,0 +1,19 @@ + + + + + courier.category.view.tree + courier.category + + + + + + + + + Categories + courier.category + list + + diff --git a/courier_management/views/courier_detail_views.xml b/courier_management/views/courier_detail_views.xml new file mode 100644 index 000000000..f79689d25 --- /dev/null +++ b/courier_management/views/courier_detail_views.xml @@ -0,0 +1,41 @@ + + + + + courier.detail.view.tree + courier.detail + + + + + + + + + + + + + + courier.detail.view.form + courier.detail + +
+ + + + + + + + + + + + + + +
+
+
+
diff --git a/courier_management/views/courier_dimension_price_views.xml b/courier_management/views/courier_dimension_price_views.xml new file mode 100644 index 000000000..b1f0f25c6 --- /dev/null +++ b/courier_management/views/courier_dimension_price_views.xml @@ -0,0 +1,56 @@ + + + + + courier.dimension.price.view.tree + courier.dimension.price + + + + + + + + + + + + + + courier.dimension.price.view.form + courier.dimension.price + +
+ +

+ +

+ + + + + + + + + + +
+
+
+
+ + + Dimension Price Rules + courier.dimension.price + list,form + +
diff --git a/courier_management/views/courier_distance_price_views.xml b/courier_management/views/courier_distance_price_views.xml new file mode 100644 index 000000000..477ab01fd --- /dev/null +++ b/courier_management/views/courier_distance_price_views.xml @@ -0,0 +1,53 @@ + + + + + courier.distance.price.view.tree + courier.distance.price + + + + + + + + + + + + courier.distance.price.view.form + courier.distance.price + +
+ +

+ +

+ + + + + + + + + +
+
+
+
+ + + Distance Price Rules + courier.distance.price + list,form + +
diff --git a/courier_management/views/courier_management_menus.xml b/courier_management/views/courier_management_menus.xml new file mode 100644 index 000000000..9597f2ed5 --- /dev/null +++ b/courier_management/views/courier_management_menus.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + diff --git a/courier_management/views/courier_priority_views.xml b/courier_management/views/courier_priority_views.xml new file mode 100644 index 000000000..f6f24c5fe --- /dev/null +++ b/courier_management/views/courier_priority_views.xml @@ -0,0 +1,37 @@ + + + + + courier.priority.view.tree + courier.priority + + + + + + + + + + courier.priority.view.form + courier.priority + +
+ + + + + + + + +
+
+
+ + + Priorities + courier.priority + list,form + +
diff --git a/courier_management/views/courier_request_search_group_by_templates.xml b/courier_management/views/courier_request_search_group_by_templates.xml new file mode 100644 index 000000000..bbd1482be --- /dev/null +++ b/courier_management/views/courier_request_search_group_by_templates.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/courier_management/views/courier_request_templates.xml b/courier_management/views/courier_request_templates.xml new file mode 100644 index 000000000..8fbbd59b4 --- /dev/null +++ b/courier_management/views/courier_request_templates.xml @@ -0,0 +1,377 @@ + + + + + + + + + + + + + diff --git a/courier_management/views/courier_request_views.xml b/courier_management/views/courier_request_views.xml new file mode 100644 index 000000000..cf35b923f --- /dev/null +++ b/courier_management/views/courier_request_views.xml @@ -0,0 +1,400 @@ + + + + + courier.request.view.tree + courier.request + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + courier.request.view.form + courier.request + +
+
+ +
+ +
+
+

+ +

+ + + + + Address + +
+ + + + + +
+ +
+
+ + +
+ + + + Address + +
+ + + + + +
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ Volumetric Weight Price: + + Priority Amount: + + Distance Amount: + + Total Courier Charges: + +
Total:
+ +
+
+
+
+ + +
+
+ + + courier.request.view.kanban + courier.request + + + + + + + + + + +
+
+
+ + + +
+
+ Sender: + +
+ Receiver: + +
+ + + +
+
+
+
+
+
+
+
+ + + courier.request.view.search + courier.request + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + courier.request.view.calender + courier.request + + + + + + + + + + + + + + + + + + + courier.request.view.graph + courier.request + + + + + + + + + + + + + + + + + + + courier.request.view.pivot + courier.request + + + + + + + + + + + Courier Requests + courier.request + list,form,kanban,calendar,graph,pivot + +
diff --git a/courier_management/views/courier_tag_views.xml b/courier_management/views/courier_tag_views.xml new file mode 100644 index 000000000..434f4b605 --- /dev/null +++ b/courier_management/views/courier_tag_views.xml @@ -0,0 +1,19 @@ + + + + courier.tag.view.tree + courier.tag + + + + + + + + + + Courier Tags + courier.tag + list,form + + diff --git a/courier_management/views/courier_type_views.xml b/courier_management/views/courier_type_views.xml new file mode 100644 index 000000000..1c28e393e --- /dev/null +++ b/courier_management/views/courier_type_views.xml @@ -0,0 +1,19 @@ + + + + + courier.type.view.tree + courier.type + + + + + + ZZ + + + Types + courier.type + list + + diff --git a/courier_management/views/courier_weight_price_views.xml b/courier_management/views/courier_weight_price_views.xml new file mode 100644 index 000000000..dfdc6050d --- /dev/null +++ b/courier_management/views/courier_weight_price_views.xml @@ -0,0 +1,52 @@ + + + + courier.weight.price.view.tree + courier.weight.price + + + + + + + + + + + + courier.weight.price.view.form + courier.weight.price + +
+ +

+ +

+ + + + + + + + + +
+
+
+
+ + + Weight Price Rules + courier.weight.price + list,form + +