@ -0,0 +1,42 @@ |
|||
Shipstation Odoo connector |
|||
========================== |
|||
* Shipstation odoo connector module for Odoo 14 community editions |
|||
|
|||
Installation |
|||
============ |
|||
- www.odoo.com/documentation/14.0/setup/install.html |
|||
- Install our custom addon |
|||
|
|||
License |
|||
------- |
|||
General Public License, Version 3 (LGPL v3). |
|||
(https://www.odoo.com/documentation/user/14.0/legal/licenses/licenses.html) |
|||
|
|||
Company |
|||
------- |
|||
* 'Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
* Developer: |
|||
(v14) Dino @ Cybrosys |
|||
(v15) Viswanth @ Cybrosys |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@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 |
|||
========== |
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit https://www.cybrosys.com |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
|||
|
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# 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 |
@ -0,0 +1,53 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# 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': 'ShipStation Odoo Connector', |
|||
'version': '15.0.1.0.0', |
|||
'summary': 'Integrate and Manage ShipStation Operations with Odoo', |
|||
'description': 'Integrate and Manage ShipStation Operations with Odoo', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'depends': ['sale', 'account', 'stock', 'delivery'], |
|||
'data': [ |
|||
'security/security.xml', |
|||
'security/ir.model.access.csv', |
|||
'views/api_credential.xml', |
|||
'views/store.xml', |
|||
'views/services.xml', |
|||
'views/delivery_shipstation.xml', |
|||
'views/packages_shipstation.xml', |
|||
'views/delivery_carrier_view.xml', |
|||
'views/sale_orders.xml', |
|||
'views/shipstation_actions.xml', |
|||
'views/stock_picking.xml', |
|||
], |
|||
'images': ['static/description/banner.png'], |
|||
'license': 'OPL-1', |
|||
'price': 49, |
|||
'currency': 'EUR', |
|||
'installable': True, |
|||
'application': False, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,7 @@ |
|||
## Module <shipstation_odoo_connector> |
|||
|
|||
#### 04.11.2022 |
|||
#### Version 15.0.1.0.0 |
|||
##### ADD |
|||
|
|||
- Initial Commit for shipstation_odoo_connector |
@ -0,0 +1,28 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# 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 shipstation_api |
|||
from . import store |
|||
from . import services |
|||
from . import delivery_method |
|||
from . import packages_shipstation |
|||
from . import stock_picking |
@ -0,0 +1,38 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
|||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
|||
# DEALINGS IN THE SOFTWARE. |
|||
# |
|||
######################################################################################## |
|||
|
|||
from odoo import fields, models, api, _ |
|||
|
|||
|
|||
class DeliveryMethod(models.Model): |
|||
_name = 'shipstation.delivery' |
|||
_description = "Shipstation Delivery" |
|||
|
|||
name = fields.Char(string="Name") |
|||
code = fields.Char(string="Code") |
|||
account_number = fields.Char(string="Account Number") |
|||
requires_funded_account = fields.Boolean(string="Requires Funded Account") |
|||
balance = fields.Char(string="Balance") |
|||
nick_name = fields.Char(string="Nickname") |
|||
shipping_providerid = fields.Char(string="Shipping Provider") |
|||
primary = fields.Boolean(default=False, string="Primary") |
|||
company_id = fields.Many2one('res.company', required=True, default=lambda self: self.env.company,string="Company id") |
@ -0,0 +1,34 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
|||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
|||
# DEALINGS IN THE SOFTWARE. |
|||
# |
|||
######################################################################################## |
|||
|
|||
from odoo import fields, models, api, _ |
|||
|
|||
|
|||
class ShipstationPackages(models.Model): |
|||
_name = 'shipstation.packages' |
|||
_description = "Shipstation Packages" |
|||
|
|||
carrier_code = fields.Char(string='Carrier Code') |
|||
code = fields.Char(string='Code') |
|||
name = fields.Char(string='Name') |
|||
domestic = fields.Boolean(string="Domestic", default=False) |
|||
international = fields.Boolean(string="International", default=False) |
@ -0,0 +1,39 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
|||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
|||
# DEALINGS IN THE SOFTWARE. |
|||
# |
|||
######################################################################################## |
|||
|
|||
from odoo import fields, models, api, _ |
|||
|
|||
try: |
|||
from base64 import encodestring |
|||
except ImportError: |
|||
from base64 import encodebytes as encodestring |
|||
|
|||
|
|||
class ShipstationService(models.Model): |
|||
_name = 'shipstation.service' |
|||
_description = "Shipstation Service" |
|||
|
|||
carrier_code = fields.Char(string="CarrierCode") |
|||
code = fields.Char(string="Code") |
|||
name = fields.Char(string="Name") |
|||
domestic = fields.Boolean(default=False, string="Domestic") |
|||
international = fields.Boolean(default=False, string="International") |
@ -0,0 +1,439 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# 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 json |
|||
from odoo import fields, models, api, _ |
|||
from odoo.http import request |
|||
from odoo.exceptions import UserError |
|||
import requests |
|||
import base64 |
|||
|
|||
try: |
|||
from base64 import encodestring |
|||
except ImportError: |
|||
from base64 import encodebytes as encodestring |
|||
|
|||
|
|||
class DeliveryCarrier(models.Model): |
|||
_inherit = 'delivery.carrier' |
|||
|
|||
delivery_type = fields.Selection( |
|||
selection_add=[('shipstation', 'ShipStation')], |
|||
ondelete={'shipstation': 'set ' |
|||
'default'}) |
|||
|
|||
@api.onchange('shipstation_carrier') |
|||
def _onchange_shipstaion_carrier(self): |
|||
service_object = self.env['shipstation.service'].search( |
|||
[('carrier_code', '=', self. |
|||
shipstation_carrier.code)]) |
|||
service_list = [] |
|||
for data in service_object: |
|||
service_list.append(data.id) |
|||
package_object = self.env['shipstation.packages'].search( |
|||
[('carrier_code', '=', self. |
|||
shipstation_carrier.code)]) |
|||
package_list = [] |
|||
for data in package_object: |
|||
package_list.append(data.id) |
|||
res = {} |
|||
res['domain'] = {'shipstation_service': [('id', 'in', service_list)], |
|||
'shipstation_package': [('id', 'in', package_list)]} |
|||
return res |
|||
|
|||
store = fields.Many2one('shipstation.store', string='Store',) |
|||
shipstation_carrier = fields.Many2one('shipstation.delivery', |
|||
string='Shipstation Carrier') |
|||
shipstation_service = fields.Many2one('shipstation.service', |
|||
string='Shipstation Delivery ' |
|||
'Carrier Service') |
|||
shipstation_package = fields.Many2one('shipstation.packages', |
|||
string='Shipstation Package') |
|||
|
|||
|
|||
class ShipStationApi(models.Model): |
|||
_name = 'shipstation.api' |
|||
_description = "Shipstation Api" |
|||
_rec_name = 'host' |
|||
|
|||
host = fields.Char(string="Host", help="Provide the api url",required=True) |
|||
username = fields.Char(string="Username", help="Provide the Shipstation API Key",required=True) |
|||
password = fields.Char(string="Password", help="Provide the Shipstation API Secret",required=True) |
|||
activate = fields.Boolean(string="Activate", default=False, |
|||
help="Make this credential active.Please activate only one credential ata time") |
|||
|
|||
def get_carriers_service(self): |
|||
"""This function will create shipstation store,packages and other |
|||
information form shipstation""" |
|||
|
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
self.username, self.password)).encode()).decode().replace('\n', '') |
|||
url = self.host + '/carriers' |
|||
headers = { |
|||
'Authorization': "Basic " + base64string |
|||
} |
|||
carriers = requests.get(url, headers=headers) |
|||
for rec in carriers.json(): |
|||
# print (rec) |
|||
product = self.env['product.product'].search( |
|||
[('name', '=', 'ShipstationShipping')]) |
|||
if not product: |
|||
product = self.env['product.product'].create({ |
|||
'name': 'ShipstationShipping', |
|||
'type': 'service', |
|||
'lst_price': 0.0, |
|||
}) |
|||
add_carriers = self.env['shipstation.delivery'].search([ |
|||
('shipping_providerid', '=', rec.get('shippingProviderId'))]) |
|||
if not add_carriers: |
|||
add_carriers = self.env['shipstation.delivery'].create({ |
|||
'name': rec.get('name'), |
|||
'code': rec.get('code'), |
|||
'account_number': rec.get('accountNumber') or False, |
|||
'requires_funded_account': rec.get( |
|||
'requiresFundedAccount') or False, |
|||
'balance': rec.get('balance'), |
|||
'nick_name': rec.get('nickname'), |
|||
'shipping_providerid': rec.get('shippingProviderId'), |
|||
'primary': rec.get('primary') |
|||
}) |
|||
|
|||
url = self.host + '/carriers/listservices?carrierCode=' \ |
|||
+ add_carriers.code |
|||
headers = { |
|||
'Authorization': "Basic " + base64string |
|||
} |
|||
services = requests.get(url, headers=headers) |
|||
for i in services.json(): |
|||
services = self.env['shipstation.service'].search \ |
|||
([('carrier_code', '=', i.get('carrier_code')) |
|||
and ('code', '=', i.get('code'))]) |
|||
if not services: |
|||
services = self.env['shipstation.service'].create({ |
|||
'carrier_code': i.get('carrierCode'), |
|||
'code': i.get('code'), |
|||
'name': i.get('name'), |
|||
'domestic': i.get('domestic'), |
|||
'international': i.get('international') |
|||
}) |
|||
url = self.host + '/carriers/listpackages?carrierCode=' \ |
|||
+ add_carriers.code |
|||
headers = { |
|||
'Authorization': "Basic " + base64string |
|||
} |
|||
packages = requests.get(url, headers=headers) |
|||
for p in packages.json(): |
|||
package = self.env['shipstation.packages'].search \ |
|||
([('carrier_code', '=', p.get('carrierCode')) |
|||
and ('code', '=', p.get('code') |
|||
and ('name', '=', p.get('name')))]) |
|||
if not package: |
|||
package = self.env['shipstation.packages'].create({ |
|||
'carrier_code': p.get('carrierCode'), |
|||
'code': p.get('code'), |
|||
'name': p.get('name'), |
|||
'domestic': p.get('domestic'), |
|||
'international': p.get('international') |
|||
}) |
|||
|
|||
url = self.host + '/stores' |
|||
headers = { |
|||
'Authorization': "Basic " + base64string |
|||
} |
|||
stores = requests.get(url, headers=headers) |
|||
for rec in stores.json(): |
|||
store = self.env['shipstation.store'].search \ |
|||
([('store_id', '=', rec.get('storeId')) and |
|||
('store_name', '=', rec.get('storeName'))]) |
|||
if not store: |
|||
store = self.env['shipstation.store'].create({ |
|||
'store_id': rec.get('storeId'), |
|||
'store_name': rec.get('storeName'), |
|||
'marketplace_name': rec.get('marketplaceName'), |
|||
'account_number': rec.get('accountName'), |
|||
'email': rec.get('email'), |
|||
'company_name': rec.get('companyName'), |
|||
'phone': rec.get('phone'), |
|||
'website': rec.get('website'), |
|||
'create_date': rec.get('createDate'), |
|||
'modified_date': rec.get('modifyDate') |
|||
}) |
|||
|
|||
|
|||
class ChooseDeliveryCarrier(models.TransientModel): |
|||
_inherit = 'choose.delivery.carrier' |
|||
|
|||
def _get_shipment_rate(self): |
|||
"""Calculating the shipping rate""" |
|||
vals = self.carrier_id.rate_shipment(self.order_id) |
|||
if vals.get('success'): |
|||
self.delivery_message = vals.get('warning_message', False) |
|||
self.delivery_price = vals['price'] |
|||
self.display_price = vals['price'] |
|||
return {} |
|||
return {'error_message': vals['error_message']} |
|||
|
|||
|
|||
class DeliveryCarrier(models.Model): |
|||
_inherit = ['delivery.carrier'] |
|||
_primary_email = ['email_from'] |
|||
|
|||
code = fields.Char(string="Code") |
|||
|
|||
def send_shipping(self, pickings): |
|||
self.ensure_one() |
|||
if hasattr(self, '%s_send_shipping' % self.delivery_type): |
|||
return getattr(self, '%s_send_shipping' % self.delivery_type)( |
|||
pickings) |
|||
|
|||
@api.model |
|||
def create_oredr(self, pickings): |
|||
"""Creating order to shipstation""" |
|||
credential = self.env['shipstation.api'].search( |
|||
[('activate', '=', True)]) |
|||
for rec in credential: |
|||
|
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
rec.username, rec.password)).encode()).decode().replace('\n', |
|||
'') |
|||
if not pickings.shipstation_order_id or pickings.shipstation_shipping_cancel: |
|||
|
|||
url = rec.host + '/orders/createorder' |
|||
else: |
|||
url = rec.host + '/orders/' + str(pickings.shipstation_order_id) |
|||
headers = { |
|||
'Host': 'ssapi.shipstation.com', |
|||
'Authorization': "Basic " + base64string, |
|||
'Content-Type': 'application/json' |
|||
} |
|||
oredrNumber = pickings.origin |
|||
sale_oredr = self.env['sale.order'].search( |
|||
[('name', '=', pickings.origin)]) |
|||
oredrDate = sale_oredr.date_order |
|||
paymentDate = sale_oredr.date_order |
|||
shipByDate = pickings.scheduled_date |
|||
if pickings.shipstation_shipping_cancel: |
|||
oredrStatus = 'cancelled' |
|||
|
|||
else: |
|||
oredrStatus = 'awaiting_shipment' |
|||
customer_id = sale_oredr.partner_id.id |
|||
customerUsername = sale_oredr.partner_id.name |
|||
billname = sale_oredr.partner_id.name |
|||
bill_street1 = sale_oredr.partner_invoice_id.street |
|||
bill_street2 = sale_oredr.partner_invoice_id.street2 or "" |
|||
bill_city = sale_oredr.partner_invoice_id.city |
|||
bill_state = sale_oredr.partner_invoice_id.state_id.name |
|||
bill_postal = sale_oredr.partner_invoice_id.zip |
|||
bil_contry = sale_oredr.partner_invoice_id.country_id.code |
|||
bill_phone = sale_oredr.partner_invoice_id.phone |
|||
shipTo_name = sale_oredr.partner_id.name |
|||
shipTo_street1 = sale_oredr.partner_invoice_id.street |
|||
shipTo_street2 = sale_oredr.partner_invoice_id.street2 or " " |
|||
shipTo_city = sale_oredr.partner_invoice_id.city |
|||
shipTo_state = sale_oredr.partner_invoice_id.state_id.name |
|||
shipTo_postal = sale_oredr.partner_invoice_id.zip |
|||
shipTo_contry = sale_oredr.partner_invoice_id.country_id.code |
|||
|
|||
shipTo_phone = sale_oredr.partner_invoice_id.phone |
|||
items = [] |
|||
for rec in sale_oredr.order_line: |
|||
each = {"sku": rec.product_id.default_code or "null", |
|||
"name": rec.product_id.name, |
|||
"imageUrl": f'{request.httprequest.host_url}' |
|||
f'web/image?model=product.template&id=' |
|||
f'{rec.product_id.id}&field=image_128', |
|||
"weight": { |
|||
"value": (rec.product_id.weight * 2.2046), |
|||
"units": "pounds" |
|||
}, |
|||
"quantity": int(rec.product_uom_qty), |
|||
"unitPrice": rec.price_unit, |
|||
"taxAmount": rec.tax_id.amount, |
|||
"shippingAmount": (rec.price_unit * int( |
|||
rec.product_uom_qty)) + rec.tax_id.amount, |
|||
"productId": rec.product_id.id |
|||
} |
|||
items.append(each) |
|||
items = str(items) |
|||
|
|||
amountPaid = sale_oredr.amount_untaxed |
|||
taxAmount = sale_oredr.amount_tax |
|||
shippingAmount = 0.0 |
|||
customerNotes = sale_oredr.note |
|||
internalNotes = " " |
|||
paymentMethod = "Credit Card" |
|||
dc = self.env['delivery.carrier'].search([('name', '=', |
|||
pickings.carrier_id.name)]) |
|||
requestedShippingService = dc.shipstation_service.name |
|||
carrierCode = dc.shipstation_carrier.code |
|||
serviceCode = dc.shipstation_service.code |
|||
packageCode = dc.shipstation_package.code |
|||
confirmation = "delivery" |
|||
shipDate = pickings.date_done |
|||
weight = "{\n\"value\": %s,\n\"units\":\"%s\"\n }" % ( |
|||
(pickings.shipping_weight * 2.2046), "pounds") |
|||
tag_ids = sale_oredr.tag_ids |
|||
if pickings.shipstation_shipping_cancel and pickings.shipstation_shipping_orderKey: |
|||
|
|||
payload = "{\n \"orderNumber\": \"%s\",\n \"orderKey\":\"%s\",\n \"orderDate\": \"%s\",\n \"paymentDate\": \"%s\",\n \"shipByDate\": \"%s\",\n \"orderStatus\": \"%s\",\n \"customerId\": \"%s\",\n \"customerUsername\": \"%s\",\n \"billTo\": {\n \"name\": \"%s\",\n \"street1\": \"%s\",\n \"street2\": \"%s\",\n \"city\": \"%s\",\n \"state\": \"%s\",\n \"postalCode\": \"%s\",\n \"country\": \"%s\",\n \"phone\": \"%s\" },\n \"shipTo\": {\n \"name\": \"%s\",\n \"street1\": \"%s\",\n \"street2\": \"%s\",\n \"city\": \"%s\",\n \"state\": \"%s\",\n \"postalCode\": \"%s\",\n \"country\":\"%s\",\n \"phone\": \"%s\" },\n \"items\":%s,\n \"amountPaid\": \"%s\",\n \"taxAmount\": \"%s\",\n \"shippingAmount\": \"%s\",\n \"customerNotes\": \"%s\",\n \"internalNotes\": \"%s\",\n \"paymentMethod\": \"%s\",\n \"requestedShippingService\": \"%s\",\n \"carrierCode\": \"%s\",\n \"serviceCode\":\"%s\",\n \"packageCode\": \"%s\",\n \"confirmation\": \"%s\",\n \"shipDate\": \"%s\",\n \"weight\":%s }" % ( |
|||
oredrNumber, pickings.shipstation_shipping_orderKey, |
|||
oredrDate, paymentDate, shipByDate, |
|||
oredrStatus, |
|||
customer_id, customerUsername, billname, bill_street1, |
|||
bill_street2, |
|||
bill_city, bill_state, bill_postal, bil_contry, bill_phone, |
|||
shipTo_name, |
|||
shipTo_street1, shipTo_street2, shipTo_city, shipTo_state, |
|||
shipTo_postal, shipTo_contry, shipTo_phone, items, |
|||
amountPaid, |
|||
taxAmount, |
|||
shippingAmount, customerNotes, internalNotes, paymentMethod, |
|||
requestedShippingService, carrierCode, serviceCode, |
|||
packageCode, |
|||
confirmation, shipDate, weight) |
|||
else: |
|||
payload = "{\n \"orderNumber\": \"%s\",\n \"orderDate\": \"%s\",\n \"paymentDate\": \"%s\",\n \"shipByDate\": \"%s\",\n \"orderStatus\": \"%s\",\n \"customerId\": \"%s\",\n \"customerUsername\": \"%s\",\n \"billTo\": {\n \"name\": \"%s\",\n \"street1\": \"%s\",\n \"street2\": \"%s\",\n \"city\": \"%s\",\n \"state\": \"%s\",\n \"postalCode\": \"%s\",\n \"country\": \"%s\",\n \"phone\": \"%s\" },\n \"shipTo\": {\n \"name\": \"%s\",\n \"street1\": \"%s\",\n \"street2\": \"%s\",\n \"city\": \"%s\",\n \"state\": \"%s\",\n \"postalCode\": \"%s\",\n \"country\":\"%s\",\n \"phone\": \"%s\" },\n \"items\":%s,\n \"amountPaid\": \"%s\",\n \"taxAmount\": \"%s\",\n \"shippingAmount\": \"%s\",\n \"customerNotes\": \"%s\",\n \"internalNotes\": \"%s\",\n \"paymentMethod\": \"%s\",\n \"requestedShippingService\": \"%s\",\n \"carrierCode\": \"%s\",\n \"serviceCode\":\"%s\",\n \"packageCode\": \"%s\",\n \"confirmation\": \"%s\",\n \"shipDate\": \"%s\",\n \"weight\":%s }" % ( |
|||
oredrNumber, oredrDate, paymentDate, shipByDate, |
|||
oredrStatus, |
|||
customer_id, customerUsername, billname, bill_street1, |
|||
bill_street2, |
|||
bill_city, bill_state, bill_postal, bil_contry, bill_phone, |
|||
shipTo_name, |
|||
shipTo_street1, shipTo_street2, shipTo_city, shipTo_state, |
|||
shipTo_postal, shipTo_contry, shipTo_phone, items, |
|||
amountPaid, |
|||
taxAmount, |
|||
shippingAmount, customerNotes, internalNotes, paymentMethod, |
|||
requestedShippingService, carrierCode, serviceCode, |
|||
packageCode, |
|||
confirmation, shipDate, weight) |
|||
|
|||
create_order = requests.request("POST", url, headers=headers, |
|||
data=payload) |
|||
result = create_order.json() |
|||
|
|||
if not pickings.shipstation_order_id and result.get('orderId'): |
|||
pickings.shipstation_order_id = result.get('orderId') |
|||
pickings.carrier_tracking_ref = result.get('orderId') |
|||
pickings.shipstation_shipping_orderKey = result.get('orderKey') |
|||
attachment_64 = pickings.get_label() |
|||
|
|||
so_attachment = self.env['ir.attachment'].sudo().create({ |
|||
'name': 'Shipstation Shipping Label - %s.pdf' % attachment_64.get('trackingNumber'), |
|||
'type': 'binary', |
|||
'mimetype': 'application/pdf', |
|||
'datas': attachment_64.get('data') |
|||
}) |
|||
pickings.message_post( |
|||
body=(_("Order created into Shipstation for %s<br/>" % self.name)), |
|||
attachment_ids=[so_attachment.id] |
|||
) |
|||
|
|||
def shipstation_cancel_shipment(self, pickings): |
|||
"""Function to cancel shipstaion order""" |
|||
pickings.shipstation_shipping_cancel = True |
|||
pickings.send_to_shipper() |
|||
|
|||
def shipstation_send_shipping(self, pickings): |
|||
res = [] |
|||
self.create_oredr(pickings) |
|||
for p in pickings: |
|||
res = res + [{'exact_price': p.carrier_id.fixed_price, |
|||
'tracking_number': False}] |
|||
return res |
|||
|
|||
def shipstation_rate_shipment(self, order): |
|||
"""Calculating shipping rate""" |
|||
|
|||
shipstation = self.env['shipstation.api'].search( |
|||
[('activate', '=', True)], limit=1) |
|||
|
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
shipstation.username, |
|||
shipstation.password)).encode()).decode().replace('\n', '') |
|||
|
|||
url = shipstation.host + "/shipments/getrates" |
|||
company_postal = order.company_id.zip |
|||
to_state = order.partner_shipping_id.state_id.name |
|||
to_country = order.partner_shipping_id.country_id.code |
|||
to_postal = order.partner_shipping_id.zip |
|||
to_city = order.partner_shipping_id.city |
|||
weight_value = 0 |
|||
for rec in order.order_line: |
|||
weight_value = weight_value + ( |
|||
rec.product_id.weight * rec.product_uom_qty) |
|||
payload = "{\n \"carrierCode\": \"%s\",\n \"serviceCode\": \"%s\",\n \"packageCode\": \"%s\",\n \"fromPostalCode\": \"%s\",\n \"toState\": \"%s\",\n \"toCountry\": \"%s\",\n \"toPostalCode\": \"%s\",\n \"toCity\": \"%s\",\n \"weight\": {\n \"value\": %s,\n \"units\": \"pounds\"\n }\n}" % ( |
|||
self.shipstation_carrier.code, self.shipstation_service.code, |
|||
self.shipstation_package.code, company_postal, to_state, to_country, |
|||
to_postal, to_city, (weight_value * 2.2046)) |
|||
headers = { |
|||
'Host': 'ssapi.shipstation.com', |
|||
'Authorization': "Basic " + base64string, |
|||
'Content-Type': 'application/json' |
|||
} |
|||
response = requests.request("POST", url, headers=headers, data=payload) |
|||
result = response.json() |
|||
# print("result", result) |
|||
if not result: |
|||
|
|||
final = {'success': True, |
|||
'price': 0.0, |
|||
'error_message': True, |
|||
'warning_message': "Something went wrong"} |
|||
else: |
|||
if 'shipmentCost' in result[0]: |
|||
price = result[0].get('shipmentCost') |
|||
final = {'success': True, |
|||
'price': price, |
|||
'error_message': False, |
|||
'warning_message': False} |
|||
else: |
|||
final = {'success': True, |
|||
'price': 0, |
|||
'error_message': True, |
|||
'warning_message': result.get('ExceptionMessage')} |
|||
return final |
|||
|
|||
def rate_shipment(self, order): |
|||
self.ensure_one() |
|||
if hasattr(self, '%s_rate_shipment' % self.delivery_type): |
|||
res = getattr(self, '%s_rate_shipment' % self.delivery_type)(order) |
|||
# apply margin on computed price |
|||
res['price'] = float(res['price']) * ( |
|||
1.0 + (float(self.margin) / 100.0)) |
|||
# free when order is large enough |
|||
if res['success'] and self.free_over and \ |
|||
order._compute_amount_total_without_delivery() >= self.amount: |
|||
res['warning_message'] = _( |
|||
'Info:\nThe shipping is free because the order amount ' |
|||
'exceeds %.2f.\n(The actual shipping cost is: %.2f)') % ( |
|||
self.amount, res['price']) |
|||
res['price'] = 0.0 |
|||
return res |
|||
|
|||
def cancel_shipment(self, pickings): |
|||
|
|||
self.ensure_one() |
|||
if hasattr(self, '%s_cancel_shipment' % self.delivery_type): |
|||
return getattr(self, '%s_cancel_shipment' % self.delivery_type)( |
|||
pickings) |
@ -0,0 +1,224 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
|||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
|||
# DEALINGS IN THE SOFTWARE. |
|||
# |
|||
######################################################################################## |
|||
|
|||
from odoo import fields, models, api, _ |
|||
import requests |
|||
import base64 |
|||
|
|||
try: |
|||
from base64 import encodestring |
|||
except ImportError: |
|||
from base64 import encodebytes as encodestring |
|||
|
|||
|
|||
class StockPicking(models.Model): |
|||
_inherit = 'stock.picking' |
|||
|
|||
shipstation_order_id = fields.Integer(string="Shipstaion Order Id ", readonly=True) |
|||
shipstation_shipping_status = fields.Char(string="Shipping Status", |
|||
compute='_compute_shipstation_shipping_status') |
|||
shipstation_shipping_cancel = fields.Boolean(string="Is Cancel", default=False) |
|||
shipstation_shipping_orderKey = fields.Char(string="Order Key") |
|||
shipstation_shipping_hold_date = fields.Date(string="Hold Until") |
|||
|
|||
@api.depends('shipstation_order_id') |
|||
def _compute_shipstation_shipping_status(self): |
|||
|
|||
if self.shipstation_order_id: |
|||
|
|||
shipstation = self.env['shipstation.api'].search( |
|||
[('activate', '=', True)]) |
|||
|
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
shipstation.username, |
|||
shipstation.password)).encode()).decode().replace('\n', '') |
|||
|
|||
url = shipstation.host + '/orders/' + str(self.shipstation_order_id) |
|||
payload = {} |
|||
headers = { |
|||
'Host': 'ssapi.shipstation.com', |
|||
'Authorization': "Basic " + base64string |
|||
} |
|||
response = requests.request("GET", url, headers=headers, |
|||
data=payload) |
|||
# print("compute", response.json()) |
|||
|
|||
self.shipstation_shipping_status = response.json().get( |
|||
'orderStatus') |
|||
else: |
|||
self.shipstation_shipping_status = "None" |
|||
|
|||
def get_label(self): |
|||
shipstation = self.env['shipstation.api'].search( |
|||
[('activate', '=', True)]) |
|||
dc = self.env['delivery.carrier'].search([('name', '=', |
|||
self.carrier_id.name)]) |
|||
sale_oredr = self.env['sale.order'].search( |
|||
[('name', '=', self.origin)]) |
|||
total_weight = self.shipping_weight |
|||
|
|||
self.get_shipping_info() |
|||
|
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
shipstation.username, |
|||
shipstation.password)).encode()).decode().replace('\n', '') |
|||
|
|||
url = shipstation.host + '/orders/createlabelfororder' |
|||
# str(self.shipstation_order_id) |
|||
payload = "{\n \"orderId\": %s,\n \"carrierCode\": \"%s\",\n \"serviceCode\": \"%s\",\n \"packageCode\": \"%s\",\n \"shipDate\": \"%s\",\n \"weight\": {\n \"value\": %s,\n \"units\": \"pounds\"\n },\n \"internationalOptions\": null,\n \"advancedOptions\": null,\n \"testLabel\": false\n}" % ( |
|||
self.shipstation_order_id, dc.shipstation_carrier.code, |
|||
dc.shipstation_service.code, dc.shipstation_package.code, |
|||
sale_oredr.date_order, (total_weight * 2.2046)) |
|||
|
|||
headers = { |
|||
'Host': 'ssapi.shipstation.com', |
|||
'Authorization': "Basic " + base64string, |
|||
'Content-Type': 'application/json' |
|||
|
|||
} |
|||
|
|||
response = requests.request("POST", url, headers=headers, |
|||
data=str(payload)) |
|||
|
|||
value = {'trackingNumber': response.json().get('trackingNumber'), 'data': response.json().get('labelData')} |
|||
return value |
|||
|
|||
def send_to_shipper(self): |
|||
self.ensure_one() |
|||
|
|||
res = self.carrier_id.send_shipping(self)[0] |
|||
if self.carrier_id.free_over and self.sale_id and self.sale_id._compute_amount_total_without_delivery() >= 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']: |
|||
self.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<br/>Cost: %(price).2f %(currency)s", |
|||
carrier_name=self.carrier_id.name, |
|||
ref=self.carrier_tracking_ref, |
|||
price=self.carrier_price, |
|||
currency=order_currency.name |
|||
) |
|||
self.message_post(body=msg) |
|||
self._add_delivery_cost_to_so() |
|||
|
|||
def action_onhold_order(self): |
|||
shipstation = self.env['shipstation.api'].search( |
|||
[('activate', '=', True)]) |
|||
|
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
shipstation.username, |
|||
shipstation.password)).encode()).decode().replace('\n', '') |
|||
|
|||
url = shipstation.host + '/orders/holduntil' |
|||
if self.shipstation_shipping_hold_date: |
|||
hold_date = self.shipstation_shipping_hold_date |
|||
else: |
|||
hold_date = fields.date.today() |
|||
payload = "{\n \"orderId\": %s,\n \"holdUntilDate\": \"%s\"\n}" % ( |
|||
self.shipstation_order_id, hold_date) |
|||
headers = { |
|||
'Host': 'ssapi.shipstation.com', |
|||
'Authorization': "Basic " + base64string, |
|||
'Content-Type': 'application/json' |
|||
} |
|||
response = requests.request("POST", url, headers=headers, data=payload) |
|||
|
|||
def action_shipped_order(self): |
|||
shipstation = self.env['shipstation.api'].search( |
|||
[('activate', '=', True)]) |
|||
|
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
shipstation.username, |
|||
shipstation.password)).encode()).decode().replace('\n', '') |
|||
|
|||
carrier_code = self.env['delivery.carrier'].search( |
|||
[('id', '=', self.carrier_id.id)]) |
|||
|
|||
carier = carrier_code.shipstation_carrier.code |
|||
url = shipstation.host + 'orders/markasshipped' |
|||
payload = "{\n \"orderId\": %s,\n \"carrierCode\": \"%s\",\n \"trackingNumber\": \"%s\",\n \"notifyCustomer\": true}" % ( |
|||
int(self.shipstation_order_id), |
|||
carier, self.shipstation_order_id) |
|||
headers = { |
|||
'Host': 'ssapi.shipstation.com', |
|||
'Authorization': "Basic " + base64string, |
|||
'Content-Type': 'application/json' |
|||
} |
|||
response = requests.request("POST", url, headers=headers, data=payload) |
|||
|
|||
def action_restore_hold_order(self): |
|||
shipstation = self.env['shipstation.api'].search( |
|||
[('activate', '=', True)]) |
|||
|
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
shipstation.username, |
|||
shipstation.password)).encode()).decode().replace('\n', '') |
|||
|
|||
url = shipstation.host + 'orders/restorefromhold' |
|||
if self.shipstation_shipping_hold_date: |
|||
hold_date = self.shipstation_shipping_hold_date |
|||
else: |
|||
hold_date = fields.date.today() |
|||
payload = "{\n \"orderId\": %s}" % ( |
|||
self.shipstation_order_id) |
|||
headers = { |
|||
'Host': 'ssapi.shipstation.com', |
|||
'Authorization': "Basic " + base64string, |
|||
'Content-Type': 'application/json' |
|||
} |
|||
response = requests.request("POST", url, headers=headers, data=payload) |
|||
|
|||
def open_website_url(self): |
|||
if self.shipstation_order_id: |
|||
if self.shipstation_shipping_status == 'awaiting_shipment': |
|||
url = 'https://ship13.shipstation.com/orders/awaiting-shipment' |
|||
elif self.shipstation_shipping_status == 'shipped': |
|||
url = 'https://ship13.shipstation.com/shipments/shipped?' |
|||
# url ='https://ship13.shipstation.com/orders/shipped' |
|||
elif self.shipstation_shipping_status == 'on_hold': |
|||
url = 'https://ship13.shipstation.com/orders/on-hold' |
|||
elif self.shipstation_shipping_status == 'cancelled': |
|||
url = 'https://ship13.shipstation.com/orders/cancelled' |
|||
return { |
|||
"type": "ir.actions.act_url", |
|||
"url": url + '/%s' % self.origin, |
|||
"target": "new" |
|||
} |
|||
|
|||
def get_shipping_info(self, ): |
|||
credential = self.env['shipstation.api'].search( |
|||
[('activate', '=', True)]) |
|||
base64string = base64.encodebytes(('%s:%s' % ( |
|||
credential.username, |
|||
credential.password)).encode()).decode().replace('\n', '') |
|||
|
|||
url = credential.host + 'shipments?orderNumber=%s&orderId=%s' % ( |
|||
self.origin, self.shipstation_order_id) |
|||
headers = { |
|||
'Host': 'ssapi.shipstation.com', |
|||
'Authorization': "Basic " + base64string, |
|||
} |
|||
ship = requests.get(url, headers=headers) |
@ -0,0 +1,40 @@ |
|||
# -*- coding: utf-8 -*- |
|||
###################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Techno Solutions (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 NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
|||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
|||
# DEALINGS IN THE SOFTWARE. |
|||
# |
|||
######################################################################################## |
|||
|
|||
from odoo import fields, models, api |
|||
|
|||
|
|||
class ShipstationStore(models.Model): |
|||
_name = 'shipstation.store' |
|||
_description = "ShipStation Store" |
|||
_rec_name = 'store_name' |
|||
|
|||
store_id = fields.Integer(string="Store id", required=True) |
|||
store_name = fields.Char(string="Store Name", required=True) |
|||
marketplace_name = fields.Char(string="Marketplace Name", required=True) |
|||
account_number = fields.Char(string="Account Number") |
|||
email = fields.Char(string="Email") |
|||
company_name = fields.Char(string="Company Name") |
|||
phone = fields.Char(string="Phone") |
|||
website = fields.Char(string="Website") |
|||
create_date = fields.Date(string="Create Date") |
|||
modified_date = fields.Date(string="Modified Date") |
|
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<record model="ir.module.category" id="category_shipstation"> |
|||
<field name="name">Shipstaion</field> |
|||
<field name="description">Category for Shipstation</field> |
|||
</record> |
|||
<record id="group_shipstation_manager" model="res.groups"> |
|||
<field name="name">Manager</field> |
|||
<field name="category_id" ref="category_shipstation"/> |
|||
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> |
|||
</record> |
|||
</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: 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: 1.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 589 B |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 967 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 1.8 MiB |
After Width: | Height: | Size: 57 KiB |
After Width: | Height: | Size: 435 KiB |
After Width: | Height: | Size: 564 KiB |
After Width: | Height: | Size: 228 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 145 KiB |
After Width: | Height: | Size: 164 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 180 KiB |
After Width: | Height: | Size: 159 KiB |
After Width: | Height: | Size: 121 KiB |
After Width: | Height: | Size: 159 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 108 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,669 @@ |
|||
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;"> |
|||
<!-- TITLE BAR --> |
|||
<div |
|||
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;"> |
|||
<img src="assets/misc/cybrosys-logo.png" width="42" height="42" style="width: 42px; height: 42px;" /> |
|||
<div> |
|||
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" |
|||
class="mr-2"> |
|||
<i class="fa fa-check mr-1"></i>Community |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF TITLE BAR --> |
|||
|
|||
<!-- APP HERO --> |
|||
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">ShipStation Odoo Connector</h1> |
|||
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">Integrate and Manage ShipStation Operations with Odoo</p> |
|||
<!-- END OF APP HERO --> |
|||
<img src="assets/screenshots/hero.gif" |
|||
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;" /> |
|||
|
|||
</div> |
|||
|
|||
<!-- NAVIGATION SECTION --> |
|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/compass.png" /> |
|||
</div> |
|||
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This |
|||
Module</h2> |
|||
</div> |
|||
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;"> |
|||
<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="#configuration" 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;"> |
|||
Configuration</h3> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
|||
View configurations for 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> |
|||
<!-- END OF NAVIGATION SECTION --> |
|||
|
|||
<!-- OVERVIEW SECTION --> |
|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/pie-chart.png" /> |
|||
</div> |
|||
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview |
|||
</h2> |
|||
</div> |
|||
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> |
|||
<div class="col-sm-12 py-4"> |
|||
This connector will help to integrate and manage your shipstation orders with Odoo. |
|||
Furthermore, It Synchronizes Orders, Products, and Customers. |
|||
You can easily integrate with various shipping companies. |
|||
In addition, the connector will automatically transfer order details such as Order Tracking number and Shipping Cost from Odoo to shipstation |
|||
</div> |
|||
</div> |
|||
<!-- END OF OVERVIEW SECTION --> |
|||
|
|||
<div class="row" id="configuration"> |
|||
<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>Configuration |
|||
</h2> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row"> |
|||
<div class="col-sm-12"> |
|||
|
|||
<div style="display: block; margin: 30px auto;"><h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Steps to setup account in Shipstation</h3></div> |
|||
<div style="display: block; margin: 30px auto;"><p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">1. Open Shipstation website and click on the Try Shipstation Now option</p> |
|||
<img src="assets/screenshots/shipstation_1.png" class="img-thumbnail"></div> |
|||
<div style="display: block; margin: 30px auto;"><p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">2. Provide the details and agree to the terms and condition and click on Get started</p> |
|||
<img src="assets/screenshots/shipstation_3.png" class="img-thumbnail"></div> |
|||
<div style="display: block; margin: 30px auto;"> <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">3. In the shipstation dashboard click on the settings icon</p> |
|||
<img src="assets/screenshots/shipstation_4.png" class="img-thumbnail"></div> |
|||
<div style="display: block; margin: 30px auto;"><p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">4. Expand the Account section and click on ApiSettings</p> |
|||
<img src="assets/screenshots/shipstation_5.png" class="img-thumbnail"></div> |
|||
<div style="display: block; margin: 30px auto;"><p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">5. Here we can see the API KEY(username) and API Secret(Password)</p> |
|||
<img src="assets/screenshots/shipstation_6.png" class="img-thumbnail"></div> |
|||
<div style="display: block; margin: 30px auto;"><p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">6. We need to set up a shipping carrier, for that click on the Add a Carrier Account</p> |
|||
<img src="assets/screenshots/shipstation_7.png" class="img-thumbnail"></div> |
|||
<div style="display: block; margin: 30px auto;"><p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">7. Finally, click on the carrier and set up the account</p> |
|||
<img src="assets/screenshots/shipstation_8.png" class="img-thumbnail"></div> |
|||
</div> |
|||
|
|||
</div> |
|||
<!-- </div>--> |
|||
|
|||
<!-- FEATURES SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" |
|||
id="features"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/features.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Features |
|||
</h2> |
|||
</div> |
|||
<div class="row" |
|||
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div class="d-flex align-items-center" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Easily integrate more than 25 shipping companies with Shipstation.</span> |
|||
</div> |
|||
<div class="d-flex align-items-center" |
|||
style="margin-top: 30px; margin-bottom: 30px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">One platform for all carriers</span> |
|||
</div> |
|||
<div class="d-flex align-items-center" |
|||
style="margin-top: 30px; margin-bottom: 30px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">You can also import Packages</span> |
|||
</div> |
|||
<div class="d-flex align-items-center" |
|||
style="margin-top: 30px; margin-bottom: 30px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Get Tracking number and obtain Tracking status.</span><br/> |
|||
</div> |
|||
<div class="d-flex align-items-center" |
|||
style="margin-top: 30px; margin-bottom: 30px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">One Click integrates shipping rate with sale order.</span><br/> |
|||
</div> |
|||
<div class="d-flex align-items-center" |
|||
style="margin-top: 30px; margin-bottom: 30px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Option to import Carriers</span><br/> |
|||
</div> |
|||
<div class="d-flex align-items-center" |
|||
style="margin-top: 30px; margin-bottom: 30px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
You can import Services</span><br/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF FEATURES SECTION --> |
|||
|
|||
<!-- SCREENSHOTS SECTION --> |
|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/pictures.png" /> |
|||
</div> |
|||
<h2 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
|||
Screenshots |
|||
</h2> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12"> |
|||
|
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Easily integrate more than 25 shipping companies with Shipstation.</h3> |
|||
<img src="assets/screenshots/brands.png" class="img-thumbnail"> |
|||
</div> |
|||
|
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Get Tracking number and obtain Tracking status.</h3> |
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Automatically fetch tracking number and tracking status from shipstation when you open the record</p> |
|||
<img src="assets/screenshots/shipping_number&_shipping_status.png" class="img-thumbnail"> |
|||
</div> |
|||
|
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Option to import records from shipstation</h3> |
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">You can simply import carrier, service, store and packages with one click</p> |
|||
<img src="assets/screenshots/grid.png" class="img-thumbnail"> |
|||
</div> |
|||
|
|||
|
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Steps to setup account in Shipstation</h3> |
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">1. Synchronize Store, Services, Delivery and Package operations.</p> |
|||
<img src="assets/screenshots/support_1.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
|
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">2. After the installation, you can configure the shipstation by adding the details such as name, URL, API and many more.</p> |
|||
<img src="assets/screenshots/support_2.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
|
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">3. Separate shipstation Services menu</p> |
|||
<img src="assets/screenshots/support_3.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
|
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">4. Dedicated shipstation Packages menu</p> |
|||
<img src="assets/screenshots/support_4.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
|
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">5. Get Shipping cost based on the shipping method</p> |
|||
<img src="assets/screenshots/support_5.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
|
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">6. Automatically shipstation status and Tracking Reference</p> |
|||
<img src="assets/screenshots/support_6.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
|
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">7. Get Shipping label.</p> |
|||
<img src="assets/screenshots/support_8.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
|
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">8. Purchase Product From Website.</p> |
|||
<img src="assets/screenshots/support_9.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
|
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">9. Get Rate of shipping From Shipstation.</p> |
|||
<img src="assets/screenshots/support_7.png" class="img-thumbnail"> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
<!-- END OF SCREENSHOTS SECTION --> |
|||
|
|||
<!-- RELATED PRODUCTS --> |
|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/categories.png" /> |
|||
</div> |
|||
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related |
|||
Products |
|||
</h2> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12"> |
|||
<div id="demo1" class="row carousel slide" data-ride="carousel"> |
|||
<!-- The slideshow --> |
|||
<div class="carousel-inner" style="padding: 30px;"> |
|||
<div class="carousel-item" style="min-height: 198.656px;"> |
|||
<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/dynamic_accounts_report/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="assets/modules/1.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-radius: 0px;" |
|||
src="assets/modules/2.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/project_custom_gantt/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="assets/modules/3.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item active" style="min-height: 198.656px;"> |
|||
<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/account_reports_xlsx/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="assets/modules/4.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/base_accounting_kit/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="assets/modules/5.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/hr_payroll_community/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="assets/modules/6.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Left and right controls --> |
|||
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span |
|||
class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span> |
|||
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000"> |
|||
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" |
|||
style="font-size:24px"></i></span> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF RELATED PRODUCTS --> |
|||
|
|||
<!-- OUR SERVICES --> |
|||
|
|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/star.png" /> |
|||
</div> |
|||
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services |
|||
</h2> |
|||
</div> |
|||
|
|||
<div class="container my-5"> |
|||
<div class="row"> |
|||
<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> |
|||
|
|||
</div> |
|||
|
|||
<!-- END OF END OF OUR SERVICES --> |
|||
|
|||
<!-- OUR INDUSTRIES --> |
|||
|
|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/corporate.png" /> |
|||
</div> |
|||
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our |
|||
Industries |
|||
</h2> |
|||
</div> |
|||
|
|||
<div class="container my-5"> |
|||
<div class="row"> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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> |
|||
</div> |
|||
|
|||
<!-- END OF END OF OUR INDUSTRIES --> |
|||
|
|||
<!-- SUPPORT --> |
|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/customer-support.png" /> |
|||
</div> |
|||
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support |
|||
</h2> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> |
|||
<div class="mr-4" |
|||
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> |
|||
<img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;" /> |
|||
</div> |
|||
<div> |
|||
<h4>Need Help?</h4> |
|||
<p style="line-height: 100%;">Got questions or need help? Get in touch.</p> |
|||
<a href="mailto:odoo@cybrosys.com"> |
|||
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> |
|||
odoo@cybrosys.com</p> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> |
|||
<div class="mr-4" |
|||
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> |
|||
<img src="assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;" /> |
|||
</div> |
|||
<div> |
|||
<h4>WhatsApp</h4> |
|||
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p> |
|||
<a href="https://api.whatsapp.com/send?phone=918606827707"> |
|||
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068 |
|||
27707</p> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> |
|||
<img src="assets/misc/logo.png" width="144" height="31" |
|||
style="width:144px; height: 31px; margin-top: 40px;" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF SUPPORT --> |
@ -0,0 +1,56 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<!-- Api form view--> |
|||
<record id="shipstation_api_form" model="ir.ui.view"> |
|||
<field name="name">shipstation.api.form</field> |
|||
<field name="model">shipstation.api</field> |
|||
<field name="arch" type="xml"> |
|||
|
|||
<form string="Api credential"> |
|||
<header> |
|||
<button |
|||
name="get_carriers_service" |
|||
string="Get Carrier and services" |
|||
class="oe_highlight" |
|||
type="object"/> |
|||
</header> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="host"/> |
|||
<field name="username"/> |
|||
<field name="password"/> |
|||
<field name="activate" widget="toggle_button"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
<!-- Api tree view--> |
|||
<record id="shipstation_api_tree" model="ir.ui.view"> |
|||
<field name="name">shipstation.api.credential</field> |
|||
<field name="model">shipstation.api</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Shipstation Credential"> |
|||
<field name="host"/> |
|||
<field name="username"/> |
|||
<field name="password"/> |
|||
<field name="activate" widget="toggle_button"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_shipstation_api_form" model="ir.actions.act_window"> |
|||
<field name="name">Shipstation Credential</field> |
|||
<field name="res_model">shipstation.api</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="o_view_nocontent_smiling_face"> |
|||
Create Api credential |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,31 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
|
|||
<record id="view_delivery_carrier_provider_shipstation" model="ir.ui.view"> |
|||
<field name="name">delivery.carrier.form.provider.shipstaion</field> |
|||
<field name="model">delivery.carrier</field> |
|||
<field name="inherit_id" ref="delivery.view_delivery_carrier_form"/> |
|||
<field name="arch" type="xml" > |
|||
<xpath expr="//page[@name='destination']" position='before'> |
|||
<page string="Shipstation Configuration" |
|||
attrs="{'invisible': [('delivery_type', '!=', 'shipstation')]}"> |
|||
<group> |
|||
<group> |
|||
<field name="store" |
|||
attrs="{'required': [('delivery_type', '=', 'shipstation')]}"/> |
|||
<field name="shipstation_carrier" |
|||
attrs="{'required': [('delivery_type', '=', 'shipstation')]}"/> |
|||
<field name="shipstation_service" |
|||
attrs="{'required': [('delivery_type', '=', 'shipstation')]}"/> |
|||
</group> |
|||
<group> |
|||
<field name="shipstation_package" |
|||
attrs="{'required': [('delivery_type', '=', 'shipstation')]}"/> |
|||
</group> |
|||
</group> |
|||
</page> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
@ -0,0 +1,55 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<!-- Store form view--> |
|||
<record id="shipstation_delivery_form" model="ir.ui.view"> |
|||
<field name="name">shipstation.delivery.form</field> |
|||
<field name="model">shipstation.delivery</field> |
|||
<field name="arch" type="xml"> |
|||
|
|||
<form string="Store Details" create="false" edit="false"> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="name"/> |
|||
<field name="code"/> |
|||
<field name="account_number"/> |
|||
<field name="requires_funded_account"/> |
|||
<field name="balance"/> |
|||
<field name="nick_name"/> |
|||
<field name="shipping_providerid"/> |
|||
<field name="primary"/> |
|||
|
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
<!-- store tree view--> |
|||
<record id="shipstation_delivery_tree" model="ir.ui.view"> |
|||
<field name="name">shipstation.delivery</field> |
|||
<field name="model">shipstation.delivery</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Shipstation Store" create="false"> |
|||
<field name="name"/> |
|||
<field name="code"/> |
|||
<field name="account_number"/> |
|||
<field name="primary"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_shipstation_delivery_form" |
|||
model="ir.actions.act_window"> |
|||
<field name="name">Shipstation Delivery</field> |
|||
<field name="res_model">shipstation.delivery</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="o_view_nocontent_smiling_face"> |
|||
Create Shipstation delivery |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,52 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<!-- Packages form view--> |
|||
<record id="shipstation_packages_form" model="ir.ui.view"> |
|||
<field name="name">shipstation.packages.form</field> |
|||
<field name="model">shipstation.packages</field> |
|||
<field name="arch" type="xml"> |
|||
|
|||
<form string="Packages Details" edit='false' create='false'> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="carrier_code"/> |
|||
<field name="code"/> |
|||
<field name="name"/> |
|||
<field name="domestic"/> |
|||
<field name="international"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
<!-- Packages tree view--> |
|||
<record id="shipstation_packages_tree" model="ir.ui.view"> |
|||
<field name="name">shipstation.packages.details</field> |
|||
<field name="model">shipstation.packages</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Shipstation Store" create="false"> |
|||
<field name="carrier_code"/> |
|||
<field name="code"/> |
|||
<field name="name"/> |
|||
<field name="domestic"/> |
|||
<field name="international"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_shipstation_packages_form" |
|||
model="ir.actions.act_window"> |
|||
<field name="name">Shipstation Packages</field> |
|||
<field name="res_model">shipstation.packages</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="o_view_nocontent_smiling_face"> |
|||
Create Shipstation packages |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,19 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<!-- Sale Orders form view--> |
|||
|
|||
<record id="action_shipstation_orders_form" |
|||
model="ir.actions.act_window"> |
|||
<field name="name">Shipstation Orders</field> |
|||
<field name="res_model">sale.order</field> |
|||
<field name="domain" >[('carrier_id.delivery_type', '=', 'shipstation')]</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="o_view_nocontent_smiling_face"> |
|||
Create Shipstation Orders |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,51 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<!-- Store form view--> |
|||
<record id="shipstation_service_form" model="ir.ui.view"> |
|||
<field name="name">shipstation.service.form</field> |
|||
<field name="model">shipstation.service</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="service Details" create="false" edit="false"> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="carrier_code"/> |
|||
<field name="code"/> |
|||
<field name="name"/> |
|||
<field name="domestic"/> |
|||
<field name="international"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
<!-- store tree view--> |
|||
<record id="shipstation_service_tree" model="ir.ui.view"> |
|||
<field name="name">shipstation.service.tree</field> |
|||
<field name="model">shipstation.service</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Shipstation Store" create="false"> |
|||
<field name="carrier_code"/> |
|||
<field name="code"/> |
|||
<field name="name"/> |
|||
<field name="domestic"/> |
|||
<field name="international"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_shipstation_services_form" |
|||
model="ir.actions.act_window"> |
|||
<field name="name">Shipstation Services</field> |
|||
<field name="res_model">shipstation.service</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="o_view_nocontent_smiling_face"> |
|||
Create Shipstation Store |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,21 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<!-- Shipstation api configuration--> |
|||
<menuitem id="menu_shipstaion_config" name="Shipstation Configuration" |
|||
parent="stock.menu_stock_config_settings" sequence="90"/> |
|||
<menuitem id="api_credential_action_menu" |
|||
parent="menu_shipstaion_config" |
|||
action="action_shipstation_api_form" sequence="1"/> |
|||
<menuitem id="shipstation_store" parent="menu_shipstaion_config" |
|||
action="action_shipstation_store_form" sequence="2"/> |
|||
<menuitem id="shipstation_service" parent="menu_shipstaion_config" |
|||
action="action_shipstation_services_form" sequence="3"/> |
|||
<menuitem id="shipstation_delivery" parent="menu_shipstaion_config" |
|||
action="action_shipstation_delivery_form" sequence="4"/> |
|||
<menuitem id="shipstation_packages" parent="menu_shipstaion_config" |
|||
action="action_shipstation_packages_form" sequence="5"/> |
|||
<menuitem id="shipstation_orders" parent="menu_shipstaion_config" |
|||
action="action_shipstation_orders_form" sequence="6"/> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,62 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="stock_picking_add_fields" model="ir.ui.view"> |
|||
<field name="name">Add.stock.picking.form</field> |
|||
<field name="model">stock.picking</field> |
|||
<field name="inherit_id" ref="stock.view_picking_form"/> |
|||
<field name="priority" eval="8"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//form/header" position="inside"> |
|||
|
|||
<button |
|||
name="action_shipped_order" |
|||
string="Mark as Shipped" |
|||
class="oe_light" |
|||
sequance="50" |
|||
type="object" |
|||
attrs="{'invisible': ['|',('shipstation_order_id', '=', 0),('shipstation_shipping_status','in',['cancelled','shipped','on_hold'])]}" |
|||
/> |
|||
<button |
|||
name="action_restore_hold_order" |
|||
string="Restore Order" |
|||
class="oe_light" |
|||
sequance="50" |
|||
type="object" |
|||
attrs="{'invisible': [('shipstation_shipping_status','!=','on_hold')]}" |
|||
/> |
|||
|
|||
</xpath> |
|||
<xpath expr="//form/sheet/notebook/page[@name='extra']/group" |
|||
position="inside"> |
|||
<group name="shipstation_info"> |
|||
<group> |
|||
<field name="shipstation_order_id" invisible="True"/> |
|||
<field name="shipstation_shipping_status"/> |
|||
<field name="shipstation_shipping_orderKey" |
|||
invisible="1"/> |
|||
<field name="shipstation_shipping_cancel" |
|||
redonly="True" |
|||
invisible="1"/> |
|||
</group> |
|||
<group> |
|||
<field name="shipstation_shipping_hold_date" |
|||
attrs="{'invisible': ['|',('shipstation_order_id', '=', 0),('shipstation_shipping_status','in',['cancelled','shipped','on_hold'])]}"/> |
|||
|
|||
<button |
|||
name="action_onhold_order" |
|||
string="Hold Order" |
|||
class="oe_highlight" |
|||
sequance="50" |
|||
type="object" |
|||
attrs="{'invisible': ['|',('shipstation_order_id', '=', 0),('shipstation_shipping_status','in',['cancelled','shipped','on_hold'])]}" |
|||
/> |
|||
</group> |
|||
</group> |
|||
|
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,58 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<!-- Store form view--> |
|||
<record id="shipstation_store_form" model="ir.ui.view"> |
|||
<field name="name">shipstation.store.form</field> |
|||
<field name="model">shipstation.store</field> |
|||
<field name="arch" type="xml"> |
|||
|
|||
<form string="Store Details" create="false" edit="false"> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="store_id"/> |
|||
<field name="store_name"/> |
|||
<field name="marketplace_name"/> |
|||
<field name="email"/> |
|||
<field name="phone"/> |
|||
</group> |
|||
<group> |
|||
<field name="account_number"/> |
|||
<field name="company_name"/> |
|||
<field name="website"/> |
|||
<field name="create_date"/> |
|||
<field name="modified_date"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
<!-- store tree view--> |
|||
<record id="shipstation_store_tree" model="ir.ui.view"> |
|||
<field name="name">shipstation.stores</field> |
|||
<field name="model">shipstation.store</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Shipstation Store" create="false"> |
|||
<field name="store_id"/> |
|||
<field name="store_name"/> |
|||
<field name="marketplace_name"/> |
|||
<field name="account_number"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_shipstation_store_form" |
|||
model="ir.actions.act_window"> |
|||
<field name="name">Shipstation Store</field> |
|||
<field name="res_model">shipstation.store</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="o_view_nocontent_smiling_face"> |
|||
Create Shipstation Store |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |