@ -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> |