@ -0,0 +1,17 @@ |
|||||
|
Freight Management v15 |
||||
|
====================== |
||||
|
Freight Management |
||||
|
|
||||
|
Installation |
||||
|
============ |
||||
|
- www.odoo.com/documentation/15.0/setup/install.html |
||||
|
- Install our custom addon |
||||
|
|
||||
|
Configuration |
||||
|
============= |
||||
|
|
||||
|
No additional configurations needed |
||||
|
|
||||
|
Credits |
||||
|
======= |
||||
|
Developer: Megha v15 @ cybrosys, Contact: odoo@cybrosys.com |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# Freight Management |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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 model |
||||
|
from . import wizard |
@ -0,0 +1,50 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# Freight Management |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
{ |
||||
|
'name': 'Freight Management', |
||||
|
'version': '15.0.1.0.0', |
||||
|
'summary': 'Module for Managing All Frieght Operations', |
||||
|
'description': 'Module for Managing All Frieght Operations', |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'maintainer': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'website': 'https://www.cybrosys.com', |
||||
|
'depends': ['base', 'product', 'account'], |
||||
|
'images': ['static/description/banner.png'], |
||||
|
'data': [ |
||||
|
'security/ir.model.access.csv', |
||||
|
'data/freight_order_data.xml', |
||||
|
'views/freight_order.xml', |
||||
|
'views/freight_port.xml', |
||||
|
'views/freight_container.xml', |
||||
|
'views/custom_clearance.xml', |
||||
|
'views/order_track.xml', |
||||
|
'report/report_order.xml', |
||||
|
'report/report_tracking.xml', |
||||
|
'wizard/custom_revision.xml' |
||||
|
], |
||||
|
'installable': True, |
||||
|
'application': False, |
||||
|
'auto_install': False, |
||||
|
'license': 'AGPL-3', |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data noupdate="1"> |
||||
|
|
||||
|
<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> |
||||
|
|
||||
|
<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,4 @@ |
|||||
|
## Module <freight_management_system> |
||||
|
|
||||
|
#### 04.08.2022 |
||||
|
#### Version 15.0.1.0.0 |
@ -0,0 +1,27 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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 freight_order |
||||
|
from . import freight_port |
||||
|
from . import freight_container |
||||
|
from . import custom_clearance |
||||
|
from . import order_track |
@ -0,0 +1,154 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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 werkzeug import urls |
||||
|
from odoo import api, fields, models, _ |
||||
|
|
||||
|
|
||||
|
class CustomClearance(models.Model): |
||||
|
_name = 'custom.clearance' |
||||
|
_description = 'Custom Clearance' |
||||
|
|
||||
|
name = fields.Char('Name', compute='_compute_name') |
||||
|
freight_id = fields.Many2one('freight.order', required=True) |
||||
|
date = fields.Date('Date') |
||||
|
agent_id = fields.Many2one('res.partner', 'Agent', required=True) |
||||
|
loading_port_id = fields.Many2one('freight.port', string="Loading Port") |
||||
|
discharging_port_id = fields.Many2one('freight.port', |
||||
|
string="Discharging Port") |
||||
|
line_ids = fields.One2many('custom.clearance.line', 'line_id') |
||||
|
state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirm'), |
||||
|
('done', 'Done')], default='draft') |
||||
|
|
||||
|
@api.depends('freight_id') |
||||
|
def _compute_name(self): |
||||
|
"""Compute the name of custom clearance""" |
||||
|
for rec in self: |
||||
|
if rec.freight_id: |
||||
|
rec.name = 'CC - ' + str(rec.freight_id.name) |
||||
|
else: |
||||
|
rec.name = '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, 'web#id=%(id)s&model=custom.clearance&view_type=form' % {'id': self.id}) |
||||
|
Urls_ = urls.url_join(base_url, 'web#id=%(id)s&model=freight.order&view_type=form' % {'id': self.freight_id.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 Clerance 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.wizard', |
||||
|
'context': { |
||||
|
'default_custom_id': self.id |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
def get_revision(self): |
||||
|
"""Getting details of custom revision""" |
||||
|
self.ensure_one() |
||||
|
return { |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'name': 'Custom Revision', |
||||
|
'view_mode': 'tree,form', |
||||
|
'res_model': 'custom.clearance.revision', |
||||
|
'domain': [('clearance_id', '=', self.id)], |
||||
|
'context': "{'create': False}" |
||||
|
} |
||||
|
|
||||
|
|
||||
|
class CustomClearanceLine(models.Model): |
||||
|
_name = 'custom.clearance.line' |
||||
|
_description = 'Custom Clearance Line' |
||||
|
|
||||
|
name = fields.Char('Document Name') |
||||
|
document = fields.Binary(string="Documents", store=True, attachment=True) |
||||
|
line_id = fields.Many2one('custom.clearance') |
||||
|
|
||||
|
|
||||
|
class CustomClearanceRevision(models.Model): |
||||
|
_name = 'custom.clearance.revision' |
||||
|
_description = 'Custom Clearance Revision' |
||||
|
|
||||
|
name = fields.Char('Name') |
||||
|
|
||||
|
name = fields.Char() |
||||
|
reason = fields.Text() |
||||
|
clearance_id = fields.Many2one('custom.clearance') |
@ -0,0 +1,56 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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 odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class FreightContainer(models.Model): |
||||
|
_name = 'freight.container' |
||||
|
|
||||
|
name = fields.Char('Name', required=True) |
||||
|
code = fields.Char('Code') |
||||
|
size = fields.Float('Size', required=True) |
||||
|
size_uom_id = fields.Many2one('uom.uom', string='Size UOM') |
||||
|
weight = fields.Float('Weight', required=True) |
||||
|
weight_uom_id = fields.Many2one('uom.uom', string='Weight UOM') |
||||
|
volume = fields.Float('Volume', required=True) |
||||
|
volume_uom_id = fields.Many2one('uom.uom', string='Volume UOM') |
||||
|
active = fields.Boolean('Active', default=True) |
||||
|
state = fields.Selection([('available', 'Available'), |
||||
|
('reserve', 'Reserve')], default='available') |
||||
|
|
||||
|
|
||||
|
class FreightService(models.Model): |
||||
|
_name = 'freight.service' |
||||
|
|
||||
|
name = fields.Char('Name', required=True) |
||||
|
sale_price = fields.Float('Sale Price', required=True) |
||||
|
line_ids = fields.One2many('freight.service.line', 'line_id') |
||||
|
|
||||
|
|
||||
|
class FreightServiceLine(models.Model): |
||||
|
_name = 'freight.service.line' |
||||
|
|
||||
|
partner_id = fields.Many2one('res.partner', string="Vendor") |
||||
|
sale = fields.Float('Sale Price') |
||||
|
line_id = fields.Many2one('freight.service') |
@ -0,0 +1,503 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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 werkzeug import urls |
||||
|
from odoo import api, fields, models, _ |
||||
|
from odoo.exceptions import ValidationError |
||||
|
|
||||
|
|
||||
|
class FreightOrder(models.Model): |
||||
|
_name = 'freight.order' |
||||
|
_description = 'Freight Order' |
||||
|
|
||||
|
name = fields.Char('Name', default='New', readonly=True) |
||||
|
shipper_id = fields.Many2one('res.partner', 'Shipper', required=True, |
||||
|
help="Shipper's Details") |
||||
|
consignee_id = fields.Many2one('res.partner', 'Consignee', |
||||
|
help="Details of consignee") |
||||
|
type = fields.Selection([('import', 'Import'), ('export', 'Export')], |
||||
|
'Import/Export', required=True, |
||||
|
help="Type of freight operation") |
||||
|
transport_type = fields.Selection([('land', 'Land'), ('air', 'Air'), |
||||
|
('water', 'Water')], "Transport", |
||||
|
help='Type of transportation', |
||||
|
required=True) |
||||
|
land_type = fields.Selection([('ltl', 'LTL'), ('ftl', 'FTL')], |
||||
|
'Land Shipping', |
||||
|
help="Types of shipment movement involved in Land") |
||||
|
water_type = fields.Selection([('fcl', 'FCL'), ('lcl', 'LCL')], |
||||
|
'Water Shipping', |
||||
|
help="Types of shipment movement involved in Water") |
||||
|
order_date = fields.Date('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') |
||||
|
clearance = fields.Boolean("Clearance") |
||||
|
clearance_count = fields.Integer(compute='compute_count') |
||||
|
invoice_count = fields.Integer(compute='compute_count') |
||||
|
total_order_price = fields.Float('Total', |
||||
|
compute='_compute_total_order_price') |
||||
|
total_volume = fields.Float('Total Volume', |
||||
|
compute='_compute_total_order_price') |
||||
|
total_weight = fields.Float('Total Weight', |
||||
|
compute='_compute_total_order_price') |
||||
|
order_ids = fields.One2many('freight.order.line', 'order_id') |
||||
|
route_ids = fields.One2many('freight.order.routes.line', 'route_id') |
||||
|
total_route_sale = fields.Float('Total Sale', |
||||
|
compute="_compute_total_route_cost") |
||||
|
service_ids = fields.One2many('freight.order.service', 'line_id') |
||||
|
total_service_sale = fields.Float('Service Total Sale', |
||||
|
compute="_compute_total_service_cost") |
||||
|
agent_id = fields.Many2one('res.partner', 'Agent', required=True, |
||||
|
help="Details of agent") |
||||
|
expected_date = fields.Date('Expected Date') |
||||
|
track_ids = fields.One2many('freight.track', 'track_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 |
||||
|
def create(self, vals): |
||||
|
"""Create Sequence""" |
||||
|
sequence_code = 'freight.order.sequence' |
||||
|
vals['name'] = self.env['ir.sequence'].next_by_code(sequence_code) |
||||
|
return super(FreightOrder, self).create(vals) |
||||
|
|
||||
|
def 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': 'tree,form', |
||||
|
'res_model': 'custom.clearance', |
||||
|
'domain': [('freight_id', '=', self.id)], |
||||
|
'context': "{'create': False}" |
||||
|
} |
||||
|
|
||||
|
def 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 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.operation_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': 'tree,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, 'web#id=%(id)s&model=freight.order&view_type=form' % {'id': self.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: |
||||
|
clearance = self.env['custom.clearance'].search([ |
||||
|
('freight_id', '=', self.id)]) |
||||
|
if 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, 'web#id=%(id)s&model=freight.order&view_type=form' % {'id': self.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, 'web#id=%(id)s&model=freight.order&view_type=form' % {'id': self.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): |
||||
|
_name = 'freight.order.line' |
||||
|
|
||||
|
order_id = fields.Many2one('freight.order') |
||||
|
container_id = fields.Many2one('freight.container', string='Container', |
||||
|
domain="[('state', '=', 'available')]") |
||||
|
product_id = fields.Many2one('product.product', string='Goods') |
||||
|
billing_type = fields.Selection([('weight', 'Weight'), |
||||
|
('volume', 'Volume')], string="Billing On") |
||||
|
pricing_id = fields.Many2one('freight.price', string='Pricing') |
||||
|
price = fields.Float('Unit Price') |
||||
|
total_price = fields.Float('Total Price') |
||||
|
volume = fields.Float('Volume') |
||||
|
weight = fields.Float('Weight') |
||||
|
|
||||
|
@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 FreightOrderRouteLine(models.Model): |
||||
|
_name = 'freight.order.routes.line' |
||||
|
|
||||
|
route_id = fields.Many2one('freight.order') |
||||
|
operation_id = fields.Many2one('freight.routes', required=True) |
||||
|
source_loc = fields.Many2one('freight.port', 'Source Location') |
||||
|
destination_loc = fields.Many2one('freight.port', 'Destination Location') |
||||
|
transport_type = fields.Selection([('land', 'Land'), ('air', 'Air'), |
||||
|
('water', 'Water')], "Transport", |
||||
|
required=True) |
||||
|
sale = fields.Float('Sale') |
||||
|
|
||||
|
@api.onchange('operation_id', 'transport_type') |
||||
|
def _onchange_operation_id(self): |
||||
|
"""calculate the price of route operation""" |
||||
|
for rec in self: |
||||
|
if rec.operation_id and rec.transport_type: |
||||
|
if rec.transport_type == 'land': |
||||
|
rec.sale = rec.operation_id.land_sale |
||||
|
elif rec.transport_type == 'air': |
||||
|
rec.sale = rec.operation_id.air_sale |
||||
|
elif rec.transport_type == 'water': |
||||
|
rec.sale = rec.operation_id.water_sale |
||||
|
|
||||
|
|
||||
|
class FreightOrderServiceLine(models.Model): |
||||
|
_name = 'freight.order.service' |
||||
|
|
||||
|
line_id = fields.Many2one('freight.order') |
||||
|
service_id = fields.Many2one('freight.service', required=True) |
||||
|
partner_id = fields.Many2one('res.partner', string="Vendor") |
||||
|
qty = fields.Float('Quantity') |
||||
|
cost = fields.Float('Cost') |
||||
|
sale = fields.Float('Sale') |
||||
|
total_sale = fields.Float('Total Sale') |
||||
|
|
||||
|
@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): |
||||
|
_name = 'freight.track' |
||||
|
|
||||
|
source_loc = fields.Many2one('freight.port', 'Source Location') |
||||
|
destination_loc = fields.Many2one('freight.port', 'Destination Location') |
||||
|
transport_type = fields.Selection([('land', 'Land'), ('air', 'Air'), |
||||
|
('water', 'Water')], "Transport") |
||||
|
track_id = fields.Many2one('freight.order') |
||||
|
date = fields.Date('Date') |
||||
|
type = fields.Selection([('received', 'Received'), |
||||
|
('delivered', 'Delivered')], 'Received/Delivered') |
@ -0,0 +1,56 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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 odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class FreightPort(models.Model): |
||||
|
_name = 'freight.port' |
||||
|
|
||||
|
name = fields.Char('Name') |
||||
|
code = fields.Char('Code') |
||||
|
state_id = fields.Many2one('res.country.state', |
||||
|
domain="[('country_id', '=', country_id)]") |
||||
|
country_id = fields.Many2one('res.country', required=True) |
||||
|
active = fields.Boolean('Active', default=True) |
||||
|
land = fields.Boolean('Land') |
||||
|
air = fields.Boolean('Air') |
||||
|
water = fields.Boolean('Water') |
||||
|
|
||||
|
|
||||
|
class FreightPricing(models.Model): |
||||
|
_name = 'freight.price' |
||||
|
|
||||
|
name = fields.Char('Name', required=True) |
||||
|
volume = fields.Float('Volume Price', required=True) |
||||
|
weight = fields.Float('Weight Price', required=True) |
||||
|
|
||||
|
|
||||
|
class FreightRoutes(models.Model): |
||||
|
_name = 'freight.routes' |
||||
|
|
||||
|
name = fields.Char('Name', required=True) |
||||
|
active = fields.Boolean('Active', default=True) |
||||
|
land_sale = fields.Float('Sale Price for Land', required=True) |
||||
|
air_sale = fields.Float('Sale Price for Air', required=True) |
||||
|
water_sale = fields.Float('Sale Price for Water', required=True) |
@ -0,0 +1,98 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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 werkzeug import urls |
||||
|
from odoo import fields, models, _ |
||||
|
|
||||
|
|
||||
|
class FreightTracking(models.Model): |
||||
|
_name = 'freight.order.track' |
||||
|
|
||||
|
date = fields.Date('Date', default=fields.Date.today()) |
||||
|
freight_id = fields.Many2one('freight.order') |
||||
|
source_loc = fields.Many2one('freight.port', 'Source Location') |
||||
|
destination_loc = 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') |
||||
|
|
||||
|
def order_submit(self): |
||||
|
"""Create tracking details of order""" |
||||
|
self.env['freight.track'].create({ |
||||
|
'track_id': self.freight_id.id, |
||||
|
'source_loc': self.source_loc.id, |
||||
|
'destination_loc': self.destination_loc.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, 'web#id=%(id)s&model=freight.order&view_type=form' % {'id': self.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.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.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() |
||||
|
|
||||
|
|
||||
|
class FreightTrackingLine(models.Model): |
||||
|
_name = 'freight.order.track.line' |
||||
|
|
||||
|
track_line_id = fields.Many2one('freight.order.track') |
||||
|
source_loc = fields.Many2one('freight.port', 'Source Location') |
||||
|
destination_loc = fields.Many2one('freight.port', 'Destination Location') |
||||
|
transport_type = fields.Selection([('land', 'Land'), ('air', 'Air'), |
||||
|
('water', 'Water')], "Transport") |
||||
|
date = fields.Date('Date') |
||||
|
type = fields.Selection([('receive', 'Received'), ('deliver', 'Delivered')], |
||||
|
'Received/Delivered') |
@ -0,0 +1,137 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<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> |
||||
|
|
||||
|
<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.operation_id.name"/> |
||||
|
<td t-esc="route.source_loc.name"/> |
||||
|
<td t-esc="route.destination_loc.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> |
||||
|
|
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,81 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<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 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.name"/> |
||||
|
<td t-esc="track.destination_loc.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> |
||||
|
</data> |
||||
|
</odoo> |
|
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.2 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 673 B |
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: 59 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 198 KiB |
After Width: | Height: | Size: 269 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 127 KiB |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 142 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 198 KiB |
After Width: | Height: | Size: 154 KiB |
After Width: | Height: | Size: 263 KiB |
After Width: | Height: | Size: 233 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,762 @@ |
|||||
|
<div class="container" style="padding: 1rem !important; margin-bottom: 1rem !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between" style="border-bottom: 1px solid #d5d5d5;"> |
||||
|
<div class="my-3"> |
||||
|
<img src="./assets/icons/logo.png" style="width: auto !important; height: 40px !important;"> |
||||
|
</div> |
||||
|
<div class="my-3 d-flex align-items-center"> |
||||
|
<div |
||||
|
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> |
||||
|
<i class="fa fa-check mr-1"></i>Community |
||||
|
</div> |
||||
|
<div |
||||
|
style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> |
||||
|
<i class="fa fa-check mr-1"></i>Enterprise |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="container" style="padding: 0rem 1.5rem 4rem !important"> |
||||
|
<div class="row" style="height: 900px !important;"> |
||||
|
<div class="col-sm-12 col-md-12 col-lg-12" |
||||
|
style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;"> |
||||
|
<h1 |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important; font-size: 3.5rem !important; text-align: center !important;"> |
||||
|
Freight Management</h1> |
||||
|
<p |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important; font-size: 1.4rem !important; text-align: center !important;"> |
||||
|
A Module For Managing All freight operation |
||||
|
</p> |
||||
|
<img src="./assets/screenshots/hero.gif" class="img-responsive" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="row"> |
||||
|
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important"> |
||||
|
<h2 |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
||||
|
<i class="fa fa-compass mr-2"></i>Explore this module |
||||
|
</h2> |
||||
|
<div class="row"> |
||||
|
<div class="col-md-6"> |
||||
|
<a href="#overview" style="text-decoration: none !important;"> |
||||
|
<div class="row" |
||||
|
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
||||
|
<div class="col-8"> |
||||
|
<h3 |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
||||
|
Overview</h3> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
||||
|
Learn more about this module</p> |
||||
|
</div> |
||||
|
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
||||
|
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-md-6"> |
||||
|
<a href="#features" style="text-decoration: none !important;"> |
||||
|
<div class="row" |
||||
|
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
||||
|
<div class="col-8"> |
||||
|
<h3 |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
||||
|
Features</h3> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
||||
|
View features of this module</p> |
||||
|
</div> |
||||
|
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
||||
|
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-md-6"> |
||||
|
<a href="#screenshots" style="text-decoration: none !important;"> |
||||
|
<div class="row" |
||||
|
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
||||
|
<div class="col-8"> |
||||
|
<h3 |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
||||
|
Screenshots</h3> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
||||
|
See key screenshots of this module</p> |
||||
|
</div> |
||||
|
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
||||
|
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<div class="row" id="overview"> |
||||
|
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
||||
|
<h2 |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
||||
|
<i class="fa fa-pie-chart mr-2"></i>Overview |
||||
|
</h2> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-mg-12 pl-3"> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;"> |
||||
|
This module helps you to manage all freight operations by Air |
||||
|
, Ocean, and Land.It is a used to manage all |
||||
|
aspects of your freight operations. |
||||
|
</p> |
||||
|
</div> |
||||
|
</p> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="row" id="features"> |
||||
|
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
||||
|
<h2 |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
||||
|
<i class="fa fa-star mr-2"></i>Features |
||||
|
</h2> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Configure Freight Orders</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Configure the Freight Operation Routes</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Configure Freight Operation Services</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Operation Tracking</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Custom Clearance And Custom Clearance Revision</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Order Reports</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Order Track Details</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<div class="row" id="screenshots"> |
||||
|
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
||||
|
<h2 |
||||
|
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
||||
|
<i class="fa fa-image mr-2"></i>Screenshots |
||||
|
</h2> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<h4 class="mt-2" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Orders</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
After installation open freight management go to shipping, then create the fright orders. </p> |
||||
|
<img src="assets/screenshots/freight_1.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight order lines</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !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. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_2.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Operation Routes</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
Defining the routes for the shipping. Also we can add the operations for the routes. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_3.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Operation Services</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
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. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_4.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Custom Clearance</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
By clicking the custom clearance button we can create the custom clearance for the freight order. |
||||
|
</br> |
||||
|
We can view the custom clearance in custom clearance menu under the custom.<br/> |
||||
|
After Conforming the custom clearance, we can confirm our fright order. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_5.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Custom Clearance Revision</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
We can create the revision for the custom clearance by clicking the revision button. |
||||
|
</br> |
||||
|
We can view the custom clearance revision from the Revision smart button. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_6.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Order Invoice</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
We can create the invoice for the freight order by clicking the invoice button. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_7.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Order Tracking</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
we can track our order by click the tracking button. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_8.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
<br/> |
||||
|
<img src="assets/screenshots/freight_9.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Freight Order Reporting</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
from the action bar we can print the fright order report and order tracked report. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_10.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
<br/> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
Freight Order</h4> |
||||
|
<img src="assets/screenshots/freight_11.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
|
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
Freight Order Tracking</h4> |
||||
|
<img src="assets/screenshots/freight_12.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Configure Ports</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
Under configuration menu we can see a port menu, for configuring our ports. Here we can specify the port location, and available transport methods. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_13.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Configure Pricing</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
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. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_13.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Configure Containers</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
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. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_14.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-12 my-3"> |
||||
|
<h4 class="mt-3" |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Configure Services</h4> |
||||
|
<p |
||||
|
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
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. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/freight_15.png" class="img-responsive img-thumbnail border" width="100%" |
||||
|
height="auto" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- SUGGESTED PRODUCTS --> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center" |
||||
|
style="text-align: center; padding: 2.5rem 1rem !important;"> |
||||
|
<h2 style="color: #212529 !important;">Suggested Products</h2> |
||||
|
<hr |
||||
|
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
||||
|
|
||||
|
<div id="demo1" class="row carousel slide" data-ride="carousel"> |
||||
|
<!-- The slideshow --> |
||||
|
<div class="carousel-inner"> |
||||
|
<div class="carousel-item active" style="min-height:0px"> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/15.0/export_stockinfo_xls/" target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="./assets/modules/export_image.png"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/" target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="./assets/modules/gantt_image.png"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/15.0/sales_credit_limit/" target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="./assets/modules/credit_image.png"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item" style="min-height:0px"> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/15.0/base_account_budget/" target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="./assets/modules/budget_image.png"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/15.0/product_to_quotation/" target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="./assets/modules/quotation_image.png"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/15.0/employee_documents_expiry/" target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="./assets/modules/employee_image.png"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- Left and right controls --> |
||||
|
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="left:-25px;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="#demo1" data-slide="next" style="right:-25px;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> |
||||
|
</div> |
||||
|
<!-- END OF SUGGESTED PRODUCTS --> |
||||
|
|
||||
|
<!-- OUR SERVICES --> |
||||
|
<section class="container" style="margin-top: 6rem !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> |
||||
|
<h2 style="color: #212529 !important;">Our Services</h2> |
||||
|
<hr |
||||
|
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Customization</h6> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Implementation</h6> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Support</h6> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Hire |
||||
|
Odoo |
||||
|
Developer</h6> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Integration</h6> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Migration</h6> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Consultancy</h6> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Implementation</h6> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Licensing Consultancy</h6> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- END OF END OF OUR SERVICES --> |
||||
|
|
||||
|
<!-- OUR INDUSTRIES --> |
||||
|
<section class="container" style="margin-top: 6rem !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> |
||||
|
<h2 style="color: #212529 !important;">Our Industries</h2> |
||||
|
<hr |
||||
|
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Trading |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Easily procure |
||||
|
and |
||||
|
sell your products</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
POS |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Easy |
||||
|
configuration |
||||
|
and convivial experience</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Education |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
A platform for |
||||
|
educational management</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Manufacturing |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Plan, track and |
||||
|
schedule your operations</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
E-commerce & Website |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Mobile |
||||
|
friendly, |
||||
|
awe-inspiring product pages</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Service Management |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Keep track of |
||||
|
services and invoice</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Restaurant |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Run your bar or |
||||
|
restaurant methodically</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Hotel Management |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
An |
||||
|
all-inclusive |
||||
|
hotel management application</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<!-- END OF END OF OUR INDUSTRIES --> |
||||
|
|
||||
|
<!-- FOOTER --> |
||||
|
<!-- Footer Section --> |
||||
|
<section class="container" style="margin: 5rem auto 2rem;"> |
||||
|
<div class="row" style="max-width:1540px;"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> |
||||
|
<h2 style="color: #212529 !important;">Need Help?</h2> |
||||
|
<hr |
||||
|
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- Contact Cards --> |
||||
|
<div class="row d-flex justify-content-center align-items-center" |
||||
|
style="max-width:1540px; margin: 0 auto 2rem auto;"> |
||||
|
|
||||
|
<div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; "> |
||||
|
|
||||
|
<div class="row mt-4"> |
||||
|
<div class="col-lg-6"> |
||||
|
<a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i |
||||
|
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a> |
||||
|
</div> |
||||
|
<div class="col-lg-6"> |
||||
|
<a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank" |
||||
|
class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i |
||||
|
class="fa fa-whatsapp mr-2"></i>+91 86068 27707</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
<!-- End of Contact Cards --> |
||||
|
</section> |
||||
|
<!-- Footer --> |
||||
|
<section class="oe_container" style="padding: 2rem 3rem 1rem;"> |
||||
|
<div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> |
||||
|
<!-- Logo --> |
||||
|
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;"> |
||||
|
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" /> |
||||
|
</div> |
||||
|
<!-- End of Logo --> |
||||
|
<div class="col-lg-12"> |
||||
|
<hr |
||||
|
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> |
||||
|
<!-- End of Footer Section --> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- END OF FOOTER --> |
||||
|
|
||||
|
</div> |
@ -0,0 +1,75 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<record id="custom_clearance_tree_view" model="ir.ui.view"> |
||||
|
<field name="name">Custom Clearance</field> |
||||
|
<field name="model">custom.clearance</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="freight_id"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="custom_clearance_form_view" model="ir.ui.view"> |
||||
|
<field name="name">Custom Clearance</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" states="draft"/> |
||||
|
<button name="action_revision" string="Revision" type="object" class="oe_highlight" states="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="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"/> |
||||
|
</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"> |
||||
|
<tree string="Order Lines" editable="bottom"> |
||||
|
<field name="name"/> |
||||
|
<field name="document"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</page> |
||||
|
</notebook> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_custom_clearance" 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">tree,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new custom clearance |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="menu_custom" name="Custom" parent="menu_freight_root" sequence="2"/> |
||||
|
<menuitem id="menu_custom_clearance" name="Custom Clearance" parent="menu_custom" sequence="2" action="action_custom_clearance"/> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,122 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
|
||||
|
<record id="freight_container_tree_view" model="ir.ui.view"> |
||||
|
<field name="name">Container</field> |
||||
|
<field name="model">freight.container</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="active" widget="boolean_toggle"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_container_form_view" model="ir.ui.view"> |
||||
|
<field name="name">Container</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="active" widget="boolean_toggle"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<record id="view_freight_container_filter" model="ir.ui.view"> |
||||
|
<field name="name">freight.Container.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> |
||||
|
|
||||
|
<record id="action_container_port" 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">tree,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight container |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_service_tree_view" model="ir.ui.view"> |
||||
|
<field name="name">Service</field> |
||||
|
<field name="model">freight.service</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="sale_price"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_Service_form_view" model="ir.ui.view"> |
||||
|
<field name="name">Service</field> |
||||
|
<field name="model">freight.service</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="sale_price"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
<notebook> |
||||
|
<page string="Vendors"> |
||||
|
<field name="line_ids"> |
||||
|
<tree string="Vendors" editable="bottom"> |
||||
|
<field name="partner_id"/> |
||||
|
<field name="sale"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</page> |
||||
|
</notebook> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_service_freight" 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">tree,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight service |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="menu_freight_container" name="Container" parent="menu_configuration" sequence="2" action="action_container_port"/> |
||||
|
<menuitem id="menu_freight_service" name="Services" parent="menu_configuration" sequence="2" action="action_service_freight"/> |
||||
|
|
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,181 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<record id="freight_order_tree_view" model="ir.ui.view"> |
||||
|
<field name="name">Freight Order</field> |
||||
|
<field name="model">freight.order</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="type"/> |
||||
|
<field name="transport_type"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_order_form_view" model="ir.ui.view"> |
||||
|
<field name="name">Freight Order</field> |
||||
|
<field name="model">freight.order</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<header> |
||||
|
<button name="create_custom_clearance" string="Custom Clearance" type="object" class="oe_highlight" |
||||
|
data-hotkey="w" attrs="{'invisible': [('clearance', '=', True)]}"/> |
||||
|
<button name="action_submit" string="Submit" type="object" class="oe_highlight" |
||||
|
data-hotkey="w" states="draft"/> |
||||
|
<button name="action_confirm" string="Confirm" type="object" class="oe_highlight" |
||||
|
data-hotkey="w" states="submit"/> |
||||
|
<button name="create_invoice" string="Invoice" type="object" class="oe_highlight" states="confirm" |
||||
|
data-hotkey="w"/> |
||||
|
<button name="track_order" string="Tracking" type="object" class="oe_highlight" states="confirm,invoice" |
||||
|
data-hotkey="w"/> |
||||
|
<button name="action_done" string="Done" type="object" class="oe_highlight" states="confirm,invoice" |
||||
|
data-hotkey="w"/> |
||||
|
<button name="action_cancel" string="Cancel" type="object" states="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"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="clearance" invisible="True"/> |
||||
|
<field name="type"/> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="land_type" attrs="{'invisible': [('transport_type', '!=', 'land')]}"/> |
||||
|
<field name="water_type" attrs="{'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"> |
||||
|
<tree string="Order Lines" editable="bottom"> |
||||
|
<field name="container_id"/> |
||||
|
<field name="product_id"/> |
||||
|
<field name="billing_type"/> |
||||
|
<field name="pricing_id"/> |
||||
|
<field name="volume" attrs="{'invisible': [('billing_type', '!=', 'volume')]}"/> |
||||
|
<field name="weight" attrs="{'invisible': [('billing_type', '!=', 'weight')]}"/> |
||||
|
<field name="price"/> |
||||
|
<field name="total_price"/> |
||||
|
</tree> |
||||
|
</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"> |
||||
|
<tree string="Routes" editable="bottom"> |
||||
|
<field name="operation_id"/> |
||||
|
<field name="source_loc"/> |
||||
|
<field name="destination_loc"/> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="sale"/> |
||||
|
</tree> |
||||
|
</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"> |
||||
|
<tree string="Services" editable="bottom"> |
||||
|
<field name="partner_id"/> |
||||
|
<field name="service_id"/> |
||||
|
<field name="qty"/> |
||||
|
<field name="sale"/> |
||||
|
<field name="total_sale"/> |
||||
|
</tree> |
||||
|
</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"> |
||||
|
<tree string="Services" editable="bottom" create="0"> |
||||
|
<field name="source_loc"/> |
||||
|
<field name="destination_loc"/> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="date"/> |
||||
|
<field name="type"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</page> |
||||
|
</notebook> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_freight_order" 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">tree,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight order |
||||
|
</p> |
||||
|
</field> |
||||
|
|
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="menu_freight_root" name="Freight Management" sequence="4" /> |
||||
|
<menuitem id="menu_freight_order" name="Shipping" parent="menu_freight_root" sequence="2" action="action_freight_order"/> |
||||
|
|
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,159 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
|
||||
|
<record id="freight_port_tree_view" model="ir.ui.view"> |
||||
|
<field name="name">Port</field> |
||||
|
<field name="model">freight.port</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="active" widget="boolean_toggle"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_port_form_view" model="ir.ui.view"> |
||||
|
<field name="name">Port</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" /> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="view_freight_port_filter" model="ir.ui.view"> |
||||
|
<field name="name">freight.port.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> |
||||
|
|
||||
|
<record id="action_freight_port" 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">tree,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight port |
||||
|
</p> |
||||
|
</field> |
||||
|
|
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_price_tree_view" model="ir.ui.view"> |
||||
|
<field name="name">Price</field> |
||||
|
<field name="model">freight.price</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="volume"/> |
||||
|
<field name="weight"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_price_form_view" model="ir.ui.view"> |
||||
|
<field name="name">Price</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"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_freight_price" 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">tree,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight price |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_routes_tree_view" model="ir.ui.view"> |
||||
|
<field name="name">Routes</field> |
||||
|
<field name="model">freight.routes</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="freight_routes_form_view" model="ir.ui.view"> |
||||
|
<field name="name">Routes</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"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<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">tree,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Define a new freight routes |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="menu_configuration" name="Configuration" sequence="4" parent="menu_freight_root" /> |
||||
|
<menuitem id="menu_freight_port" name="Ports" parent="menu_configuration" sequence="2" action="action_freight_port"/> |
||||
|
<menuitem id="menu_freight_price" name="Pricing List" parent="menu_configuration" sequence="2" action="action_freight_price"/> |
||||
|
<menuitem id="menu_freight_routes" name="Route Operations" parent="menu_configuration" sequence="2" action="action_freight_routes"/> |
||||
|
|
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,50 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<record id="view_freight_order_track" model="ir.ui.view"> |
||||
|
<field name="name">Track</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"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="transport_type"/> |
||||
|
<field name="source_loc"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
<footer> |
||||
|
<button name="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> |
||||
|
|
||||
|
<record id="action_order_track" 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> |
||||
|
|
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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_revision |
@ -0,0 +1,89 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Megha K (<https://www.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 werkzeug import urls |
||||
|
from odoo import models, fields, _ |
||||
|
|
||||
|
|
||||
|
class CustomClearanceRevisionReason(models.TransientModel): |
||||
|
_name = 'custom.clearance.revision.wizard' |
||||
|
_description = 'Custom Clearance Revision' |
||||
|
|
||||
|
name = fields.Text('Reason', required=True) |
||||
|
custom_id = fields.Many2one('custom.clearance') |
||||
|
text = fields.Char() |
||||
|
|
||||
|
def create_revision(self): |
||||
|
"""create revision""" |
||||
|
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, |
||||
|
'web#id=%(id)s&model=custom.clearance&view_type=form' % {'id': self.custom_id.id}) |
||||
|
Urls_ = urls.url_join(base_url, |
||||
|
'web#id=%(id)s&model=freight.order&view_type=form' % {'id': self.custom_id.freight_id.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 Clerance 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({ |
||||
|
'clearance_id': self.custom_id.id, |
||||
|
'reason': self.name, |
||||
|
'name': 'RE: ' + self.custom_id.name |
||||
|
}) |
@ -0,0 +1,37 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<record id="custom_clearance_revision_form_view" model="ir.ui.view"> |
||||
|
<field name="name">Custom Clearance Revision</field> |
||||
|
<field name="model">custom.clearance.revision.wizard</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
<field name="custom_id" invisible="1"/> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
|
||||
|
<footer> |
||||
|
<button string="Save" name="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> |
||||
|
|
||||
|
<record id="action_custom_clearance_revision_wizard" 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.wizard</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> |
||||
|
</data> |
||||
|
</odoo> |