@ -0,0 +1,46 @@ |
|||||
|
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg |
||||
|
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
||||
|
:alt: License: AGPL-3 |
||||
|
|
||||
|
Freight Management |
||||
|
================== |
||||
|
* Module for Managing All Freight Operations |
||||
|
|
||||
|
Configuration |
||||
|
============= |
||||
|
* No additional configurations needed |
||||
|
|
||||
|
License |
||||
|
------- |
||||
|
General Public License, Version 3 (AGPL v3). |
||||
|
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) |
||||
|
|
||||
|
Company |
||||
|
------- |
||||
|
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
||||
|
|
||||
|
Credits |
||||
|
------- |
||||
|
* Developer: (V18) Abbas P, 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 <https://cybrosys.com/>`__ |
||||
|
|
||||
|
Further information |
||||
|
=================== |
||||
|
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from . import model |
||||
|
from . import wizard |
@ -0,0 +1,55 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
{ |
||||
|
'name': 'Freight Management', |
||||
|
'version': '18.0.1.0.0', |
||||
|
'category': 'Industries', |
||||
|
'summary': 'Module for Managing All Freight Operations', |
||||
|
'description': 'From efficient order creation and dynamic shipment planning' |
||||
|
'to real-time tracking and meticulous documentation' |
||||
|
'management', |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'website': 'https://www.cybrosys.com', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'maintainer': 'Cybrosys Techno Solutions', |
||||
|
'depends': ['base', 'product', 'account'], |
||||
|
'data': [ |
||||
|
'security/freight_security.xml', |
||||
|
'security/ir.model.access.csv', |
||||
|
'data/ir_sequence_data.xml', |
||||
|
'data/freight_routes_data.xml', |
||||
|
'views/freight_order_views.xml', |
||||
|
'views/freight_port_views.xml', |
||||
|
'views/freight_container_views.xml', |
||||
|
'views/custom_clearance_views.xml', |
||||
|
'views/freight_service_views.xml', |
||||
|
'views/order_track_views.xml', |
||||
|
'report/freight_report_templates.xml', |
||||
|
'report/tracking_report_templates.xml', |
||||
|
'wizard/custom_clearance_revision_views.xml' |
||||
|
], |
||||
|
'images': ['static/description/banner.png'], |
||||
|
'license': 'AGPL-3', |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': True, |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data noupdate="1"> |
||||
|
<!-- Created a route--> |
||||
|
<record model="freight.routes" id="main_carriage"> |
||||
|
<field name="name">Main Carriage</field> |
||||
|
<field name="land_sale">0.00</field> |
||||
|
<field name="air_sale">0.00</field> |
||||
|
<field name="water_sale">0.00</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,15 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data noupdate="1"> |
||||
|
<!-- Freight order sequence--> |
||||
|
<record id="freight_order_sequence" model="ir.sequence"> |
||||
|
<field name="name">Freight Order Sequence</field> |
||||
|
<field name="code">freight.order.sequence</field> |
||||
|
<field name="prefix">FO-%(year)s-%(month)s-%(day)s-</field> |
||||
|
<field eval="1" name="number_next"/> |
||||
|
<field eval="1" name="number_increment"/> |
||||
|
<field eval="True" name="use_date_range"/> |
||||
|
<field name="padding">4</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,7 @@ |
|||||
|
## Module <freight_management_system> |
||||
|
|
||||
|
#### 15.03.2025 |
||||
|
#### Version 18.0.1.0.0 |
||||
|
#### ADD |
||||
|
|
||||
|
- Initial commit for Freight Management |
@ -0,0 +1,30 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from . import custom_clearance |
||||
|
from . import clearance_revision |
||||
|
from . import freight_container |
||||
|
from . import freight_order |
||||
|
from . import freight_order_track |
||||
|
from . import freight_port |
||||
|
from . import freight_price |
||||
|
from . import freight_routes |
||||
|
from . import freight_service |
@ -0,0 +1,39 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class CustomClearanceRevision(models.Model): |
||||
|
"""Allows custom clearance for freight orders""" |
||||
|
_name = 'clearance.revision' |
||||
|
_description = 'Custom Clearance Revision' |
||||
|
|
||||
|
name = fields.Char(string='Name', help='Name of the revision') |
||||
|
reason = fields.Text(string='Reason', help='Reason for revision') |
||||
|
clearance_id = fields.Many2one('custom.clearance', |
||||
|
string='Custom Clearance', |
||||
|
help='Relation from custom clearance') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
@ -0,0 +1,170 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from werkzeug import urls |
||||
|
from odoo import api, fields, models, _ |
||||
|
|
||||
|
|
||||
|
class CustomClearance(models.Model): |
||||
|
"""Model for custom clearance""" |
||||
|
_name = 'custom.clearance' |
||||
|
_description = 'Custom Clearance' |
||||
|
|
||||
|
name = fields.Char(string='Name', compute='_compute_name', |
||||
|
help='Name of custom clearance') |
||||
|
freight_id = fields.Many2one('freight.order', required=True, |
||||
|
string='Freight Order', |
||||
|
help='Select the freight order') |
||||
|
date = fields.Date(string='Date', help='Date of clearance') |
||||
|
agent_id = fields.Many2one('res.partner', string='Agent', required=True, |
||||
|
help='Select the agent for the clearance') |
||||
|
loading_port_id = fields.Many2one('freight.port', string="Loading Port", |
||||
|
help='Select the port for loading') |
||||
|
discharging_port_id = fields.Many2one('freight.port', |
||||
|
string="Discharging Port", |
||||
|
help='Specify the discharging port') |
||||
|
line_ids = fields.One2many('custom.clearance.line', 'clearance_id', |
||||
|
string='Clearance Line', |
||||
|
help='Line for adding the document') |
||||
|
state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirm'), |
||||
|
('done', 'Done')], |
||||
|
default='draft', string="State", |
||||
|
help='Different states of custom clearance') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
||||
|
|
||||
|
@api.depends('freight_id') |
||||
|
def _compute_name(self): |
||||
|
"""Compute the name of custom clearance""" |
||||
|
for freight in self: |
||||
|
freight.name = 'CC - ' + str( |
||||
|
freight.freight_id.name) if freight.freight_id else 'CC - ' |
||||
|
|
||||
|
@api.onchange('freight_id') |
||||
|
def _onchange_freight_id(self): |
||||
|
"""Getting default values for loading and discharging port""" |
||||
|
for rec in self: |
||||
|
rec.date = rec.freight_id.order_date |
||||
|
rec.loading_port_id = rec.freight_id.loading_port_id |
||||
|
rec.discharging_port_id = rec.freight_id.discharging_port_id |
||||
|
rec.agent_id = rec.freight_id.agent_id |
||||
|
|
||||
|
def action_confirm(self): |
||||
|
"""Send mail to inform agents to custom clearance is confirmed""" |
||||
|
for rec in self: |
||||
|
rec.name = 'CC' \ |
||||
|
' - ' + rec.freight_id.name |
||||
|
rec.state = 'confirm' |
||||
|
base_url = self.env['ir.config_parameter'].sudo().get_param( |
||||
|
'web.base.url') |
||||
|
Urls = urls.url_join(base_url, |
||||
|
'odoo/action-%(actionId)s/%(id)s' % { |
||||
|
'id': self.id, 'actionId': self.env.ref('freight_management_system.custom_clearance_action').id}) |
||||
|
Urls_ = urls.url_join(base_url, |
||||
|
'odoo/action-%(actionId)s/%(id)s' % { |
||||
|
'id': self.freight_id.id, 'actionId': self.env.ref('freight_management_system.freight_order_action').id}) |
||||
|
mail_content = _('Hi %s,<br>' |
||||
|
'The Custom Clearance %s is confirmed' |
||||
|
'<div style = "text-align: center; ' |
||||
|
'margin-top: 16px;"><a href = "%s"' |
||||
|
'style = "padding: 5px 10px; font-size: 12px; ' |
||||
|
'line-height: 18px; color: #FFFFFF; ' |
||||
|
'border-color:#875A7B;text-decoration: none; ' |
||||
|
'display: inline-block; ' |
||||
|
'margin-bottom: 0px; font-weight: 400;' |
||||
|
'text-align: center; vertical-align: middle; ' |
||||
|
'cursor: pointer; white-space: nowrap; ' |
||||
|
'background-image: none; ' |
||||
|
'background-color: #875A7B; ' |
||||
|
'border: 1px solid #875A7B; border-radius:3px;">' |
||||
|
'View %s</a></div>' |
||||
|
'<div style = "text-align: center; ' |
||||
|
'margin-top: 16px;"><a href = "%s"' |
||||
|
'style = "padding: 5px 10px; font-size: 12px; ' |
||||
|
'line-height: 18px; color: #FFFFFF; ' |
||||
|
'border-color:#875A7B;text-decoration: none; ' |
||||
|
'display: inline-block; ' |
||||
|
'margin-bottom: 0px; font-weight: 400;' |
||||
|
'text-align: center; vertical-align: middle; ' |
||||
|
'cursor: pointer; white-space: nowrap; ' |
||||
|
'background-image: none; ' |
||||
|
'background-color: #875A7B; ' |
||||
|
'border: 1px solid #875A7B; border-radius:3px;">' |
||||
|
'View %s</a></div>' |
||||
|
) % (rec.agent_id.name, rec.name, Urls, |
||||
|
rec.name, Urls_, self.freight_id.name) |
||||
|
main_content = { |
||||
|
'subject': _('Custom Clearance For %s') % self.freight_id.name, |
||||
|
'author_id': self.env.user.partner_id.id, |
||||
|
'body_html': mail_content, |
||||
|
'email_to': rec.agent_id.email, |
||||
|
} |
||||
|
mail_id = self.env['mail.mail'].create(main_content) |
||||
|
mail_id.mail_message_id.body = mail_content |
||||
|
mail_id.send() |
||||
|
|
||||
|
def action_revision(self): |
||||
|
"""Creating custom revision""" |
||||
|
self.ensure_one() |
||||
|
return { |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'name': 'Received/Delivered', |
||||
|
'view_mode': 'form', |
||||
|
'target': 'new', |
||||
|
'res_model': 'custom.clearance.revision', |
||||
|
'context': { |
||||
|
'default_custom_id': self.id |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
def action_get_revision(self): |
||||
|
"""Getting details of custom revision""" |
||||
|
self.ensure_one() |
||||
|
return { |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'name': 'Custom Revision', |
||||
|
'view_mode': 'list,form', |
||||
|
'res_model': 'custom.clearance.revision', |
||||
|
'domain': [('custom_id', '=', self.id)], |
||||
|
'context': "{'create': False}" |
||||
|
} |
||||
|
|
||||
|
|
||||
|
class CustomClearanceLine(models.Model): |
||||
|
"""Uploading the documents for custom clearance""" |
||||
|
_name = 'custom.clearance.line' |
||||
|
_description = 'Custom Clearance Line' |
||||
|
|
||||
|
name = fields.Char(string='Document Name', |
||||
|
help='Name of the document attaching') |
||||
|
document = fields.Binary(string="Documents", store=True, attachment=True, |
||||
|
help='Upload the document') |
||||
|
clearance_id = fields.Many2one('custom.clearance', |
||||
|
string='Custom Clearance', |
||||
|
help='Relation from custom clearance') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
@ -0,0 +1,55 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class FreightContainer(models.Model): |
||||
|
"""Model for creating the containers for freight""" |
||||
|
_name = 'freight.container' |
||||
|
_description = 'Freight Container' |
||||
|
|
||||
|
name = fields.Char(string='Name', required=True, |
||||
|
help='Name of the container') |
||||
|
code = fields.Char(string='Code', help='Code for the container') |
||||
|
size = fields.Float(string='Size', required=True, |
||||
|
help='Size of the container') |
||||
|
size_uom_id = fields.Many2one('uom.uom', string='Size UOM', |
||||
|
help='The unit of measure of selected size') |
||||
|
weight = fields.Float(string='Weight', required=True, |
||||
|
help='The weight capacity of container') |
||||
|
weight_uom_id = fields.Many2one('uom.uom', string='Weight UOM', |
||||
|
help='The unit of measure of selected' |
||||
|
'weight') |
||||
|
volume = fields.Float(string='Volume', required=True, |
||||
|
help='Volume of the container') |
||||
|
volume_uom_id = fields.Many2one('uom.uom', string='Volume UOM', |
||||
|
help='The unit of measure of the volume') |
||||
|
active = fields.Boolean(string='Active', default=True, |
||||
|
help='Make it active or inactive') |
||||
|
state = fields.Selection([('available', 'Available'), |
||||
|
('reserve', 'Reserve')], default='available', |
||||
|
help='Select the state') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
@ -0,0 +1,588 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from werkzeug import urls |
||||
|
from odoo import api, fields, models, _ |
||||
|
from odoo.exceptions import ValidationError |
||||
|
|
||||
|
|
||||
|
class FreightOrder(models.Model): |
||||
|
"""Model for creating freight orders""" |
||||
|
_name = 'freight.order' |
||||
|
_description = 'Freight Order' |
||||
|
|
||||
|
name = fields.Char(string='Name', default='New', readonly=True, |
||||
|
help='Name of the order') |
||||
|
shipper_id = fields.Many2one('res.partner', string='Shipper', required=True, |
||||
|
help="Shipper's Details") |
||||
|
consignee_id = fields.Many2one('res.partner', 'Consignee', |
||||
|
help="Select the consignee for the order") |
||||
|
type = fields.Selection([('import', 'Import'), ('export', 'Export')], |
||||
|
string='Import/Export', required=True, |
||||
|
help="Type of freight operation") |
||||
|
transport_type = fields.Selection([('land', 'Land'), ('air', 'Air'), |
||||
|
('water', 'Water')], string='Transport', |
||||
|
help='Type of transportation', |
||||
|
required=True) |
||||
|
land_type = fields.Selection([('ltl', 'LTL'), ('ftl', 'FTL')], |
||||
|
string='Land Shipping', |
||||
|
help="Types of shipment movement involved in" |
||||
|
"Land") |
||||
|
water_type = fields.Selection([('fcl', 'FCL'), ('lcl', 'LCL')], |
||||
|
string='Water Shipping', |
||||
|
help="Types of shipment movement involved in" |
||||
|
"Water") |
||||
|
order_date = fields.Date(string='Date', default=fields.Date.today(), |
||||
|
help="Date of order") |
||||
|
loading_port_id = fields.Many2one('freight.port', string="Loading Port", |
||||
|
required=True, |
||||
|
help="Loading port of the freight order") |
||||
|
discharging_port_id = fields.Many2one('freight.port', |
||||
|
string="Discharging Port", |
||||
|
required=True, |
||||
|
help="Discharging port of freight" |
||||
|
"order") |
||||
|
state = fields.Selection([('draft', 'Draft'), ('submit', 'Submitted'), |
||||
|
('confirm', 'Confirmed'), |
||||
|
('invoice', 'Invoiced'), ('done', 'Done'), |
||||
|
('cancel', 'Cancel')], |
||||
|
default='draft', string="State", |
||||
|
help='Different states of freight order') |
||||
|
clearance = fields.Boolean(string='Clearance', help='Checking the' |
||||
|
'clearance') |
||||
|
clearance_count = fields.Integer(compute='_compute_count', |
||||
|
string='Clearance Count', |
||||
|
help='The number of clearance') |
||||
|
invoice_count = fields.Integer(compute='_compute_count', |
||||
|
string='Invoice Count', |
||||
|
help='The number invoice created') |
||||
|
total_order_price = fields.Float(string='Total', |
||||
|
compute='_compute_total_order_price', |
||||
|
help='The total order price') |
||||
|
total_volume = fields.Float(string='Total Volume', |
||||
|
compute='_compute_total_order_price', |
||||
|
help='The total used volume') |
||||
|
total_weight = fields.Float(string='Total Weight', |
||||
|
compute='_compute_total_order_price', |
||||
|
help='The total weight used') |
||||
|
order_ids = fields.One2many('freight.order.line', 'order_id', |
||||
|
string='Freight Order Line', |
||||
|
help='The freight order lines of the order') |
||||
|
route_ids = fields.One2many('freight.order.routes.line', 'freight_id', |
||||
|
string='Route', help='The route of order') |
||||
|
total_route_sale = fields.Float(string='Total Sale', |
||||
|
compute="_compute_total_route_cost", |
||||
|
help='The total cost of sale') |
||||
|
service_ids = fields.One2many('freight.order.service', 'freight_id', |
||||
|
string="Service", help='Service of the order') |
||||
|
total_service_sale = fields.Float(string='Service Total Sale', |
||||
|
compute="_compute_total_service_cost", |
||||
|
help='The total service cost of order') |
||||
|
agent_id = fields.Many2one('res.partner', string='Agent', |
||||
|
required=True, help="Details of agent") |
||||
|
expected_date = fields.Date(string='Expected Date', help='The expected date' |
||||
|
'of the order') |
||||
|
track_ids = fields.One2many('freight.track', 'freight_id', |
||||
|
string='Tracking', help='For tracking the' |
||||
|
'freight orders') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
||||
|
|
||||
|
@api.depends('order_ids.total_price', 'order_ids.volume', |
||||
|
'order_ids.weight') |
||||
|
def _compute_total_order_price(self): |
||||
|
"""Computing the price of the order""" |
||||
|
for rec in self: |
||||
|
rec.total_order_price = sum(rec.order_ids.mapped('total_price')) |
||||
|
rec.total_volume = sum(rec.order_ids.mapped('volume')) |
||||
|
rec.total_weight = sum(rec.order_ids.mapped('weight')) |
||||
|
|
||||
|
@api.depends('route_ids.sale') |
||||
|
def _compute_total_route_cost(self): |
||||
|
"""Computing the total cost of route operation""" |
||||
|
for rec in self: |
||||
|
rec.total_route_sale = sum(rec.route_ids.mapped('sale')) |
||||
|
|
||||
|
@api.depends('service_ids.total_sale') |
||||
|
def _compute_total_service_cost(self): |
||||
|
"""Computing the total cost of services""" |
||||
|
for rec in self: |
||||
|
rec.total_service_sale = sum(rec.service_ids.mapped('total_sale')) |
||||
|
|
||||
|
@api.model_create_multi |
||||
|
def create(self, vals_list): |
||||
|
"""Create Sequence for multiple records""" |
||||
|
for vals in vals_list: |
||||
|
vals['name'] = self.env['ir.sequence'].next_by_code( |
||||
|
'freight.order.sequence') |
||||
|
return super(FreightOrder, self).create(vals_list) |
||||
|
|
||||
|
def action_create_custom_clearance(self): |
||||
|
"""Create custom clearance""" |
||||
|
clearance = self.env['custom.clearance'].create({ |
||||
|
'name': 'CC - ' + self.name, |
||||
|
'freight_id': self.id, |
||||
|
'date': self.order_date, |
||||
|
'loading_port_id': self.loading_port_id.id, |
||||
|
'discharging_port_id': self.discharging_port_id.id, |
||||
|
'agent_id': self.agent_id.id, |
||||
|
}) |
||||
|
result = { |
||||
|
'name': 'action.name', |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'views': [[False, 'form']], |
||||
|
'target': 'current', |
||||
|
'res_id': clearance.id, |
||||
|
'res_model': 'custom.clearance', |
||||
|
} |
||||
|
self.clearance = True |
||||
|
return result |
||||
|
|
||||
|
def get_custom_clearance(self): |
||||
|
"""Get custom clearance""" |
||||
|
self.ensure_one() |
||||
|
return { |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'name': 'Custom Clearance', |
||||
|
'view_mode': 'list,form', |
||||
|
'res_model': 'custom.clearance', |
||||
|
'domain': [('freight_id', '=', self.id)], |
||||
|
'context': "{'create': False}" |
||||
|
} |
||||
|
|
||||
|
def action_track_order(self): |
||||
|
"""Track the order""" |
||||
|
self.ensure_one() |
||||
|
return { |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'name': 'Received/Delivered', |
||||
|
'view_mode': 'form', |
||||
|
'target': 'new', |
||||
|
'res_model': 'freight.order.track', |
||||
|
'context': { |
||||
|
'default_freight_id': self.id |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
def action_create_invoice(self): |
||||
|
"""Create invoice""" |
||||
|
lines = [] |
||||
|
if self.order_ids: |
||||
|
for order in self.order_ids: |
||||
|
value = (0, 0, { |
||||
|
'name': order.product_id.name, |
||||
|
'price_unit': order.price, |
||||
|
'quantity': order.volume + order.weight, |
||||
|
}) |
||||
|
lines.append(value) |
||||
|
if self.route_ids: |
||||
|
for route in self.route_ids: |
||||
|
value = (0, 0, { |
||||
|
'name': route.routes_id.name, |
||||
|
'price_unit': route.sale, |
||||
|
}) |
||||
|
lines.append(value) |
||||
|
if self.service_ids: |
||||
|
for service in self.service_ids: |
||||
|
value = (0, 0, { |
||||
|
'name': service.service_id.name, |
||||
|
'price_unit': service.sale, |
||||
|
'quantity': service.qty |
||||
|
}) |
||||
|
lines.append(value) |
||||
|
invoice_line = { |
||||
|
'move_type': 'out_invoice', |
||||
|
'partner_id': self.shipper_id.id, |
||||
|
'invoice_user_id': self.env.user.id, |
||||
|
'invoice_origin': self.name, |
||||
|
'ref': self.name, |
||||
|
'invoice_line_ids': lines, |
||||
|
} |
||||
|
inv = self.env['account.move'].create(invoice_line) |
||||
|
result = { |
||||
|
'name': 'action.name', |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'views': [[False, 'form']], |
||||
|
'target': 'current', |
||||
|
'res_id': inv.id, |
||||
|
'res_model': 'account.move', |
||||
|
} |
||||
|
self.state = 'invoice' |
||||
|
return result |
||||
|
|
||||
|
def action_cancel(self): |
||||
|
"""Cancel the record""" |
||||
|
if self.state == 'draft' and self.state == 'submit': |
||||
|
self.state = 'cancel' |
||||
|
else: |
||||
|
raise ValidationError("You can't cancel this order") |
||||
|
|
||||
|
def get_invoice(self): |
||||
|
"""View the invoice""" |
||||
|
self.ensure_one() |
||||
|
return { |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'name': 'Invoice', |
||||
|
'view_mode': 'list,form', |
||||
|
'res_model': 'account.move', |
||||
|
'domain': [('ref', '=', self.name)], |
||||
|
'context': "{'create': False}" |
||||
|
} |
||||
|
|
||||
|
@api.depends('name') |
||||
|
def _compute_count(self): |
||||
|
"""Compute custom clearance and account move's count""" |
||||
|
for rec in self: |
||||
|
if rec.env['custom.clearance'].search( |
||||
|
[('freight_id', '=', rec.id)]): |
||||
|
rec.clearance_count = rec.env['custom.clearance'].search_count( |
||||
|
[('freight_id', '=', rec.id)]) |
||||
|
else: |
||||
|
rec.clearance_count = 0 |
||||
|
if rec.env['account.move'].search([('ref', '=', rec.name)]): |
||||
|
rec.invoice_count = rec.env['account.move'].search_count( |
||||
|
[('ref', '=', rec.name)]) |
||||
|
else: |
||||
|
rec.invoice_count = 0 |
||||
|
|
||||
|
def action_submit(self): |
||||
|
"""Submitting order""" |
||||
|
for rec in self: |
||||
|
rec.state = 'submit' |
||||
|
base_url = self.env['ir.config_parameter'].sudo().get_param( |
||||
|
'web.base.url') |
||||
|
Urls = urls.url_join(base_url, |
||||
|
'odoo/action-%(actionId)s/%(id)s' % { |
||||
|
'id': self.id, 'actionId': self.env.ref('freight_management_system.freight_order_action').id}) |
||||
|
mail_content = _('Hi %s,<br>' |
||||
|
'The Freight Order %s is Submitted' |
||||
|
'<div style = "text-align: center; ' |
||||
|
'margin-top: 16px;"><a href = "%s"' |
||||
|
'style = "padding: 5px 10px; font-size: 12px; ' |
||||
|
'line-height: 18px; color: #FFFFFF; ' |
||||
|
'border-color:#875A7B;text-decoration: none; ' |
||||
|
'display: inline-block; margin-bottom: 0px; ' |
||||
|
'font-weight: 400;text-align: center; ' |
||||
|
'vertical-align: middle; cursor: pointer; ' |
||||
|
'white-space: nowrap; background-image: none; ' |
||||
|
'background-color: #875A7B; ' |
||||
|
'border: 1px solid #875A7B; border-radius:3px;">' |
||||
|
'View %s</a></div>' |
||||
|
) % (rec.agent_id.name, rec.name, Urls, rec.name) |
||||
|
email_to = self.env['res.partner'].search([ |
||||
|
('id', 'in', (self.shipper_id.id, self.consignee_id.id, |
||||
|
self.agent_id.id))]) |
||||
|
for mail in email_to: |
||||
|
main_content = { |
||||
|
'subject': _('Freight Order %s is Submitted') % self.name, |
||||
|
'author_id': self.env.user.partner_id.id, |
||||
|
'body_html': mail_content, |
||||
|
'email_to': mail.email |
||||
|
} |
||||
|
mail_id = self.env['mail.mail'].create(main_content) |
||||
|
mail_id.mail_message_id.body = mail_content |
||||
|
mail_id.send() |
||||
|
|
||||
|
def action_confirm(self): |
||||
|
"""Confirm order""" |
||||
|
for rec in self: |
||||
|
custom_clearance = self.env['custom.clearance'].search([ |
||||
|
('freight_id', '=', self.id)]) |
||||
|
if custom_clearance: |
||||
|
for clearance in custom_clearance: |
||||
|
if clearance.state == 'confirm': |
||||
|
rec.state = 'confirm' |
||||
|
base_url = self.env['ir.config_parameter'].sudo().get_param( |
||||
|
'web.base.url') |
||||
|
Urls = urls.url_join(base_url, |
||||
|
'odoo/action-%(actionId)s/%(id)s' % { |
||||
|
'id': self.id, 'actionId': self.env.ref('freight_management_system.freight_order_action').id}) |
||||
|
mail_content = _('Hi %s,<br> ' |
||||
|
'The Freight Order %s is Confirmed ' |
||||
|
'<div style = "text-align: center; ' |
||||
|
'margin-top: 16px;"><a href = "%s"' |
||||
|
'style = "padding: 5px 10px; ' |
||||
|
'font-size: 12px; line-height: 18px; ' |
||||
|
'color: #FFFFFF; border-color:#875A7B; ' |
||||
|
'text-decoration: none; ' |
||||
|
'display: inline-block; ' |
||||
|
'margin-bottom: 0px; font-weight: 400;' |
||||
|
'text-align: center; ' |
||||
|
'vertical-align: middle; ' |
||||
|
'cursor: pointer; white-space: nowrap; ' |
||||
|
'background-image: none; ' |
||||
|
'background-color: #875A7B; ' |
||||
|
'border: 1px solid #875A7B; ' |
||||
|
'border-radius:3px;">' |
||||
|
'View %s</a></div>' |
||||
|
) % (rec.agent_id.name, rec.name, |
||||
|
Urls, rec.name) |
||||
|
email_to = self.env['res.partner'].search([ |
||||
|
('id', 'in', (self.shipper_id.id, |
||||
|
self.consignee_id.id, self.agent_id.id))]) |
||||
|
for mail in email_to: |
||||
|
main_content = { |
||||
|
'subject': _( |
||||
|
'Freight Order %s is Confirmed') % self.name, |
||||
|
'author_id': self.env.user.partner_id.id, |
||||
|
'body_html': mail_content, |
||||
|
'email_to': mail.email |
||||
|
} |
||||
|
mail_id = self.env['mail.mail'].create(main_content) |
||||
|
mail_id.mail_message_id.body = mail_content |
||||
|
mail_id.send() |
||||
|
elif clearance.state == 'draft': |
||||
|
raise ValidationError("the custom clearance ' %s ' is " |
||||
|
"not confirmed" % clearance.name) |
||||
|
else: |
||||
|
raise ValidationError( |
||||
|
"Create a custom clearance for %s" % rec.name) |
||||
|
for line in rec.order_ids: |
||||
|
line.container_id.state = 'reserve' |
||||
|
|
||||
|
def action_done(self): |
||||
|
"""Mark order as done""" |
||||
|
for rec in self: |
||||
|
base_url = self.env['ir.config_parameter'].sudo().get_param( |
||||
|
'web.base.url') |
||||
|
Urls = urls.url_join(base_url, |
||||
|
'odoo/action-%(actionId)s/%(id)s' % { |
||||
|
'id': self.id, 'actionId': self.env.ref('freight_management_system.freight_order_action').id}) |
||||
|
mail_content = _('Hi %s,<br>' |
||||
|
'The Freight Order %s is Completed' |
||||
|
'<div style = "text-align: center; ' |
||||
|
'margin-top: 16px;"><a href = "%s"' |
||||
|
'style = "padding: 5px 10px; font-size: 12px; ' |
||||
|
'line-height: 18px; color: #FFFFFF; ' |
||||
|
'border-color:#875A7B;text-decoration: none; ' |
||||
|
'display: inline-block; ' |
||||
|
'margin-bottom: 0px; font-weight: 400;' |
||||
|
'text-align: center; vertical-align: middle; ' |
||||
|
'cursor: pointer; white-space: nowrap; ' |
||||
|
'background-image: none; ' |
||||
|
'background-color: #875A7B; ' |
||||
|
'border: 1px solid #875A7B; border-radius:3px;">' |
||||
|
'View %s</a></div>' |
||||
|
) % (rec.agent_id.name, rec.name, Urls, rec.name) |
||||
|
email_to = self.env['res.partner'].search([ |
||||
|
('id', 'in', (self.shipper_id.id, self.consignee_id.id, |
||||
|
self.agent_id.id))]) |
||||
|
for mail in email_to: |
||||
|
main_content = { |
||||
|
'subject': _('Freight Order %s is completed') % self.name, |
||||
|
'author_id': self.env.user.partner_id.id, |
||||
|
'body_html': mail_content, |
||||
|
'email_to': mail.email |
||||
|
} |
||||
|
mail_id = self.env['mail.mail'].create(main_content) |
||||
|
mail_id.mail_message_id.body = mail_content |
||||
|
mail_id.send() |
||||
|
self.state = 'done' |
||||
|
for line in rec.order_ids: |
||||
|
line.container_id.state = 'available' |
||||
|
|
||||
|
|
||||
|
class FreightOrderLine(models.Model): |
||||
|
"""Freight order lines are defined""" |
||||
|
_name = 'freight.order.line' |
||||
|
_description = 'Freight Order Line' |
||||
|
|
||||
|
order_id = fields.Many2one('freight.order', string="Freight Order", |
||||
|
help="Reference from freight order") |
||||
|
container_id = fields.Many2one('freight.container', string='Container', |
||||
|
domain="[('state', '=', 'available')]", |
||||
|
help='The freight container') |
||||
|
product_id = fields.Many2one('product.product', string='Goods', |
||||
|
help='The Freight Products') |
||||
|
billing_type = fields.Selection([('weight', 'Weight'), |
||||
|
('volume', 'Volume')], string="Billing On", |
||||
|
help='Select the billing type for' |
||||
|
'calculating the total amount') |
||||
|
pricing_id = fields.Many2one('freight.price', string='Pricing', |
||||
|
help='The pricing of order') |
||||
|
price = fields.Float(string='Unit Price', help='Unit price of the selected' |
||||
|
'goods') |
||||
|
total_price = fields.Float(string='Total Price', help='This will be the' |
||||
|
'total price') |
||||
|
volume = fields.Float(string='Volume', help='Volume of the goods') |
||||
|
weight = fields.Float(string='Weight', help='Weight of the goods') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
||||
|
|
||||
|
@api.constrains('weight') |
||||
|
def _check_weight(self): |
||||
|
"""Checking the weight of containers""" |
||||
|
for rec in self: |
||||
|
if rec.container_id and rec.billing_type: |
||||
|
if rec.billing_type == 'weight': |
||||
|
if rec.container_id.weight < rec.weight: |
||||
|
raise ValidationError( |
||||
|
'The weight is must be less ' |
||||
|
'than or equal to %s' % (rec.container_id.weight)) |
||||
|
|
||||
|
@api.constrains('volume') |
||||
|
def _check_volume(self): |
||||
|
"""Checking the volume of containers""" |
||||
|
for rec in self: |
||||
|
if rec.container_id and rec.billing_type: |
||||
|
if rec.billing_type == 'volume': |
||||
|
if rec.container_id.volume < rec.volume: |
||||
|
raise ValidationError( |
||||
|
'The volume is must be less ' |
||||
|
'than or equal to %s' % (rec.container_id.volume)) |
||||
|
|
||||
|
@api.onchange('pricing_id', 'billing_type') |
||||
|
def _onchange_price(self): |
||||
|
"""Calculate the weight and volume of container""" |
||||
|
for rec in self: |
||||
|
if rec.billing_type == 'weight': |
||||
|
rec.volume = 0.00 |
||||
|
rec.price = rec.pricing_id.weight |
||||
|
elif rec.billing_type == 'volume': |
||||
|
rec.weight = 0.00 |
||||
|
rec.price = rec.pricing_id.volume |
||||
|
|
||||
|
@api.onchange('pricing_id', 'billing_type', 'volume', 'weight') |
||||
|
def _onchange_total_price(self): |
||||
|
"""Calculate sub total price""" |
||||
|
for rec in self: |
||||
|
if rec.billing_type and rec.pricing_id: |
||||
|
if rec.billing_type == 'weight': |
||||
|
rec.total_price = rec.weight * rec.price |
||||
|
elif rec.billing_type == 'volume': |
||||
|
rec.total_price = rec.volume * rec.price |
||||
|
|
||||
|
|
||||
|
class FreightOrderRoutesLine(models.Model): |
||||
|
"""Defining the routes for the shipping, also we can add the operations for |
||||
|
the routes.""" |
||||
|
_name = 'freight.order.routes.line' |
||||
|
_description = 'Freight Order Routes Lines' |
||||
|
|
||||
|
freight_id = fields.Many2one('freight.order', string='Freight Order', |
||||
|
help='Relation from freight order') |
||||
|
routes_id = fields.Many2one('freight.routes', required=True, |
||||
|
string='Routes', help='Select route of freight') |
||||
|
source_loc_id = fields.Many2one('freight.port', string='Source Location', |
||||
|
help='Select the source port') |
||||
|
destination_loc_id = fields.Many2one('freight.port', |
||||
|
string='Destination Location', |
||||
|
help='Select the destination port') |
||||
|
transport_type = fields.Selection([('land', 'Land'), ('air', 'Air'), |
||||
|
('water', 'Water')], string="Transport", |
||||
|
required=True, |
||||
|
help='Select the transporting medium') |
||||
|
sale = fields.Float(string='Sale', help="Set the price for Land") |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
||||
|
|
||||
|
@api.onchange('routes_id', 'transport_type') |
||||
|
def _onchange_routes_id(self): |
||||
|
"""Calculate the price of route operation""" |
||||
|
for rec in self: |
||||
|
if rec.routes_id and rec.transport_type: |
||||
|
if rec.transport_type == 'land': |
||||
|
rec.sale = rec.routes_id.land_sale |
||||
|
elif rec.transport_type == 'air': |
||||
|
rec.sale = rec.routes_id.air_sale |
||||
|
elif rec.transport_type == 'water': |
||||
|
rec.sale = rec.routes_id.water_sale |
||||
|
|
||||
|
|
||||
|
class FreightOrderServiceLine(models.Model): |
||||
|
"""Services in freight orders""" |
||||
|
_name = 'freight.order.service' |
||||
|
_description = 'Freight Order Service' |
||||
|
|
||||
|
freight_id = fields.Many2one('freight.order', string='Freight Order', |
||||
|
help='Relation from freight order') |
||||
|
service_id = fields.Many2one('freight.service', required=True, |
||||
|
string='Service', help='Select the service') |
||||
|
partner_id = fields.Many2one('res.partner', string="Vendor", |
||||
|
help='Select the partner for the service') |
||||
|
qty = fields.Float(string='Quantity', help='How many Quantity required') |
||||
|
cost = fields.Float(string='Cost', help='The cost price of the service') |
||||
|
sale = fields.Float(string='Sale', help='Sale price of the service') |
||||
|
total_sale = fields.Float('Total Sale', help='The total sale price') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
||||
|
|
||||
|
@api.onchange('service_id', 'partner_id') |
||||
|
def _onchange_partner_id(self): |
||||
|
"""Calculate the price of services""" |
||||
|
for rec in self: |
||||
|
if rec.service_id: |
||||
|
if rec.partner_id: |
||||
|
if rec.service_id.line_ids: |
||||
|
for service in rec.service_id.line_ids: |
||||
|
if rec.partner_id == service.partner_id: |
||||
|
rec.sale = service.sale |
||||
|
else: |
||||
|
rec.sale = rec.service_id.sale_price |
||||
|
else: |
||||
|
rec.sale = rec.service_id.sale_price |
||||
|
else: |
||||
|
rec.sale = rec.service_id.sale_price |
||||
|
|
||||
|
@api.onchange('qty', 'sale') |
||||
|
def _onchange_qty(self): |
||||
|
"""Calculate the subtotal of route operation""" |
||||
|
for rec in self: |
||||
|
rec.total_sale = rec.qty * rec.sale |
||||
|
|
||||
|
|
||||
|
class Tracking(models.Model): |
||||
|
"""Tracking the freight order""" |
||||
|
_name = 'freight.track' |
||||
|
_description = 'Freight Track' |
||||
|
|
||||
|
source_loc_id = fields.Many2one('freight.port', string='Source Location', |
||||
|
help='Select the source location of port') |
||||
|
destination_loc_id = fields.Many2one('freight.port', |
||||
|
string='Destination Location', |
||||
|
help='Destination location of the port') |
||||
|
transport_type = fields.Selection([('land', 'Land'), ('air', 'Air'), |
||||
|
('water', 'Water')], string='Transport', |
||||
|
help='Transporting medium of the order') |
||||
|
freight_id = fields.Many2one('freight.order', string='Freight Order', |
||||
|
help='Reference from freight order') |
||||
|
date = fields.Date(string='Date', help='Select the date') |
||||
|
type = fields.Selection([('received', 'Received'), |
||||
|
('delivered', 'Delivered')], |
||||
|
string='Received/Delivered', |
||||
|
help='Status of the order') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
@ -0,0 +1,92 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from werkzeug import urls |
||||
|
from odoo import fields, models, _ |
||||
|
|
||||
|
|
||||
|
class FreightTracking(models.Model): |
||||
|
_name = 'freight.order.track' |
||||
|
_description = 'Freight Order Track' |
||||
|
|
||||
|
date = fields.Date('Date', default=fields.Date.today()) |
||||
|
freight_id = fields.Many2one('freight.order') |
||||
|
source_loc_id = fields.Many2one('freight.port', 'Source Location') |
||||
|
destination_loc_id = fields.Many2one('freight.port', 'Destination Location') |
||||
|
transport_type = fields.Selection([('land', 'Land'), ('air', 'Air'), |
||||
|
('water', 'Water')], "Transport") |
||||
|
type = fields.Selection([('received', 'Received'), |
||||
|
('delivered', 'Delivered')], 'Received/Delivered') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
||||
|
|
||||
|
def action_order_submit(self): |
||||
|
"""Create tracking details of order""" |
||||
|
self.env['freight.track'].create({ |
||||
|
'freight_id': self.freight_id.id, |
||||
|
'source_loc_id': self.source_loc_id.id, |
||||
|
'destination_loc_id': self.destination_loc_id.id, |
||||
|
'transport_type': self.transport_type, |
||||
|
'date': self.date, |
||||
|
'type': self.type, |
||||
|
}) |
||||
|
for rec in self.freight_id: |
||||
|
base_url = self.env['ir.config_parameter'].sudo().get_param( |
||||
|
'web.base.url') |
||||
|
Urls = urls.url_join(base_url, |
||||
|
'odoo/action-%(actionId)s/%(id)s' % { |
||||
|
'id': self.id, 'actionId': self.env.ref('freight_management_system.freight_order_action').id}) |
||||
|
|
||||
|
mail_content = _('Hi<br>' |
||||
|
'The Freight Order %s is %s at %s' |
||||
|
'<div style = "text-align: center; ' |
||||
|
'margin-top: 16px;"><a href = "%s"' |
||||
|
'style = "padding: 5px 10px; font-size: 12px; ' |
||||
|
'line-height: 18px; color: #FFFFFF; ' |
||||
|
'border-color:#875A7B;text-decoration: none; ' |
||||
|
'display: inline-block; ' |
||||
|
'margin-bottom: 0px; font-weight: 400;' |
||||
|
'text-align: center; vertical-align: middle; ' |
||||
|
'cursor: pointer; white-space: nowrap; ' |
||||
|
'background-image: none; ' |
||||
|
'background-color: #875A7B; ' |
||||
|
'border: 1px solid #875A7B; border-radius:3px;">' |
||||
|
'View %s</a></div>' |
||||
|
) % (rec.name, self.type, |
||||
|
self.destination_loc_id.name, Urls, rec.name) |
||||
|
email_to = self.env['res.partner'].search([ |
||||
|
('id', 'in', (rec.shipper_id.id, rec.consignee_id.id, |
||||
|
rec.agent_id.id))]) |
||||
|
for mail in email_to: |
||||
|
main_content = { |
||||
|
'subject': _('Freight Order %s is %s at %s') % (rec.name, |
||||
|
self.type, |
||||
|
self.destination_loc_id.name,), |
||||
|
'author_id': rec.env.user.partner_id.id, |
||||
|
'body_html': mail_content, |
||||
|
'email_to': mail.email |
||||
|
} |
||||
|
mail_id = rec.env['mail.mail'].create(main_content) |
||||
|
mail_id.mail_message_id.body = mail_content |
||||
|
mail_id.send() |
@ -0,0 +1,48 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class FreightPort(models.Model): |
||||
|
"""Creating different port location for managing freight""" |
||||
|
_name = 'freight.port' |
||||
|
_description = 'Freight Port' |
||||
|
|
||||
|
name = fields.Char(string='Name', help='Name for the port') |
||||
|
code = fields.Char(string='Code', help='Specify a code for freight') |
||||
|
state_id = fields.Many2one('res.country.state', string='State', |
||||
|
domain="[('country_id', '=', country_id)]", |
||||
|
help='The State in which port located') |
||||
|
country_id = fields.Many2one('res.country', required=True, |
||||
|
string='Country', |
||||
|
help='The Country in which port located') |
||||
|
active = fields.Boolean(string='Active', default=True, |
||||
|
help='For activate the Port') |
||||
|
land = fields.Boolean(string='Land', help='Enable it if the medium is Land') |
||||
|
air = fields.Boolean(string='Air', help='Enable it if the medium is Air') |
||||
|
water = fields.Boolean(string='Water', |
||||
|
help='Enable it if the medium is Water') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
@ -0,0 +1,39 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class FreightPrice(models.Model): |
||||
|
"""Freight Pricing""" |
||||
|
_name = 'freight.price' |
||||
|
_description = 'Freight Price' |
||||
|
|
||||
|
name = fields.Char(string='Name', required=True, help='Name of the pricing') |
||||
|
volume = fields.Float(string='Volume Price', required=True, |
||||
|
help='Pricing according to Volume') |
||||
|
weight = fields.Float(string='Weight Price', required=True, |
||||
|
help='Pricing according to Weight') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
@ -0,0 +1,43 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class FreightRoutes(models.Model): |
||||
|
"""Creating the routes for the freight""" |
||||
|
_name = 'freight.routes' |
||||
|
_description = 'Freight Routes' |
||||
|
|
||||
|
name = fields.Char(string='Name', required=True, help='Name of the route') |
||||
|
active = fields.Boolean(string='Active', default=True, |
||||
|
help='For activating the route') |
||||
|
land_sale = fields.Float(string='Land Sale Price', required=True, |
||||
|
help='Sale price for land') |
||||
|
air_sale = fields.Float(string='Air Sale Price', required=True, |
||||
|
help='Sale price for Air') |
||||
|
water_sale = fields.Float(string='Water Sale Price', required=True, |
||||
|
help='Sale price for Air') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
@ -0,0 +1,57 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class FreightService(models.Model): |
||||
|
"""For Creating services available for freight""" |
||||
|
_name = 'freight.service' |
||||
|
_description = 'Freight Service' |
||||
|
|
||||
|
name = fields.Char(string='Name', required=True, help='Name of service') |
||||
|
sale_price = fields.Float(string='Sale Price', required=True, |
||||
|
help='Sale price of the service') |
||||
|
line_ids = fields.One2many('freight.service.line', 'service_id', |
||||
|
string='Service Lines', |
||||
|
help="Service lines corresponding to a service") |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
||||
|
|
||||
|
|
||||
|
class FreightServiceLine(models.Model): |
||||
|
_name = 'freight.service.line' |
||||
|
_description = 'Freight Service Line' |
||||
|
|
||||
|
partner_id = fields.Many2one('res.partner', string="Vendor", |
||||
|
help='Partner corresponding to the service') |
||||
|
sale = fields.Float(string='Sale Price', |
||||
|
help='Mention the price for the service') |
||||
|
service_id = fields.Many2one('freight.service', string='Service', |
||||
|
help='Relation from freight service') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
@ -0,0 +1,204 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<!-- For freight order report--> |
||||
|
<record id="report_freight" model="ir.actions.report"> |
||||
|
<field name="name">Freight Order</field> |
||||
|
<field name="model">freight.order</field> |
||||
|
<field name="report_type">qweb-pdf</field> |
||||
|
<field name="report_name">freight_management_system.report_freight_order</field> |
||||
|
<field name="report_file">freight_management_system.report_freight_order</field> |
||||
|
<field name="print_report_name">'Freight Order - %s' % object.name</field> |
||||
|
<field name="binding_model_id" ref="model_freight_order"/> |
||||
|
<field name="binding_type">report</field> |
||||
|
</record> |
||||
|
<!-- Report Template--> |
||||
|
<template id="report_freight_order"> |
||||
|
<t t-call="web.html_container"> |
||||
|
<t t-foreach="docs" t-as="doc"> |
||||
|
<t t-call="web.external_layout"> |
||||
|
<center> |
||||
|
<b> |
||||
|
<h3>Order Details</h3> |
||||
|
</b> |
||||
|
</center> |
||||
|
<b> |
||||
|
<h3> |
||||
|
<t t-esc="doc.name"/> |
||||
|
</h3> |
||||
|
</b> |
||||
|
<br/> |
||||
|
<div name="customer"> |
||||
|
<strong>Customer:</strong> |
||||
|
</div> |
||||
|
<div name="customer_details"> |
||||
|
<div t-esc="doc.shipper_id.name"/> |
||||
|
<div t-esc="doc.shipper_id.street"/> |
||||
|
<div t-esc="doc.shipper_id.city"/> |
||||
|
<t t-esc="doc.shipper_id.state_id.name"/> |
||||
|
<t t-esc="doc.shipper_id.zip"/> |
||||
|
<div t-esc="doc.shipper_id.country_id.name"/> |
||||
|
</div> |
||||
|
<br/> |
||||
|
<table class="table o_main_table"> |
||||
|
<tbody class="order_body"> |
||||
|
<tr> |
||||
|
<td name="loading_port"> |
||||
|
<strong>Loading Port</strong> |
||||
|
</td> |
||||
|
<td name="loading"> |
||||
|
<span t-field="doc.loading_port_id.name"/> |
||||
|
</td> |
||||
|
<td name="destination_port"> |
||||
|
<strong>Destination Port</strong> |
||||
|
</td> |
||||
|
<td name="destination"> |
||||
|
<span t-field="doc.discharging_port_id.name"/> |
||||
|
</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td name="direction"> |
||||
|
<strong>Direction</strong> |
||||
|
</td> |
||||
|
<td name="direction_name"> |
||||
|
<span t-field="doc.type"/> |
||||
|
</td> |
||||
|
<td name="transport"> |
||||
|
<strong>Transport</strong> |
||||
|
</td> |
||||
|
<td name="transport_name"> |
||||
|
<span t-field="doc.transport_type"/> |
||||
|
</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td name="date"> |
||||
|
<strong>Date</strong> |
||||
|
</td> |
||||
|
<td name="date"> |
||||
|
<span t-field="doc.order_date"/> |
||||
|
</td> |
||||
|
<td name="expected"> |
||||
|
<strong>Expected Date</strong> |
||||
|
</td> |
||||
|
<td name="expected_name"> |
||||
|
<span t-field="doc.expected_date"/> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
<div name="orders"> |
||||
|
<strong>Orders:</strong> |
||||
|
</div> |
||||
|
<table class="table o_main_table"> |
||||
|
<thead style="display: table-row-group"> |
||||
|
<tr> |
||||
|
<th name="th_container" class="text-left"> |
||||
|
Container |
||||
|
</th> |
||||
|
<th name="th_goods" class="text-left">Goods</th> |
||||
|
<th name="th_billing_on" class="text-left"> |
||||
|
Billing On |
||||
|
</th> |
||||
|
<th name="th_pricing" class="text-left"> |
||||
|
Pricing |
||||
|
</th> |
||||
|
<th name="th_volume" class="text-left">Volume |
||||
|
</th> |
||||
|
<th name="th_weight" class="text-left">Weight |
||||
|
</th> |
||||
|
<th name="th_unit_price" class="text-left">Unit |
||||
|
Price |
||||
|
</th> |
||||
|
<th name="th_total_price" class="text-left"> |
||||
|
Total Price |
||||
|
</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr t-att-class="'bg-200 font-weight-bold'" |
||||
|
t-foreach="doc.order_ids" t-as="order"> |
||||
|
<td t-esc="order.container_id.name"/> |
||||
|
<td t-esc="order.product_id.name"/> |
||||
|
<td> |
||||
|
<span t-field="order.billing_type"/> |
||||
|
</td> |
||||
|
<td t-esc="order.pricing_id.name"/> |
||||
|
<td t-esc="order.volume"/> |
||||
|
<td t-esc="order.weight"/> |
||||
|
<td t-esc="order.price"/> |
||||
|
<td t-esc="order.total_price"/> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
<t name="th_operation" class="text-left" colspan="8">Total |
||||
|
</t> |
||||
|
<div name="route"> |
||||
|
<strong>Route:</strong> |
||||
|
</div> |
||||
|
<table class="table o_main_table"> |
||||
|
<thead style="display: table-row-group"> |
||||
|
<tr> |
||||
|
<th name="th_operation" class="text-left"> |
||||
|
Operation |
||||
|
</th> |
||||
|
<th name="th_source" class="text-left">Source |
||||
|
location |
||||
|
</th> |
||||
|
<th name="th_destination" class="text-left"> |
||||
|
Destination Location |
||||
|
</th> |
||||
|
<th name="th_transport" class="text-left"> |
||||
|
Transport |
||||
|
</th> |
||||
|
<th name="th_price" class="text-left">Price</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr t-att-class="'bg-200 font-weight-bold'" |
||||
|
t-foreach="doc.route_ids" t-as="route"> |
||||
|
<td t-esc="route.routes_id.name"/> |
||||
|
<td t-esc="route.source_loc_id.name"/> |
||||
|
<td t-esc="route.destination_loc_id.name"/> |
||||
|
<td> |
||||
|
<span t-field="route.transport_type"/> |
||||
|
</td> |
||||
|
<td t-esc="route.sale"/> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
<br/> |
||||
|
<div name="route"> |
||||
|
<strong>Service:</strong> |
||||
|
</div> |
||||
|
<table class="table o_main_table"> |
||||
|
<thead style="display: table-row-group"> |
||||
|
<tr> |
||||
|
<th name="th_vendor" class="text-left">Vendor |
||||
|
</th> |
||||
|
<th name="th_service" class="text-left"> |
||||
|
Service |
||||
|
</th> |
||||
|
<th name="th_quantity" class="text-left"> |
||||
|
Quantity |
||||
|
</th> |
||||
|
<th name="th_sale" class="text-left">Sale</th> |
||||
|
<th name="th_sale_total" class="text-left">Total |
||||
|
sale |
||||
|
</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr t-att-class="'bg-200 font-weight-bold'" |
||||
|
t-foreach="doc.service_ids" t-as="service"> |
||||
|
<td t-esc="service.partner_id.name"/> |
||||
|
<td t-esc="service.service_id.name"/> |
||||
|
<td t-esc="service.qty"/> |
||||
|
<td t-esc="service.sale"/> |
||||
|
<td t-esc="service.total_sale"/> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</t> |
||||
|
</t> |
||||
|
</t> |
||||
|
</template> |
||||
|
</odoo> |
@ -0,0 +1,128 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<!-- For order tracking report--> |
||||
|
<record id="report_freight_tracking" model="ir.actions.report"> |
||||
|
<field name="name">Order Tracking</field> |
||||
|
<field name="model">freight.order</field> |
||||
|
<field name="report_type">qweb-pdf</field> |
||||
|
<field name="report_name">freight_management_system.report_freight_track</field> |
||||
|
<field name="report_file">freight_management_system.report_freight_track</field> |
||||
|
<field name="print_report_name">'Order Tracking - %s' % object.name</field> |
||||
|
<field name="binding_model_id" ref="model_freight_order"/> |
||||
|
<field name="binding_type">report</field> |
||||
|
</record> |
||||
|
<!-- Template for report--> |
||||
|
<template id="report_freight_track"> |
||||
|
<t t-call="web.html_container"> |
||||
|
<t t-foreach="docs" t-as="doc"> |
||||
|
<t t-call="web.external_layout"> |
||||
|
<center> |
||||
|
<b> |
||||
|
<h3>Order Track Details</h3> |
||||
|
</b> |
||||
|
</center> |
||||
|
<b> |
||||
|
<h3> |
||||
|
<t t-esc="doc.name"/> |
||||
|
</h3> |
||||
|
</b> |
||||
|
<br/> |
||||
|
<div name="customer"> |
||||
|
<strong>Customer:</strong> |
||||
|
</div> |
||||
|
<div name="customer_details"> |
||||
|
<div t-esc="doc.shipper_id.name"/> |
||||
|
<div t-esc="doc.shipper_id.street"/> |
||||
|
<div t-esc="doc.shipper_id.city"/> |
||||
|
<t t-esc="doc.shipper_id.state_id.name"/> |
||||
|
<t t-esc="doc.shipper_id.zip"/> |
||||
|
<div t-esc="doc.shipper_id.country_id.name"/> |
||||
|
</div> |
||||
|
<br/> |
||||
|
<table class="table o_main_table"> |
||||
|
<tbody class="order_body"> |
||||
|
<tr> |
||||
|
<td name="loading_port"> |
||||
|
<strong>Loading Port</strong> |
||||
|
</td> |
||||
|
<td name="loading"> |
||||
|
<span t-field="doc.loading_port_id.name"/> |
||||
|
</td> |
||||
|
<td name="destination_port"> |
||||
|
<strong>Destination Port</strong> |
||||
|
</td> |
||||
|
<td name="destination"> |
||||
|
<span t-field="doc.discharging_port_id.name"/> |
||||
|
</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td name="direction"> |
||||
|
<strong>Direction</strong> |
||||
|
</td> |
||||
|
<td name="direction_name"> |
||||
|
<span t-field="doc.type"/> |
||||
|
</td> |
||||
|
<td name="transport"> |
||||
|
<strong>Transport</strong> |
||||
|
</td> |
||||
|
<td name="transport_name"> |
||||
|
<span t-field="doc.transport_type"/> |
||||
|
</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td name="date"> |
||||
|
<strong>Date</strong> |
||||
|
</td> |
||||
|
<td name="date"> |
||||
|
<span t-field="doc.order_date"/> |
||||
|
</td> |
||||
|
<td name="expected"> |
||||
|
<strong>Expected Date</strong> |
||||
|
</td> |
||||
|
<td name="expected_name"> |
||||
|
<span t-field="doc.expected_date"/> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
<div name="track"> |
||||
|
<strong>Track:</strong> |
||||
|
</div> |
||||
|
<table class="table o_main_table"> |
||||
|
<thead style="display: table-row-group"> |
||||
|
<tr> |
||||
|
<th name="th_source" class="text-left">Source |
||||
|
location |
||||
|
</th> |
||||
|
<th name="th_destination" class="text-left"> |
||||
|
Destination Location |
||||
|
</th> |
||||
|
<th name="th_operation" class="text-left"> |
||||
|
Transport |
||||
|
</th> |
||||
|
<th name="th_transport" class="text-left">Date |
||||
|
</th> |
||||
|
<th name="th_price" class="text-left">Status |
||||
|
</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr t-att-class="'bg-200 font-weight-bold'" |
||||
|
t-foreach="doc.track_ids" t-as="track"> |
||||
|
<td t-esc="track.source_loc_id.name"/> |
||||
|
<td t-esc="track.destination_loc_id.name"/> |
||||
|
<td> |
||||
|
<span t-field="track.transport_type"/> |
||||
|
</td> |
||||
|
<td t-esc="track.date"/> |
||||
|
<td> |
||||
|
<span t-field="track.type"/> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</t> |
||||
|
</t> |
||||
|
</t> |
||||
|
</template> |
||||
|
</odoo> |
@ -0,0 +1,147 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data noupdate="1"> |
||||
|
<!-- Created category for Receptionist--> |
||||
|
<record id="module_category_freight_management" |
||||
|
model="ir.module.category"> |
||||
|
<field name="name">Freight</field> |
||||
|
<field name="sequence">0</field> |
||||
|
<field name="visible" eval="0"/> |
||||
|
</record> |
||||
|
<record id="group_freight" model="res.groups"> |
||||
|
<field name="name">Freight Manager</field> |
||||
|
<field name="category_id" ref="module_category_freight_management"/> |
||||
|
</record> |
||||
|
<!-- Record rules for company--> |
||||
|
<record id="freight_order_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight order multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_order"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_order_line_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight OrderLine multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_order_line"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_port_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight Port multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_port"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_container_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight Container multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_container"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_price_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight Price multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_price"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_routes_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight Routes multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_routes"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_order_routes_line_rule_multi_company" |
||||
|
model="ir.rule"> |
||||
|
<field name="name">Freight Order Routes Line multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_order_routes_line"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_service_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight Service multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_service"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_service_line_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight Service Line multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_service_line"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_order_service_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight Order Service multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_order_service"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="custom_clearance_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Custom Clearance multi-company</field> |
||||
|
<field name="model_id" ref="model_custom_clearance"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="custom_clearance_line_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Custom Clearance Line multi-company</field> |
||||
|
<field name="model_id" ref="model_custom_clearance_line"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_track_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight Track multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_track"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="freight_order_track_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Freight order Track multi-company</field> |
||||
|
<field name="model_id" ref="model_freight_order_track"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="clearance_revision_rule_multi_company" model="ir.rule"> |
||||
|
<field name="name">Clearance revision multi-company</field> |
||||
|
<field name="model_id" ref="model_clearance_revision"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="custom_clearance_revision_rule_multi_company" |
||||
|
model="ir.rule"> |
||||
|
<field name="name">Custom Clearance Revision multi-company</field> |
||||
|
<field name="model_id" ref="model_custom_clearance_revision"/> |
||||
|
<field eval="True" name="global"/> |
||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), |
||||
|
('company_id', '=', False)] |
||||
|
</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |
|
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 565 B |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 450 KiB |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 9.1 KiB |
@ -0,0 +1,813 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
|
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
<title>Freight Management</title> |
||||
|
<!-- Bootstrap CSS --> |
||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" |
||||
|
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> |
||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css"> |
||||
|
<link rel="preconnect" href="https://fonts.googleapis.com"> |
||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"> |
||||
|
</head> |
||||
|
<body> |
||||
|
<section> |
||||
|
<div class="container" style="font-family: 'Inter', sans-serif !important;background-color: #fff !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between flex-wrap align-items-sm-center" |
||||
|
style="border-bottom:1px solid rgba(0, 0, 0, 0.22)"> |
||||
|
<div class="my-3"> |
||||
|
<img src="assets/misc/Cybrosys R.png" style="width:auto !important; height:40px !important"> |
||||
|
</div> |
||||
|
<div class="my-3 d-flex align-items-center"> |
||||
|
<div class="text-center" |
||||
|
style="background-color:#017E84 !important;font-size: 0.8rem !important; color:#fff !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;"> |
||||
|
Community |
||||
|
</div> |
||||
|
<div class="text-center" |
||||
|
style="background-color:#875A7B !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important;min-width: 120px !important;"> |
||||
|
Enterprise |
||||
|
</div> |
||||
|
<div class="text-center" |
||||
|
style="background-color:#7C7BAD !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;"> |
||||
|
Odoo.sh |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 col-md-12 col-lg-12 text-center d-flex align-items-center flex-column" |
||||
|
style="margin: 80px 0px !important;"> |
||||
|
<h1 style="font-size: 2.8rem;font-weight: 700; color: |
||||
|
#1A202C;"> |
||||
|
Freight Management</h1> |
||||
|
<p class="my-3 mb-4" |
||||
|
style="max-width: 80%; font-weight: 400 !important; line-height: 32px; color: #718096;"> |
||||
|
A Module for Managing All Freight Operation. |
||||
|
</p> |
||||
|
<div style="width: 80%; margin-top: 3rem;"> |
||||
|
<img src="assets/screenshots/hero.gif" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container mt-5 mb-5"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
||||
|
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#714b67 !important">Key Highlights |
||||
|
</p> |
||||
|
</div> |
||||
|
<div class="row py-4"> |
||||
|
<div class="col-md-6 col-sm-12 p-3"> |
||||
|
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
||||
|
background: #FFF; |
||||
|
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
||||
|
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
||||
|
display: flex; justify-content: center; align-items: center; |
||||
|
margin-right: 10px; flex-shrink: 0;"> |
||||
|
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
||||
|
</div> |
||||
|
<div> |
||||
|
<p style="color: #1A202C;font-weight: 600; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Configure Freight Orders.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 col-sm-12 p-3"> |
||||
|
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
||||
|
background: #FFF; |
||||
|
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
||||
|
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
||||
|
display: flex; justify-content: center; align-items: center; |
||||
|
margin-right: 10px; flex-shrink: 0;"> |
||||
|
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
||||
|
</div> |
||||
|
<div> |
||||
|
<p style="color: #1A202C;font-weight: 600; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Configure Freight Operation Services.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 col-sm-12 p-3"> |
||||
|
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
||||
|
background: #FFF; |
||||
|
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
||||
|
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
||||
|
display: flex; justify-content: center; align-items: center; |
||||
|
margin-right: 10px; flex-shrink: 0;"> |
||||
|
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
||||
|
</div> |
||||
|
<div> |
||||
|
<p style="color: #1A202C;font-weight: 600; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Custom Clearance And Custom Clearance Revision.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 col-sm-12 p-3"> |
||||
|
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
||||
|
background: #FFF; |
||||
|
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
||||
|
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
||||
|
display: flex; justify-content: center; align-items: center; |
||||
|
margin-right: 10px; flex-shrink: 0; "> |
||||
|
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
||||
|
</div> |
||||
|
<div> |
||||
|
<p style="color: #1A202C;font-weight: 600; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Freight Order Track Details.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 col-sm-12 p-3"> |
||||
|
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
||||
|
background: #FFF; |
||||
|
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
||||
|
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
||||
|
display: flex; justify-content: center; align-items: center; |
||||
|
margin-right: 10px; flex-shrink: 0;"> |
||||
|
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
||||
|
</div> |
||||
|
<div> |
||||
|
<p style="color: #1A202C;font-weight: 600; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Configure the Freight Operation Routes.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 col-sm-12 p-3"> |
||||
|
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
||||
|
background: #FFF; |
||||
|
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
||||
|
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
||||
|
display: flex; justify-content: center; align-items: center; |
||||
|
margin-right: 10px; flex-shrink: 0;"> |
||||
|
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
||||
|
</div> |
||||
|
<div> |
||||
|
<p style="color: #1A202C;font-weight: 600; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Freight Operation Tracking.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 col-sm-12 p-3"> |
||||
|
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
||||
|
background: #FFF; |
||||
|
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
||||
|
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
||||
|
display: flex; justify-content: center; align-items: center; |
||||
|
margin-right: 10px; flex-shrink: 0;"> |
||||
|
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
||||
|
</div> |
||||
|
<div> |
||||
|
<p style="color: #1A202C;font-weight: 600; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Freight Order Reports.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container rounded" > |
||||
|
<ul class="nav nav-tabs d-flex" style="width: fit-content;margin: 0 auto;gap: 1rem;"> |
||||
|
<li class="col text-center py-2 text-nowrap " |
||||
|
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
||||
|
class="active show" data-toggle="tab" href="#tab1" |
||||
|
style="color: #fff;font-weight: 500; background-color: #714B67; text-decoration: none;"> |
||||
|
<i class="fa-regular fa-image pr-2" style="color: #fff;"></i> |
||||
|
Screenshots</a></li> |
||||
|
<li class="col text-center py-2 text-nowrap " |
||||
|
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
||||
|
data-toggle="tab" href="#tab2" |
||||
|
style="color: #fff;font-weight: 500; text-decoration: none;"><i |
||||
|
class="fa-solid fa-star pr-2" style="color: #fff;"></i>Features</a></li> |
||||
|
<li class="col text-center py-2 text-nowrap " |
||||
|
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
||||
|
data-toggle="tab" href="#tab3" |
||||
|
style="color: #fff;font-weight: 500; text-decoration: none; background-color: #714B67;"><i |
||||
|
class="fa-solid fa-book-open pr-2" style="color: #fff;"></i>Released Notes</a></li> |
||||
|
</ul> |
||||
|
<div class="tab-content" style="background-color: rgba(121, 113, 119, 0.04);"> |
||||
|
<div id="tab1" class="tab-pane fade in active show"> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/img.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
First of all set the Group Freight Manager for the allowed user.</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/1.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
After installation open Freight Management go to shipping, then create the Freight Orders.</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/2.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Add the fright order lines. Select the container, billing on and pricing suitable for the shipping. Based on the Billing on and Pricing it will calculate the total price. If we add more goods than container capacity it's show the warning message.</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/3.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Freight Operation Routes<br/> |
||||
|
Defining the Routes for the shipping.Also, we can add the operations for the Routes.</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/4.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Freight Operation Services<br/> |
||||
|
Defining the services for the shipping. Also, we can add the Services. We can calculate the total sale amount based on tha vendor and the services provided by the vendor. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/5.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Custom Clearance<br/> |
||||
|
By clicking the Custom Clearance button we can create the Custom clearance for the Freight Order. We can view the Custom Clearance in Custom Clearance menu under the Custom. After Conforming the Custom Clearance, we can confirm our Fright Order. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/6.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Custom Clearance Revision<br/> |
||||
|
We can create the revision for the custom clearance by clicking the revision button. We can view the custom clearance revision from the Revision smart button. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/7.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Freight Order Invoice<br/> |
||||
|
We can create the invoice for the Freight Order by clicking the Invoice button. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/8.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Freight Order Tracking<br/> |
||||
|
We can track our order by click the Tracking button. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/9.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Freight Order Reporting<br/> |
||||
|
From the action bar we can print the Fright Order Report and order Tracked Report. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/10.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/11.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/12.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Configure Ports<br/> |
||||
|
Under Configuration menu we can see a Port menu, for configuring our ports. Here we can specify the port location, and available transport methods. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/13.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Configure Pricing<br/> |
||||
|
Under Configuration menu we can see a Pricing list menu, it is used to configuring the pricing. Here we can specify the pricing in both weight and volume. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/14.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Configure Route Operation<br/> |
||||
|
Under Configuration menu we can see a Route operation menu, it is used to configuring the Routes. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/15.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Configure container<br/> |
||||
|
Under Configuration menu we can see a Containers menu, it is used to configuring the Container. Here we can specify the weight and volume.If we add more goods than container capacity it's show the warning message. When once order is confirmed for particular container then we can't be used it for another order. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
||||
|
<div |
||||
|
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="row justify-content-center p-3 w-100 m-0"> |
||||
|
<img src="assets/screenshots/16.png" class="img-responsive" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<div class="px-3"> |
||||
|
<h4 class="mt-2" |
||||
|
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
||||
|
Configure services<br/> |
||||
|
Under Configuration menu we can see a Services menu, it is used to configuring the Services. Here we can set specific amount for particular vendor. |
||||
|
</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div id="tab2" class="tab-pane fade"> |
||||
|
<div class="col-mg-12" style="padding: 1rem 4rem;"> |
||||
|
<ul style="list-style: none; padding: 1rem 0;font-weight: 500;"> |
||||
|
<li class="py-3" |
||||
|
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
||||
|
width="16px"></span>Freight Order Tracking |
||||
|
</li> |
||||
|
<li class="py-3" |
||||
|
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
||||
|
width="16px"></span>Freight Order Reporting |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div id="tab3" class="tab-pane fade"> |
||||
|
<div class="col-mg-12 active" style="padding: 1rem 4rem;"> |
||||
|
<div class="py-3" |
||||
|
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
||||
|
<div class="d-flex mb-3" style="font-size: 0.8rem; font-weight: 500;"><span>Version |
||||
|
18.0.1.0.0</span><span class="px-2">|</span><span |
||||
|
style="color: #714B67;font-weight: 600;">Released on:02th Feb 2025</span> |
||||
|
</div> |
||||
|
<p class="m-0" |
||||
|
style=" color:#718096!important; font-size:1rem !important;line-height: 28px;"> |
||||
|
|
||||
|
Initial Commit for Manufacturing (MRP) Timesheet.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container mt-5"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5"> |
||||
|
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Related Products</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div id="myCarousel" class="carousel slide py-3" data-ride="carousel"> |
||||
|
<div class="carousel-inner"> |
||||
|
<div class="carousel-item active"> |
||||
|
<div class="row p-4"> |
||||
|
<div class="col"> |
||||
|
<div class="p-3"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/16.0/manufacturing_reports/" style="color: #000; text-decoration: none;"> |
||||
|
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
||||
|
<div style="width: 300px; "> |
||||
|
<img src="assets/modules/1.png" alt="" width="100%" height="auto"> |
||||
|
|
||||
|
</div> |
||||
|
<p class="text-center pt-2 text-black font-weight-bold">Manufacturing Reports</p> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col"> |
||||
|
<div class="p-3"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/16.0/mrp_work_order_print/" style="color: #000; text-decoration: none;"> |
||||
|
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
||||
|
<div style="width: 300px; "> |
||||
|
<img src="assets/modules/2.png" alt="" width="100%" height="auto"> |
||||
|
|
||||
|
</div> |
||||
|
<p class="text-center pt-2 text-black font-weight-bold">Print Work Order Details</p> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col"> |
||||
|
<div class="p-3"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/16.0/bom_total_cost/" style="color: #000; text-decoration: none;"> |
||||
|
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
||||
|
<div style="width: 300px; "> |
||||
|
<img src="assets/modules/3.png" alt="" width="100%" height="auto"> |
||||
|
|
||||
|
</div> |
||||
|
<p class="text-center pt-2 text-black font-weight-bold">Show Total Cost On BOM</p> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item"> |
||||
|
<div class="row p-4"> |
||||
|
<div class="col"> |
||||
|
<div class="p-3"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/16.0/simple_mrp_order/" style="color: #000; text-decoration: none;"> |
||||
|
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
||||
|
<div style="width: 300px; "> |
||||
|
<img src="assets/modules/4.png" alt="" width="100%" height="auto"> |
||||
|
|
||||
|
</div> |
||||
|
<p class="text-center pt-2 text-black font-weight-bold">Simple Manufacturing Orders</p> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col"> |
||||
|
<div class="p-3"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/16.0/bom_multiple_product/" style="color: #000; text-decoration: none;"> |
||||
|
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
||||
|
<div style="width: 300px;"> |
||||
|
<img src="assets/modules/5.png" alt="" width="100%" height="auto"> |
||||
|
|
||||
|
</div> |
||||
|
<p class="text-center pt-2 text-black font-weight-bold">BOM Multiple Product Selection</p> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col"> |
||||
|
<div class="p-3"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/16.0/cw_mrp/" style="color: #000; text-decoration: none;"> |
||||
|
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
||||
|
<div style="width: 300px;"> |
||||
|
<img src="assets/modules/6.png" alt="" width="100%" height="auto"> |
||||
|
</div> |
||||
|
<p class="text-center pt-2 text-black font-weight-bold"> Catch Weight Management: Manufacturing</p> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<a class="carousel-control-prev" href="#myCarousel" data-slide="prev" style="width: 35px; color: #000;"> |
||||
|
<span class="carousel-control-prev-icon"> |
||||
|
<i class="fa fa-chevron-left" style="font-size: 24px;"></i> |
||||
|
</span> |
||||
|
</a> |
||||
|
<a class="carousel-control-next" href="#myCarousel" data-slide="next" style="width: 35px; color: #000;"> |
||||
|
<span class="carousel-control-next-icon"> |
||||
|
<i class="fa fa-chevron-right" style="font-size: 24px;"></i> |
||||
|
</span> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="container mt-5"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
||||
|
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Our Services</p> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container my-5"> |
||||
|
<div class="row py-3"> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#13EA36 ; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/cogs.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Odoo Customization</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#DBC711; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/wrench.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Odoo Implementation</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#FF6B6B ; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/lifebuoy.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Odoo Support</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#FFA801 ; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/user.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Hire Odoo Developer</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
||||
|
|
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#54A0FF; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/puzzle.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Odoo Integration</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#6D7680 ; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/update.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Odoo Migration</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#786FA6 ; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/consultation.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Odoo Consultancy</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;position: relative;border-radius: 4px;"> |
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#F8A5C2 ; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/training.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Odoo Implementation</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4 col-sm-6 px-4 py-4"> |
||||
|
<div |
||||
|
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
||||
|
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
||||
|
<div style="background-color:#E6BE26; border-radius: 50%; padding: 15px; width: 68px; |
||||
|
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
||||
|
<img src="assets/icons/license.png" alt="service-icon" width="38px" height="auto"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p style="margin-top: 20px; font-weight: bold;">Odoo Licensing Consultancy</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container mt-5"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
||||
|
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Our Industries</p> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container"> |
||||
|
<div class="row my-5 py-4"> |
||||
|
<div class="col-md-3 col-sm-6 p-0"> |
||||
|
<div class="d-flex flex-column h-100 " |
||||
|
style="border-right: 1px solid rgb(209, 209, 209); border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; box-shadow: 6px 0 10px rgba(228, 227, 227, 0.373);"> |
||||
|
<img src="assets/icons/trading-black.png" width="42px" height="auto" alt=""> |
||||
|
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Trading</p> |
||||
|
<p>Easily procure and sell your products</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-3 col-sm-6 p-0"> |
||||
|
<div class="d-flex flex-column h-100" |
||||
|
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgb(209, 209, 209); padding: 30px;"> |
||||
|
<img src="assets/icons/pos-black.png" width="42px" height="auto" alt=""> |
||||
|
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">POS</p> |
||||
|
<p>Easy configuration and convivial experience</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-3 col-sm-6 p-0"> |
||||
|
<div class="d-flex flex-column h-100" |
||||
|
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgba(0, 0, 0, 0.2); padding: 30px; box-shadow: 0 5px 10px rgba(228, 227, 227, 0.373)"> |
||||
|
<img src="assets/icons/education-black.png" width="42px" height="auto" alt=""> |
||||
|
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Education</p> |
||||
|
<p>A platform for educational management</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-3 col-sm-6 p-0"> |
||||
|
<div class="d-flex flex-column h-100" |
||||
|
style="border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; "> |
||||
|
<img src="assets/icons/manufacturing-black.png" width="42px" height="auto" alt=""> |
||||
|
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Manufacturing</p> |
||||
|
<p>Plan, track and schedule your operations</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-3 col-sm-6 p-0"> |
||||
|
<div class="d-flex flex-column h-100" |
||||
|
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;"> |
||||
|
<img src="assets/icons/ecom-black.png" width="42px" height="auto" alt=""> |
||||
|
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">E-commerce & Website</p> |
||||
|
<p>Mobile friendly, awe-inspiring product pages</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-3 col-sm-6 p-0"> |
||||
|
<div class="d-flex flex-column h-100" |
||||
|
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;box-shadow: 0 -5px 10px rgba(228, 227, 227, 0.373);"> |
||||
|
<img src="assets/icons/service-black.png" width="42px" height="auto" alt=""> |
||||
|
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Service Management</p> |
||||
|
<p>Keep track of Services and Invoice</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-3 col-sm-6 p-0"> |
||||
|
<div class="d-flex flex-column h-100" |
||||
|
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px; "> |
||||
|
<img src="assets/icons/restaurant-black.png" width="42px" height="auto" alt=""> |
||||
|
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Restaurant</p> |
||||
|
<p>Run your bar or restaurant methodically</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-3 col-sm-6 p-0"> |
||||
|
<div class="d-flex flex-column h-100" |
||||
|
style=" padding: 30px;box-shadow: -5px 0 10px rgba(228, 227, 227, 0.373);"> |
||||
|
<img src="assets/icons/hotel-black.png" width="42px" height="auto" alt=""> |
||||
|
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
||||
|
font-size: 1.2rem; margin-bottom: 2px;">Hotel Management</p> |
||||
|
<p>An all-inclusive hotel management application</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container mt-5"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5"> |
||||
|
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Support</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container my-5"> |
||||
|
<div class="row" style="background-color: #FFFAFE;"> |
||||
|
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center" |
||||
|
style="border-right: 1px solid #D9D9D9;"> |
||||
|
<div style="padding: 30px;"> |
||||
|
<div class="d-flex align-items-center"> |
||||
|
<img src="assets/misc/support (1) 1.svg" alt="" width="60px" style="margin-right: 12px;"> |
||||
|
<div style="padding: 0px 8px;"> |
||||
|
<span |
||||
|
style="color: #714B67;font-size: 24px;font-weight: 600;padding-bottom: 1rem;">Need |
||||
|
Help?</span> |
||||
|
<p class="m-0" style="color:#718096;">Got questions or need help? Get in touch.</p> |
||||
|
<div style="font-weight: 400;"><span><img src="assets/misc/support-email.svg" alt="" |
||||
|
width="18px" |
||||
|
style="filter: invert(1);margin-right: 0.8rem;"></span>odoo@cybrosys.com |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center"> |
||||
|
<div style="padding: 30px;"> |
||||
|
<div class="d-flex align-items-center"> |
||||
|
<img src="assets/misc/whatsapp 1.svg" alt="" width="60px" style="margin-right: 12px;"> |
||||
|
<div> |
||||
|
<span style="color: #714B67;font-size: 24px;font-weight: 600;">WhatsApp</span> |
||||
|
<p class="m-0" style="color:#718096;">Say hi to us on WhatsApp!</p> |
||||
|
<div style="font-weight: 400; font-size: 16px;"><span><img src="assets/misc/phone.svg" |
||||
|
alt="" width="14px" |
||||
|
style="filter: invert(1); margin-right: 0.8rem;"></span>+91 |
||||
|
99456767686</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- Optional JavaScript --> |
||||
|
<!-- jQuery first, then Popper.js, then Bootstrap JS --> |
||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> |
||||
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,84 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<!-- Tree view of the custom clearance--> |
||||
|
<record id="custom_clearance_view_tree" model="ir.ui.view"> |
||||
|
<field name="name">custom.clearance.view.tree</field> |
||||
|
<field name="model">custom.clearance</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<list> |
||||
|
<field name="name"/> |
||||
|
<field name="freight_id"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Form view of the custom clearance--> |
||||
|
<record id="custom_clearance_view_form" model="ir.ui.view"> |
||||
|
<field name="name">custom.clearance.view.form</field> |
||||
|
<field name="model">custom.clearance</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<header> |
||||
|
<button name="action_confirm" string="Confirm" type="object" |
||||
|
class="oe_highlight" invisible="state != 'draft'"/> |
||||
|
<button name="action_revision" string="Revision" |
||||
|
type="object" class="oe_highlight" |
||||
|
invisible="state != 'confirm'"/> |
||||
|
<field name="state" widget="statusbar" |
||||
|
statusbar_visible="draft,confirm" readonly="1"/> |
||||
|
</header> |
||||
|
<sheet> |
||||
|
<div class="oe_button_box" name="button_box"> |
||||
|
<button class="oe_stat_button" type="object" |
||||
|
name="action_get_revision" |
||||
|
icon="fa-id-card-o" string="Revision"> |
||||
|
</button> |
||||
|
</div> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="freight_id"/> |
||||
|
<field name="date"/> |
||||
|
<field name="company_id" invisible="1"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="agent_id"/> |
||||
|
<field name="loading_port_id"/> |
||||
|
<field name="discharging_port_id"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
<notebook> |
||||
|
<page string="Custom Clearance"> |
||||
|
<field name="line_ids"> |
||||
|
<list string="Order Lines" editable="bottom"> |
||||
|
<field name="name"/> |
||||
|
<field name="document"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</page> |
||||
|
</notebook> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Action for custom clearance--> |
||||
|
<record id="custom_clearance_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Custom Clearance</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">custom.clearance</field> |
||||
|
<field name="view_mode">list,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new custom clearance |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Menu for Custom Clearance--> |
||||
|
<menuitem id="custom_clearance_menu_root" name="Custom" |
||||
|
parent="freight_order_menu_root" |
||||
|
sequence="2"/> |
||||
|
<menuitem id="custom_clearance_menu" name="Custom Clearance" |
||||
|
parent="custom_clearance_menu_root" sequence="2" |
||||
|
action="custom_clearance_action"/> |
||||
|
</odoo> |
@ -0,0 +1,67 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<!--Tree view for freight container--> |
||||
|
<record id="freight_container_view_tree" model="ir.ui.view"> |
||||
|
<field name="name">freight.container.view.tree</field> |
||||
|
<field name="model">freight.container</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<list> |
||||
|
<field name="name"/> |
||||
|
<field name="active" widget="boolean_toggle"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Form view of the freight container--> |
||||
|
<record id="freight_container_form_view" model="ir.ui.view"> |
||||
|
<field name="name">freight.container.form.view</field> |
||||
|
<field name="model">freight.container</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<header> |
||||
|
<field name="state" widget="statusbar" readonly="1"/> |
||||
|
</header> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
<field name="size"/> |
||||
|
<field name="weight"/> |
||||
|
<field name="volume"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="code"/> |
||||
|
<field name="size_uom_id"/> |
||||
|
<field name="weight_uom_id"/> |
||||
|
<field name="volume_uom_id"/> |
||||
|
<field name="company_id" invisible="1"/> |
||||
|
<field name="active" widget="boolean_toggle"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Search view of the freight container--> |
||||
|
<record id="freight_container_view_search" model="ir.ui.view"> |
||||
|
<field name="name">freight.container.view.search</field> |
||||
|
<field name="model">freight.container</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<search> |
||||
|
<filter string="Inactive" name="inactive" |
||||
|
domain="[('active','=',False)]"/> |
||||
|
</search> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Action--> |
||||
|
<record id="freight_container_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Freight Container</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">freight.container</field> |
||||
|
<field name="view_mode">list,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight container |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
</odoo> |
@ -0,0 +1,214 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<!--Freight order tree view--> |
||||
|
<record id="freight_order_view_tree" model="ir.ui.view"> |
||||
|
<field name="name">freight.order.view.tree</field> |
||||
|
<field name="model">freight.order</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<list> |
||||
|
<field name="name"/> |
||||
|
<field name="type"/> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="loading_port_id"/> |
||||
|
<field name="discharging_port_id"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Freight order form view--> |
||||
|
<record id="freight_order_view_form" model="ir.ui.view"> |
||||
|
<field name="name">freight.order.view.form</field> |
||||
|
<field name="model">freight.order</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<header> |
||||
|
<button name="action_create_custom_clearance" |
||||
|
string="Custom Clearance" type="object" |
||||
|
class="oe_highlight" |
||||
|
data-hotkey="w" |
||||
|
invisible="clearance == 'True'"/> |
||||
|
<button name="action_submit" string="Submit" |
||||
|
type="object" class="oe_highlight" |
||||
|
data-hotkey="w" invisible="state != 'draft'"/> |
||||
|
<button name="action_confirm" string="Confirm" |
||||
|
type="object" class="oe_highlight" |
||||
|
data-hotkey="w" invisible="state != 'submit'"/> |
||||
|
<button name="action_create_invoice" string="Invoice" |
||||
|
type="object" class="oe_highlight" |
||||
|
data-hotkey="w" invisible="state != 'confirm'"/> |
||||
|
<button name="action_track_order" string="Tracking" |
||||
|
type="object" class="oe_highlight" |
||||
|
invisible="state not in ('confirm', 'invoice')" |
||||
|
data-hotkey="w"/> |
||||
|
<button name="action_done" string="Done" type="object" |
||||
|
class="oe_highlight" |
||||
|
invisible="state not in ('confirm', 'invoice')" |
||||
|
data-hotkey="w"/> |
||||
|
<button name="action_cancel" string="Cancel" |
||||
|
type="object" |
||||
|
invisible="state not in ('draft', 'submit', 'confirm', 'invoice')" |
||||
|
data-hotkey="w"/> |
||||
|
<field name="state" widget="statusbar" |
||||
|
statusbar_visible="draft,submit,confirm" |
||||
|
readonly="1"/> |
||||
|
</header> |
||||
|
<sheet> |
||||
|
<div class="oe_button_box" name="button_box"> |
||||
|
<button class="oe_stat_button" type="object" |
||||
|
name="get_custom_clearance" |
||||
|
icon="fa-id-card-o"> |
||||
|
<field string="Clearance" name="clearance_count" |
||||
|
widget="statinfo"/> |
||||
|
</button> |
||||
|
<button class="oe_stat_button" type="object" |
||||
|
name="get_invoice" |
||||
|
icon="fa-pencil-square-o"> |
||||
|
<field string="Invoice" name="invoice_count" |
||||
|
widget="statinfo"/> |
||||
|
</button> |
||||
|
</div> |
||||
|
<div class="oe_title"> |
||||
|
<h1 class="mt0"> |
||||
|
<field name="name"/> |
||||
|
</h1> |
||||
|
</div> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="shipper_id"/> |
||||
|
<field name="consignee_id"/> |
||||
|
<field name="order_date"/> |
||||
|
<field name="company_id" invisible="1"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="clearance" invisible="1"/> |
||||
|
<field name="type"/> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="land_type" |
||||
|
invisible="transport_type != 'land'"/> |
||||
|
<field name="water_type" |
||||
|
invisible="transport_type != 'water'"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="loading_port_id"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="discharging_port_id"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="agent_id"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="expected_date"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
<notebook> |
||||
|
<page string="Order"> |
||||
|
<field name="order_ids"> |
||||
|
<list string="Order Lines" |
||||
|
editable="bottom"> |
||||
|
<field name="container_id"/> |
||||
|
<field name="product_id"/> |
||||
|
<field name="billing_type"/> |
||||
|
<field name="pricing_id"/> |
||||
|
<field name="volume" |
||||
|
invisible="billing_type != 'volume'"/> |
||||
|
<field name="weight" |
||||
|
invisible="billing_type != 'weight'"/> |
||||
|
<field name="price"/> |
||||
|
<field name="total_price"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
<group class="oe_subtotal_footer oe_right" |
||||
|
colspan="2"> |
||||
|
<div class="oe_inline o_td_label"> |
||||
|
<label for="total_volume"/> |
||||
|
</div> |
||||
|
<field name="total_volume" nolabel="1"/> |
||||
|
<div class="oe_inline o_td_label"> |
||||
|
<label for="total_weight"/> |
||||
|
</div> |
||||
|
<field name="total_weight" nolabel="1"/> |
||||
|
<div class="oe_inline o_td_label"> |
||||
|
<label for="total_order_price"/> |
||||
|
</div> |
||||
|
<field name="total_order_price" |
||||
|
nolabel="1"/> |
||||
|
</group> |
||||
|
</page> |
||||
|
<page string="Routes"> |
||||
|
<field name="route_ids"> |
||||
|
<list string="Routes" editable="bottom"> |
||||
|
<field name="routes_id"/> |
||||
|
<field name="source_loc_id"/> |
||||
|
<field name="destination_loc_id"/> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="sale"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
<group class="oe_subtotal_footer oe_right" |
||||
|
colspan="2"> |
||||
|
<div class="oe_inline o_td_label"> |
||||
|
<label for="total_route_sale"/> |
||||
|
</div> |
||||
|
<field name="total_route_sale" nolabel="1"/> |
||||
|
</group> |
||||
|
</page> |
||||
|
<page string="Services"> |
||||
|
<field name="service_ids"> |
||||
|
<list string="Services" editable="bottom"> |
||||
|
<field name="partner_id"/> |
||||
|
<field name="service_id"/> |
||||
|
<field name="qty"/> |
||||
|
<field name="sale"/> |
||||
|
<field name="total_sale"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
<group class="oe_subtotal_footer oe_right" |
||||
|
colspan="2"> |
||||
|
<div class="oe_inline o_td_label"> |
||||
|
<label for="total_service_sale"/> |
||||
|
</div> |
||||
|
<field name="total_service_sale" |
||||
|
nolabel="1"/> |
||||
|
</group> |
||||
|
</page> |
||||
|
<page string="Track"> |
||||
|
<field name="track_ids"> |
||||
|
<list string="Services" editable="bottom" |
||||
|
create="0"> |
||||
|
<field name="source_loc_id"/> |
||||
|
<field name="destination_loc_id"/> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="date"/> |
||||
|
<field name="type"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</page> |
||||
|
</notebook> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Action for freight order--> |
||||
|
<record id="freight_order_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Freight Order</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">freight.order</field> |
||||
|
<field name="view_mode">list,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight order |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Defined menus--> |
||||
|
<menuitem id="freight_order_menu_root" name="Freight Management" |
||||
|
web_icon="freight_management_system,static/description/icon.png" |
||||
|
sequence="4"/> |
||||
|
<menuitem id="freight_order_menu_shipping" name="Shipping" |
||||
|
parent="freight_order_menu_root" sequence="2" |
||||
|
action="freight_order_action"/> |
||||
|
</odoo> |
@ -0,0 +1,166 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<!-- Tree view of freight port--> |
||||
|
<record id="freight_port_view_tree" model="ir.ui.view"> |
||||
|
<field name="name">freight.port.view.tree</field> |
||||
|
<field name="model">freight.port</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<list> |
||||
|
<field name="name"/> |
||||
|
<field name="active" widget="boolean_toggle"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Form view of freight port--> |
||||
|
<record id="freight_port_view_form" model="ir.ui.view"> |
||||
|
<field name="name">freight.port.view.form</field> |
||||
|
<field name="model">freight.port</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
<field name="code"/> |
||||
|
<field name="country_id"/> |
||||
|
<field name="state_id"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="active" widget="boolean_toggle"/> |
||||
|
<field name="land"/> |
||||
|
<field name="air"/> |
||||
|
<field name="water"/> |
||||
|
<field name="company_id" invisible="1"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Search view of freight port--> |
||||
|
<record id="freight_port_view_search" model="ir.ui.view"> |
||||
|
<field name="name">freight.port.view.search</field> |
||||
|
<field name="model">freight.port</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<search> |
||||
|
<filter string="Inactive" name="inactive" |
||||
|
domain="[('active','=',False)]"/> |
||||
|
</search> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Action for freight port--> |
||||
|
<record id="freight_port_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Freight Port</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">freight.port</field> |
||||
|
<field name="view_mode">list,form,search</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight port |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Freight price tree view--> |
||||
|
<record id="freight_price_view_tree" model="ir.ui.view"> |
||||
|
<field name="name">freight.price.view.tree</field> |
||||
|
<field name="model">freight.price</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<list> |
||||
|
<field name="name"/> |
||||
|
<field name="volume"/> |
||||
|
<field name="weight"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Form view of freight price--> |
||||
|
<record id="freight_price_view_form" model="ir.ui.view"> |
||||
|
<field name="name">freight.price.view.form</field> |
||||
|
<field name="model">freight.price</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="weight"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="volume"/> |
||||
|
<field name="company_id" invisible="1"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Action for freight price--> |
||||
|
<record id="freight_price_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Freight Price</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">freight.price</field> |
||||
|
<field name="view_mode">list,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight price |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Freight routes tree view--> |
||||
|
<record id="freight_routes_view_tree" model="ir.ui.view"> |
||||
|
<field name="name">freight.routes.view.tree</field> |
||||
|
<field name="model">freight.routes</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<list> |
||||
|
<field name="name"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Freight price form view--> |
||||
|
<record id="freight_routes_view_form" model="ir.ui.view"> |
||||
|
<field name="name">freight.rotes.view.form</field> |
||||
|
<field name="model">freight.routes</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="land_sale"/> |
||||
|
<field name="air_sale"/> |
||||
|
<field name="water_sale"/> |
||||
|
<field name="company_id" invisible="1"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Action for freight routes--> |
||||
|
<record id="action_freight_routes" model="ir.actions.act_window"> |
||||
|
<field name="name">Freight Routes</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">freight.routes</field> |
||||
|
<field name="view_mode">list,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight routes |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Defined Menu item--> |
||||
|
<menuitem id="menu_configuration" name="Configuration" sequence="4" |
||||
|
parent="freight_order_menu_root"/> |
||||
|
<menuitem id="menu_freight_port" name="Ports" |
||||
|
parent="menu_configuration" sequence="2" |
||||
|
action="freight_port_action"/> |
||||
|
<menuitem id="menu_freight_price" name="Pricing List" |
||||
|
parent="menu_configuration" sequence="2" |
||||
|
action="freight_price_action"/> |
||||
|
<menuitem id="menu_freight_routes" name="Route Operations" |
||||
|
parent="menu_configuration" sequence="2" |
||||
|
action="action_freight_routes"/> |
||||
|
</odoo> |
@ -0,0 +1,63 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<!-- Tree view of freight service--> |
||||
|
<record id="freight_service_view_tree" model="ir.ui.view"> |
||||
|
<field name="name">freight.service.view.tree</field> |
||||
|
<field name="model">freight.service</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<list> |
||||
|
<field name="name"/> |
||||
|
<field name="sale_price"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Form view of freight service--> |
||||
|
<record id="freight_service_view_form" model="ir.ui.view"> |
||||
|
<field name="name">freight.service.view.form</field> |
||||
|
<field name="model">freight.service</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
<field name="company_id" invisible="1"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="sale_price"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
<notebook> |
||||
|
<page string="Vendors"> |
||||
|
<field name="line_ids"> |
||||
|
<list string="Vendors" editable="bottom"> |
||||
|
<field name="partner_id"/> |
||||
|
<field name="sale"/> |
||||
|
</list> |
||||
|
</field> |
||||
|
</page> |
||||
|
</notebook> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Action for freight service--> |
||||
|
<record id="freight_service_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Freight Service</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">freight.service</field> |
||||
|
<field name="view_mode">list,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight service |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--Menu for freight service--> |
||||
|
<menuitem id="freight_container_menu_root" name="Container" |
||||
|
parent="menu_configuration" sequence="2" |
||||
|
action="freight_container_action"/> |
||||
|
<menuitem id="menu_freight_service" name="Services" |
||||
|
parent="menu_configuration" sequence="2" |
||||
|
action="freight_service_action"/> |
||||
|
</odoo> |
@ -0,0 +1,50 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<!-- Form view of freight order track--> |
||||
|
<record id="freight_order_track_view_form" model="ir.ui.view"> |
||||
|
<field name="name">freight.order.track.view.form</field> |
||||
|
<field name="model">freight.order.track</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="freight_id" readonly="1"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="date"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="type"/> |
||||
|
<field name="destination_loc_id"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="source_loc_id"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
<footer> |
||||
|
<button name="action_order_submit" string="Submit" |
||||
|
type="object" class="btn-primary" data-hotkey="q"/> |
||||
|
<button string="Cancel" class="btn-secondary" |
||||
|
special="cancel" data-hotkey="z"/> |
||||
|
</footer> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Action for order track--> |
||||
|
<record id="order_track_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Track Order</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">freight.order.track</field> |
||||
|
<field name="view_mode">form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new track order |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
</odoo> |
@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU Affero General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
from . import custom_clearance_revision |
@ -0,0 +1,99 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Abbas P (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from werkzeug import urls |
||||
|
from odoo import models, fields, _ |
||||
|
|
||||
|
|
||||
|
class CustomClearanceRevision(models.TransientModel): |
||||
|
"""Create Revision for the custom clearance""" |
||||
|
_name = 'custom.clearance.revision' |
||||
|
_description = 'Custom Clearance Revision' |
||||
|
|
||||
|
name = fields.Text(string='Reason', required=True, |
||||
|
help='Mention the reason for revision') |
||||
|
custom_id = fields.Many2one('custom.clearance', string='Custom clearance', |
||||
|
help='Select the custom clearance') |
||||
|
text = fields.Char(string='Text', help='Note any points') |
||||
|
company_id = fields.Many2one('res.company', string='Company', |
||||
|
copy=False, readonly=True, |
||||
|
help="Current company", |
||||
|
default=lambda |
||||
|
self: self.env.company.id) |
||||
|
|
||||
|
def action_create_revision(self): |
||||
|
"""Create revision against custom clearance""" |
||||
|
for rec in self.custom_id: |
||||
|
base_url = self.env['ir.config_parameter'].sudo().get_param( |
||||
|
'web.base.url') |
||||
|
Urls = urls.url_join(base_url, |
||||
|
'odoo/action-%(actionId)s/%(id)s' % { |
||||
|
'id': self.custom_id.id, |
||||
|
'actionId': self.env.ref('freight_management_system.custom_clearance_action').id}) |
||||
|
Urls_ = urls.url_join(base_url, |
||||
|
'odoo/action-%(actionId)s/%(id)s' % { |
||||
|
'id': self.custom_id.freight_id.id, |
||||
|
'actionId': self.env.ref('freight_management_system.freight_order_action').id}) |
||||
|
mail_content = _('Hi %s,<br>' |
||||
|
'The Custom Clearance Revision with reason: %s' |
||||
|
'<div style = "text-align: center; ' |
||||
|
'margin-top: 16px;"><a href = "%s"' |
||||
|
'style = "padding: 5px 10px; font-size: 12px; ' |
||||
|
'line-height: 18px; color: #FFFFFF; ' |
||||
|
'border-color:#875A7B;text-decoration: none; ' |
||||
|
'display: inline-block; ' |
||||
|
'margin-bottom: 0px; font-weight: 400;' |
||||
|
'text-align: center; vertical-align: middle; ' |
||||
|
'cursor: pointer; white-space: nowrap; ' |
||||
|
'background-image: none; ' |
||||
|
'background-color: #875A7B; ' |
||||
|
'border: 1px solid #875A7B; border-radius:3px;">' |
||||
|
'View %s</a></div>' |
||||
|
'<div style = "text-align: center; ' |
||||
|
'margin-top: 16px;"><a href = "%s"' |
||||
|
'style = "padding: 5px 10px; ' |
||||
|
'font-size: 12px; line-height: 18px; ' |
||||
|
'color: #FFFFFF; border-color:#875A7B;' |
||||
|
'text-decoration: none; display: inline-block; ' |
||||
|
'margin-bottom: 0px; font-weight: 400;' |
||||
|
'text-align: center; vertical-align: middle; ' |
||||
|
'cursor: pointer; white-space: nowrap; ' |
||||
|
'background-image: none; ' |
||||
|
'background-color: #875A7B; ' |
||||
|
'border: 1px solid #875A7B; border-radius:3px;">' |
||||
|
'View %s</a></div>' |
||||
|
) % (rec.agent_id.name, self.name, Urls, |
||||
|
rec.name, Urls_, |
||||
|
self.custom_id.freight_id.name) |
||||
|
main_content = { |
||||
|
'subject': _( |
||||
|
'Custom Clearance Revision For %s') % self.custom_id.freight_id.name, |
||||
|
'author_id': self.env.user.partner_id.id, |
||||
|
'body_html': mail_content, |
||||
|
'email_to': rec.agent_id.email, |
||||
|
} |
||||
|
mail_id = self.env['mail.mail'].create(main_content) |
||||
|
mail_id.mail_message_id.body = mail_content |
||||
|
mail_id.send() |
||||
|
self.env['custom.clearance.revision'].create({ |
||||
|
'custom_id': self.custom_id.id, |
||||
|
'name': self.name, |
||||
|
}) |
@ -0,0 +1,38 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<!-- Custom Clearance Revision Form View --> |
||||
|
<record id="custom_clearance_revision_view_form" model="ir.ui.view"> |
||||
|
<field name="name">custom.clearance.revision.view.form</field> |
||||
|
<field name="model">custom.clearance.revision</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
<field name="custom_id" invisible="1"/> |
||||
|
<field name="company_id" invisible="1"/> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
<footer> |
||||
|
<button string="Save" name="action_create_revision" |
||||
|
type="object" class="btn-primary" data-hotkey="q"/> |
||||
|
<button string="Cancel" class="btn-secondary" |
||||
|
special="cancel" data-hotkey="z"/> |
||||
|
</footer> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- Action for custom clearance revision--> |
||||
|
<record id="custom_clearance_revision_action" |
||||
|
model="ir.actions.act_window"> |
||||
|
<field name="name">Custom Clearance Revision</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">custom.clearance.revision</field> |
||||
|
<field name="view_mode">form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new custom clearance revision |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
</odoo> |