diff --git a/batch_delivery_tracking/README.rst b/batch_delivery_tracking/README.rst new file mode 100755 index 000000000..b87e9d867 --- /dev/null +++ b/batch_delivery_tracking/README.rst @@ -0,0 +1,47 @@ +.. image:: https://img.shields.io/badge/licence-OPL--1-red.svg + :target: https://www.odoo.com/documentation/17.0/legal/licenses.html#odoo-apps + :alt: License: OPL-1 + +Batch Delivery Tracking +======================= +This module helps to track multiple delivery orders in batch transfer, +and get them same tracking orders. + +Configuration +============ +No additional configurations needed + +License +------- +Odoo Proprietary License v1.0 (OPL-1). +(https://www.odoo.com/documentation/17.0/legal/licenses.html#odoo-apps) + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +Developer: (V17) Ayana KP, +Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/batch_delivery_tracking/__init__.py b/batch_delivery_tracking/__init__.py new file mode 100644 index 000000000..717981505 --- /dev/null +++ b/batch_delivery_tracking/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ayana kp(odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import models diff --git a/batch_delivery_tracking/__manifest__.py b/batch_delivery_tracking/__manifest__.py new file mode 100644 index 000000000..f16ce0d17 --- /dev/null +++ b/batch_delivery_tracking/__manifest__.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ayana kp(odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +{ + 'name': 'Batch Delivery Tracking', + 'version': '17.0.1.0.0', + 'category': 'Inventory', + 'summary': """It Helps to Track Multiple Delivery Orders in a Batch Transfer""", + 'description': """ This module helps to track multiple delivery orders in + batch transfer, and get them same tracking orders. """, + 'author': 'Cybrosys Techno solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'depends': ['stock_delivery', 'stock_picking_batch', 'delivery_fedex'], + 'images': ['static/description/banner.jpg'], + 'license': 'OPL-1', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/batch_delivery_tracking/doc/RELEASE_NOTES.md b/batch_delivery_tracking/doc/RELEASE_NOTES.md new file mode 100755 index 000000000..7c16d6c9a --- /dev/null +++ b/batch_delivery_tracking/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 29.05.2024 +#### Version 17.0.1.0.0 +#### ADD +- Initial Commit for Batch Delivery Tracking diff --git a/batch_delivery_tracking/models/__init__.py b/batch_delivery_tracking/models/__init__.py new file mode 100644 index 000000000..e00ed22b8 --- /dev/null +++ b/batch_delivery_tracking/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ayana kp(odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import delivery_carrier +from . import stock_picking diff --git a/batch_delivery_tracking/models/delivery_carrier.py b/batch_delivery_tracking/models/delivery_carrier.py new file mode 100644 index 000000000..ab71a4ff4 --- /dev/null +++ b/batch_delivery_tracking/models/delivery_carrier.py @@ -0,0 +1,211 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ayana kp(odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +import logging +from markupsafe import Markup +from zeep.helpers import serialize_object +from odoo import models, _ +from odoo.exceptions import UserError +from odoo.tools import pdf +from odoo.addons.delivery_fedex.models.fedex_request import FedexRequest, \ + _convert_curr_iso_fdx + +_logger = logging.getLogger(__name__) + + +class DeliveryCarrier(models.Model): + """This class inherits from the base delivery carrier model and + allows for additional customization and functionality to be added + to delivery carriers. """ + _inherit = "delivery.carrier" + + def fedex_send_shipping(self, picking): + """Overriding default fedex integration function to + check with our condition""" + if picking.batch_id and not picking.carrier_tracking_ref: + partner_id = picking.partner_id.id + carrier_id = picking.carrier_id.id + filtered_picking_ids = picking.batch_id.picking_ids.filtered( + lambda + x: x.partner_id.id == partner_id and x.carrier_id.id == carrier_id) + # Now you have filtered_picking_ids with the desired records + if len(filtered_picking_ids) > 1: + response = self._batch_fedex_send_shipping(picking, + filtered_picking_ids) + return response + else: + res = super().fedex_send_shipping(picking) + return res + else: + res = super().fedex_send_shipping(picking) + return res + + def _batch_fedex_send_shipping(self, picking, filtered_picking_ids): + """ Function for batch transfers picking to connect fedex and return + same tracking numbers for all picking with same + carrier id and customer. """ + res = [] + order_currency = picking.sale_id.currency_id or picking.company_id.currency_id + srm = FedexRequest(self.log_xml, request_type="shipping", + prod_environment=self.prod_environment) + superself = self.sudo() + srm.web_authentication_detail(superself.fedex_developer_key, + superself.fedex_developer_password) + srm.client_detail(superself.fedex_account_number, + superself.fedex_meter_number) + srm.transaction_detail(picking.id) + package_type = picking.package_ids and picking.package_ids[ + 0].package_type_id.shipper_package_code or self.fedex_default_package_type_id.shipper_package_code + srm.shipment_request(self.fedex_droppoff_type, self.fedex_service_type, + package_type, self.fedex_weight_unit, + self.fedex_saturday_delivery) + srm.set_currency(_convert_curr_iso_fdx(order_currency.name)) + srm.set_shipper(picking.company_id.partner_id, + picking.picking_type_id.warehouse_id.partner_id) + srm.set_recipient(picking.partner_id) + srm.shipping_charges_payment(superself.fedex_account_number) + srm.shipment_label('COMMON2D', self.fedex_label_file_type, + self.fedex_label_stock_type, + 'TOP_EDGE_OF_TEXT_FIRST', 'SHIPPING_LABEL_FIRST') + order = picking.sale_id + net_weight = 0.0 + if 'INTERNATIONAL' in self.fedex_service_type or self.fedex_service_type == 'FEDEX_REGIONAL_ECONOMY' or ( + picking.partner_id.country_id.code == 'IN' and picking.picking_type_id.warehouse_id.partner_id.country_id.code == 'IN'): + commodities = self._get_commodities_from_stock_move_lines( + picking.move_line_ids) + for commodity in commodities: + srm.commodities(self, commodity, + _convert_curr_iso_fdx(order_currency.name)) + + total_commodities_amount = sum( + c.monetary_value * c.qty for c in commodities) + srm.customs_value(_convert_curr_iso_fdx(order_currency.name), + total_commodities_amount, "NON_DOCUMENTS") + srm.duties_payment(order.warehouse_id.partner_id, + superself.fedex_account_number, + superself.fedex_duty_payment) + send_etd = superself.env['ir.config_parameter'].get_param( + "delivery_fedex.send_etd") + srm.commercial_invoice(self.fedex_document_stock_type, send_etd) + package_count = 1 + packages = [] + package_ids = [] + for pick in filtered_picking_ids: + if not pick.carrier_tracking_ref: + if pick.package_ids not in package_ids: + package_ids.append(pick.package_ids) + converted_weight = self._fedex_convert_weight( + pick.shipping_weight, self.fedex_weight_unit) + package_count += len(pick.package_ids) + package = self._get_packages_from_picking(pick, + self.fedex_default_package_type_id) + packages.append(package) + if isinstance(converted_weight, (int, float)): + net_weight += converted_weight + po_number = order.display_name or False + dept_number = False + if picking.partner_id.country_id.code == 'IN' and picking.picking_type_id.warehouse_id.partner_id.country_id.code == 'IN': + po_number = 'B2B' if picking.partner_id.commercial_partner_id.is_company else 'B2C' + dept_number = 'BILL D/T: SENDER' + master_tracking_id = False + package_labels = [] + carrier_tracking_refs = [] + flattened_packages = [item for sublist in packages for item in sublist] + for sequence, package in enumerate(flattened_packages, start=1): + srm.add_package( + self, + package, + _convert_curr_iso_fdx(package.company_id.currency_id.name), + sequence_number=sequence, + po_number=po_number, + dept_number=dept_number, + reference=picking.display_name, + ) + srm.set_master_package(net_weight, len(flattened_packages), + master_tracking_id=master_tracking_id) + self._fedex_update_srm(srm, 'ship', picking=picking) + request = serialize_object( + dict(WebAuthenticationDetail=srm.WebAuthenticationDetail, + ClientDetail=srm.ClientDetail, + TransactionDetail=srm.TransactionDetail, + VersionId=srm.VersionId, + RequestedShipment=srm.RequestedShipment)) + self._fedex_add_extra_data_to_request(request, 'ship') + response = srm.process_shipment(request) + warnings = response.get('warnings_message') + if warnings: + _logger.info(warnings) + if response.get('errors_message'): + raise UserError(response['errors_message']) + package_name = package.name or 'package-' + str(sequence) + package_labels.append((package_name, srm.get_label())) + carrier_tracking_refs.append(response['tracking_number']) + if sequence == 1: + master_tracking_id = response['master_tracking_id'] + # Last package + if sequence == len(flattened_packages): + carrier_price = self._get_request_price(response['price'], + order, + order_currency) + if self.fedex_label_file_type != 'PDF': + attachments = [('%s-%s.%s' % ( + self._get_delivery_label_prefix(), pl[0], + self.fedex_label_file_type), pl[1]) for pl in + package_labels] + if self.fedex_label_file_type == 'PDF': + attachments = [ + ('%s.pdf' % (self._get_delivery_label_prefix()), + pdf.merge_pdf( + [pl[1] for pl in package_labels]))] + num = 0 + for pick in filtered_picking_ids: + if not pick.carrier_tracking_ref and num < len( + carrier_tracking_refs): + logmessage = Markup( + _("Shipment created into Fedex
" + "Tracking Numbers: %s
" + "Packages: %s")) % ( + carrier_tracking_refs[num], + pick.package_ids.name) + num += 1 + pick.message_post(body=logmessage, + attachments=attachments) + shipping_data = {'exact_price': carrier_price, + 'tracking_number': ','.join( + carrier_tracking_refs)} + res = res + [shipping_data] + logmessage = Markup(_("Shipment created into Fedex
" + "Tracking Numbers: %s
" + "Packages: %s")) % ( + ','.join(carrier_tracking_refs), + ','.join([pl[0] for pl in package_labels])) + if self.fedex_label_file_type != 'PDF': + attachments = [('%s-%s.%s' % ( + self._get_delivery_label_prefix(), pl[0], + self.fedex_label_file_type), pl[1]) for pl in + package_labels] + if self.fedex_label_file_type == 'PDF': + attachments = [('%s.pdf' % ( + self._get_delivery_label_prefix()), pdf.merge_pdf( + [pl[1] for pl in package_labels]))] + picking.batch_id.message_post(body=logmessage, + attachments=attachments) + return res diff --git a/batch_delivery_tracking/models/stock_picking.py b/batch_delivery_tracking/models/stock_picking.py new file mode 100644 index 000000000..29e07d197 --- /dev/null +++ b/batch_delivery_tracking/models/stock_picking.py @@ -0,0 +1,140 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ayana kp(odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from markupsafe import Markup +from odoo import models, fields, _ + + +class StockPicking(models.Model): + """This class inherits from the base stock picking model in Odoo and allows + for additional customization and functionality to be added + to picking operations. """ + _inherit = "stock.picking" + + is_batch = fields.Boolean( + "Is Batch", store=True, + default=False, help="Is batch processing or not") + + def send_to_shipper(self): + """ Overriding function for adding to check condition + for batch transfer """ + self.ensure_one() + partner_id = self.partner_id.id + carrier_id = self.carrier_id.id + filtered_picking_ids = self.batch_id.picking_ids.filtered( + lambda + x: x.partner_id.id == partner_id and x.carrier_id.id == carrier_id) + if self.batch_id and len(filtered_picking_ids) > 1: + self._batch_send_to_shipper() + else: + res = self.carrier_id.send_shipping(self)[0] + if self.carrier_id.free_over and self.sale_id: + amount_without_delivery = self.sale_id._compute_amount_total_without_delivery() + if self.carrier_id._compute_currency(self.sale_id, + amount_without_delivery, + 'pricelist_to_company') >= self.carrier_id.amount: + res['exact_price'] = 0.0 + self.carrier_price = res['exact_price'] * ( + 1.0 + (self.carrier_id.margin / 100.0)) + if res['tracking_number']: + related_pickings = self.env[ + 'stock.picking'] if self.carrier_tracking_ref and res[ + 'tracking_number'] in self.carrier_tracking_ref else self + accessed_moves = previous_moves = self.move_ids.move_orig_ids + while previous_moves: + related_pickings |= previous_moves.picking_id + previous_moves = previous_moves.move_orig_ids - accessed_moves + accessed_moves |= previous_moves + accessed_moves = next_moves = self.move_ids.move_dest_ids + while next_moves: + related_pickings |= next_moves.picking_id + next_moves = next_moves.move_dest_ids - accessed_moves + accessed_moves |= next_moves + without_tracking = related_pickings.filtered( + lambda p: not p.carrier_tracking_ref) + without_tracking.carrier_tracking_ref = res['tracking_number'] + for p in related_pickings - without_tracking: + p.carrier_tracking_ref += "," + res['tracking_number'] + order_currency = self.sale_id.currency_id or self.company_id.currency_id + msg = _( + "Shipment sent to carrier %(carrier_name)s for shipping with tracking number %(ref)s", + carrier_name=self.carrier_id.name, + ref=self.carrier_tracking_ref) + \ + Markup("
") + \ + _("Cost: %(price).2f %(currency)s", + price=self.carrier_price, + currency=order_currency.name) + self.message_post(body=msg) + self._add_delivery_cost_to_so() + + def _batch_send_to_shipper(self): + """ Method to batch send shipments to the shipper. + This method is responsible for sending shipments to the designated + carrier. It calculates the shipping cost, updates tracking + information, and posts messages related to the shipment. """ + partner_id = self.partner_id.id + carrier_id = self.carrier_id.id + filtered_picking_ids = self.batch_id.picking_ids.filtered( + lambda + x: x.partner_id.id == partner_id and x.carrier_id.id == carrier_id) + res = self.carrier_id.send_shipping(self)[0] + if self.carrier_id.free_over and self.sale_id: + amount_without_delivery = self.sale_id._compute_amount_total_without_delivery() + if self.carrier_id._compute_currency(self.sale_id, + amount_without_delivery, + 'pricelist_to_company') >= self.carrier_id.amount: + res['exact_price'] = 0.0 + self.carrier_price = res['exact_price'] * ( + 1.0 + (self.carrier_id.margin / 100.0)) + if res['tracking_number']: + related_pickings = self.env[ + 'stock.picking'] if self.carrier_tracking_ref and res[ + 'tracking_number'] in self.carrier_tracking_ref else self + accessed_moves = previous_moves = self.move_ids.move_orig_ids + while previous_moves: + related_pickings |= previous_moves.picking_id + previous_moves = previous_moves.move_orig_ids - accessed_moves + accessed_moves |= previous_moves + accessed_moves = next_moves = self.move_ids.move_dest_ids + while next_moves: + related_pickings |= next_moves.picking_id + next_moves = next_moves.move_dest_ids - accessed_moves + accessed_moves |= next_moves + num = 0 + for pick in filtered_picking_ids: + if not pick.carrier_tracking_ref: + tracking_numbers = res['tracking_number'].split(',') + if num < len(tracking_numbers): + pick.carrier_tracking_ref = tracking_numbers[num] + num += 1 + else: + pick.carrier_tracking_ref = res['tracking_number'] + order_currency = pick.sale_id.currency_id or pick.company_id.currency_id + msg = _( + "Shipment sent to carrier %(carrier_name)s for shipping with tracking number %(ref)s", + carrier_name=pick.carrier_id.name, + ref=pick.carrier_tracking_ref) + \ + Markup("
") + \ + _("Cost: %(price).2f %(currency)s", + price=pick.carrier_price, + currency=order_currency.name) + pick.message_post(body=msg) + pick._add_delivery_cost_to_so() diff --git a/batch_delivery_tracking/static/description/assets/icons/capture (1).png b/batch_delivery_tracking/static/description/assets/icons/capture (1).png new file mode 100644 index 000000000..8824deafc Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/capture (1).png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/check.png b/batch_delivery_tracking/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/check.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/chevron.png b/batch_delivery_tracking/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/chevron.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/cogs.png b/batch_delivery_tracking/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/cogs.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/consultation.png b/batch_delivery_tracking/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/consultation.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/ecom-black.png b/batch_delivery_tracking/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/ecom-black.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/education-black.png b/batch_delivery_tracking/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/education-black.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/hotel-black.png b/batch_delivery_tracking/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/hotel-black.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/img.png b/batch_delivery_tracking/static/description/assets/icons/img.png new file mode 100644 index 000000000..70197f477 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/img.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/license.png b/batch_delivery_tracking/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/license.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/lifebuoy.png b/batch_delivery_tracking/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/lifebuoy.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/manufacturing-black.png b/batch_delivery_tracking/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/manufacturing-black.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/photo-capture.png b/batch_delivery_tracking/static/description/assets/icons/photo-capture.png new file mode 100644 index 000000000..06c111758 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/photo-capture.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/pos-black.png b/batch_delivery_tracking/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/pos-black.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/puzzle.png b/batch_delivery_tracking/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/puzzle.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/restaurant-black.png b/batch_delivery_tracking/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/restaurant-black.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/service-black.png b/batch_delivery_tracking/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/service-black.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/trading-black.png b/batch_delivery_tracking/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/trading-black.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/training.png b/batch_delivery_tracking/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/training.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/update.png b/batch_delivery_tracking/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/update.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/user.png b/batch_delivery_tracking/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/user.png differ diff --git a/batch_delivery_tracking/static/description/assets/icons/wrench.png b/batch_delivery_tracking/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/icons/wrench.png differ diff --git a/batch_delivery_tracking/static/description/assets/misc/Cybrosys R.png b/batch_delivery_tracking/static/description/assets/misc/Cybrosys R.png new file mode 100644 index 000000000..da4058087 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/misc/Cybrosys R.png differ diff --git a/batch_delivery_tracking/static/description/assets/misc/email.svg b/batch_delivery_tracking/static/description/assets/misc/email.svg new file mode 100644 index 000000000..15291cdc3 --- /dev/null +++ b/batch_delivery_tracking/static/description/assets/misc/email.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/batch_delivery_tracking/static/description/assets/misc/phone.svg b/batch_delivery_tracking/static/description/assets/misc/phone.svg new file mode 100644 index 000000000..b7bd7f251 --- /dev/null +++ b/batch_delivery_tracking/static/description/assets/misc/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/batch_delivery_tracking/static/description/assets/misc/star (1) 2.svg b/batch_delivery_tracking/static/description/assets/misc/star (1) 2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/batch_delivery_tracking/static/description/assets/misc/star (1) 2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/batch_delivery_tracking/static/description/assets/misc/support (1) 1.svg b/batch_delivery_tracking/static/description/assets/misc/support (1) 1.svg new file mode 100644 index 000000000..7d37a8f30 --- /dev/null +++ b/batch_delivery_tracking/static/description/assets/misc/support (1) 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/batch_delivery_tracking/static/description/assets/misc/support-email.svg b/batch_delivery_tracking/static/description/assets/misc/support-email.svg new file mode 100644 index 000000000..eb70370d6 --- /dev/null +++ b/batch_delivery_tracking/static/description/assets/misc/support-email.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/batch_delivery_tracking/static/description/assets/misc/tick-mark.svg b/batch_delivery_tracking/static/description/assets/misc/tick-mark.svg new file mode 100644 index 000000000..2dbb40187 --- /dev/null +++ b/batch_delivery_tracking/static/description/assets/misc/tick-mark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/batch_delivery_tracking/static/description/assets/misc/whatsapp 1.svg b/batch_delivery_tracking/static/description/assets/misc/whatsapp 1.svg new file mode 100644 index 000000000..0bfaf8fc6 --- /dev/null +++ b/batch_delivery_tracking/static/description/assets/misc/whatsapp 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/batch_delivery_tracking/static/description/assets/misc/whatsapp.svg b/batch_delivery_tracking/static/description/assets/misc/whatsapp.svg new file mode 100644 index 000000000..b618aea1d --- /dev/null +++ b/batch_delivery_tracking/static/description/assets/misc/whatsapp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/batch_delivery_tracking/static/description/assets/modules/module_image (1).jpeg b/batch_delivery_tracking/static/description/assets/modules/module_image (1).jpeg new file mode 100644 index 000000000..5ae24843e Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/modules/module_image (1).jpeg differ diff --git a/batch_delivery_tracking/static/description/assets/modules/module_image (1).png b/batch_delivery_tracking/static/description/assets/modules/module_image (1).png new file mode 100644 index 000000000..0dea4f332 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/modules/module_image (1).png differ diff --git a/batch_delivery_tracking/static/description/assets/modules/module_image (2).png b/batch_delivery_tracking/static/description/assets/modules/module_image (2).png new file mode 100644 index 000000000..a5dc79613 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/modules/module_image (2).png differ diff --git a/batch_delivery_tracking/static/description/assets/modules/module_image.jpeg b/batch_delivery_tracking/static/description/assets/modules/module_image.jpeg new file mode 100644 index 000000000..0cbac311c Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/modules/module_image.jpeg differ diff --git a/batch_delivery_tracking/static/description/assets/modules/module_image.png b/batch_delivery_tracking/static/description/assets/modules/module_image.png new file mode 100644 index 000000000..612be4b77 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/modules/module_image.png differ diff --git a/batch_delivery_tracking/static/description/assets/modules/new.png b/batch_delivery_tracking/static/description/assets/modules/new.png new file mode 100644 index 000000000..5004b22f7 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/modules/new.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/0.png b/batch_delivery_tracking/static/description/assets/screenshots/0.png new file mode 100644 index 000000000..f4659fdc1 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/0.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/01.png b/batch_delivery_tracking/static/description/assets/screenshots/01.png new file mode 100644 index 000000000..dea359c6f Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/01.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/1.png b/batch_delivery_tracking/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..7e53f84fd Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/1.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/2.png b/batch_delivery_tracking/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..508fa8705 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/2.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/4.png b/batch_delivery_tracking/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..edcd9f5ea Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/4.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/5.png b/batch_delivery_tracking/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..41f03acd3 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/5.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/6.png b/batch_delivery_tracking/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..ef7797d73 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/6.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/7.png b/batch_delivery_tracking/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..d7496d56f Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/7.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/8.png b/batch_delivery_tracking/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..29a093ce8 Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/8.png differ diff --git a/batch_delivery_tracking/static/description/assets/screenshots/hero-v17.gif b/batch_delivery_tracking/static/description/assets/screenshots/hero-v17.gif new file mode 100644 index 000000000..3a544fd9e Binary files /dev/null and b/batch_delivery_tracking/static/description/assets/screenshots/hero-v17.gif differ diff --git a/batch_delivery_tracking/static/description/banner.jpg b/batch_delivery_tracking/static/description/banner.jpg new file mode 100644 index 000000000..8c1d43171 Binary files /dev/null and b/batch_delivery_tracking/static/description/banner.jpg differ diff --git a/batch_delivery_tracking/static/description/icon.png b/batch_delivery_tracking/static/description/icon.png new file mode 100644 index 000000000..95de4c384 Binary files /dev/null and b/batch_delivery_tracking/static/description/icon.png differ diff --git a/batch_delivery_tracking/static/description/index.html b/batch_delivery_tracking/static/description/index.html new file mode 100644 index 000000000..9095c8153 --- /dev/null +++ b/batch_delivery_tracking/static/description/index.html @@ -0,0 +1,810 @@ + + + + + + Odoo App 3 Index + + + + + + + + +
+
+
+
+
+ +
+
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+
+
+
+

+ Batch Delivery Tracking

+

+ Track Multiple Delivery Orders in a Batch Transfer. +

+
+ +
+
+
+
+
+

+ Key Highlights +

+
+
+
+
+
+ +
+
+

+ Track Batch Transfer Delivery Orders.

+

Track Multiple + Delivery Orders in a Batch Transfer. +

+
+
+
+
+
+
+ +
+
+

+ One Tracking reference for Multiple Delivery + orders.

+

Generates one + Tracking reference for delivery orders with same + customer and carrier. +

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

+ Enable The packages in configuration + settings.

+
+
+
+
+
+
+ +
+
+

+ Create a Batch Transfer.

+
+
+
+
+
+
+ +
+
+

+ Add transfers to batch.

+
+
+
+
+
+
+ +
+
+

+ If carrier is Fedex US or Fedex International, and they + have same contact address we can create a + delivery of these transfers in a single + picking and create a single tracking + number.

+
+
+
+
+
+
+ +
+
+

+ If we want to send packages, click on Put in + Pack button.

+
+
+
+
+
+
+ +
+
+

+ Autofill destination packages in transfers, + After that click on Validate button.

+
+
+
+
+
+
+ +
+
+

+ Gives information related to the shipping + and tracking numbers are shown in batch + transfer chatter.

+
+
+
+
+
+
+ +
+
+

+ All transfers with same contact address and + carrier as Fedex US or Fedex International, have same tracking + number.

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

+ After confirming the Sale Order, Delivery + will be created for the Recipients added in + each Sale Order Line.

+
+
+
+
+
+
+ +
+
+

+ Clicking on the Delivery Smart button we can + see the Delivery Status.

+
+
+
+
+
+
+
    +
  • + Track Multiple + Delivery Orders in a Batch Transfer. +
  • +
  • + Generates one + Tracking reference for delivery orders with same + customer and carrier. +
  • +
+
+
+
+
+
+
Version + 17.0.1.0.0|Released on:19th March 2024 +
+

+ + Initial Commit for Batch Delivery Tracking.

+
+
+
+
+
+
+
+

+ Related Products

+
+
+ + +
+
+

+ Our Services

+ +
+
+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Customization

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Implementation

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Support

+
+
+
+
+
+
+ service-icon +
+
+

Hire + Odoo Developer

+
+
+
+
+ +
+
+ service-icon +
+
+

Odoo + Integration

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Migration

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Consultancy

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Implementation

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Licensing Consultancy

+
+
+
+
+
+
+

+ Our Industries

+ +
+
+
+
+
+
+ +

Trading

+

Easily procure and sell your products

+
+
+
+
+ +

POS

+

Easy configuration and convivial experience

+
+
+
+
+ +

+ Education

+

A platform for educational management

+
+
+
+
+ +

+ Manufacturing

+

Plan, track and schedule your operations

+
+
+
+
+ +

E-commerce & + Website

+

Mobile friendly, awe-inspiring product pages

+
+
+
+
+ +

Service + Management

+

Keep track of services and invoice

+
+
+
+
+ +

+ Restaurant

+

Run your bar or restaurant methodically

+
+
+
+
+ +

Hotel + Management

+

An all-inclusive hotel management application

+
+
+
+
+
+
+

+ Support

+
+
+
+
+
+
+
+ +
+ Need + Help? +

Got + questions or need help? Get in touch.

+
odoo@cybrosys.com +
+
+
+
+
+
+
+
+ +
+ WhatsApp +

Say hi to + us on WhatsApp!

+
+91 + 99456767686 +
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file