Browse Source

Nov 10 [ADD] : Initial Commit 'shipstation_odoo_connector'

pull/232/head
AjmalCybro 3 years ago
parent
commit
9423133e6c
  1. 42
      shipstation_odoo_connector/README.rst
  2. 23
      shipstation_odoo_connector/__init__.py
  3. 53
      shipstation_odoo_connector/__manifest__.py
  4. 7
      shipstation_odoo_connector/doc/RELEASE_NOTES.md
  5. 28
      shipstation_odoo_connector/models/__init__.py
  6. 38
      shipstation_odoo_connector/models/delivery_method.py
  7. 34
      shipstation_odoo_connector/models/packages_shipstation.py
  8. 39
      shipstation_odoo_connector/models/services.py
  9. 439
      shipstation_odoo_connector/models/shipstation_api.py
  10. 224
      shipstation_odoo_connector/models/stock_picking.py
  11. 40
      shipstation_odoo_connector/models/store.py
  12. 14
      shipstation_odoo_connector/security/ir.model.access.csv
  13. 12
      shipstation_odoo_connector/security/security.xml
  14. BIN
      shipstation_odoo_connector/static/description/assets/icons/check.png
  15. BIN
      shipstation_odoo_connector/static/description/assets/icons/chevron.png
  16. BIN
      shipstation_odoo_connector/static/description/assets/icons/cogs.png
  17. BIN
      shipstation_odoo_connector/static/description/assets/icons/consultation.png
  18. BIN
      shipstation_odoo_connector/static/description/assets/icons/ecom-black.png
  19. BIN
      shipstation_odoo_connector/static/description/assets/icons/education-black.png
  20. BIN
      shipstation_odoo_connector/static/description/assets/icons/hotel-black.png
  21. BIN
      shipstation_odoo_connector/static/description/assets/icons/license.png
  22. BIN
      shipstation_odoo_connector/static/description/assets/icons/lifebuoy.png
  23. BIN
      shipstation_odoo_connector/static/description/assets/icons/manufacturing-black.png
  24. BIN
      shipstation_odoo_connector/static/description/assets/icons/pos-black.png
  25. BIN
      shipstation_odoo_connector/static/description/assets/icons/puzzle.png
  26. BIN
      shipstation_odoo_connector/static/description/assets/icons/restaurant-black.png
  27. BIN
      shipstation_odoo_connector/static/description/assets/icons/service-black.png
  28. BIN
      shipstation_odoo_connector/static/description/assets/icons/trading-black.png
  29. BIN
      shipstation_odoo_connector/static/description/assets/icons/training.png
  30. BIN
      shipstation_odoo_connector/static/description/assets/icons/update.png
  31. BIN
      shipstation_odoo_connector/static/description/assets/icons/user.png
  32. BIN
      shipstation_odoo_connector/static/description/assets/icons/wrench.png
  33. BIN
      shipstation_odoo_connector/static/description/assets/misc/categories.png
  34. BIN
      shipstation_odoo_connector/static/description/assets/misc/check-box.png
  35. BIN
      shipstation_odoo_connector/static/description/assets/misc/compass.png
  36. BIN
      shipstation_odoo_connector/static/description/assets/misc/corporate.png
  37. BIN
      shipstation_odoo_connector/static/description/assets/misc/customer-support.png
  38. BIN
      shipstation_odoo_connector/static/description/assets/misc/cybrosys-logo.png
  39. BIN
      shipstation_odoo_connector/static/description/assets/misc/features.png
  40. BIN
      shipstation_odoo_connector/static/description/assets/misc/logo.png
  41. BIN
      shipstation_odoo_connector/static/description/assets/misc/pictures.png
  42. BIN
      shipstation_odoo_connector/static/description/assets/misc/pie-chart.png
  43. BIN
      shipstation_odoo_connector/static/description/assets/misc/right-arrow.png
  44. BIN
      shipstation_odoo_connector/static/description/assets/misc/star.png
  45. BIN
      shipstation_odoo_connector/static/description/assets/misc/support.png
  46. BIN
      shipstation_odoo_connector/static/description/assets/misc/whatsapp.png
  47. BIN
      shipstation_odoo_connector/static/description/assets/modules/1.png
  48. BIN
      shipstation_odoo_connector/static/description/assets/modules/2.png
  49. BIN
      shipstation_odoo_connector/static/description/assets/modules/3.png
  50. BIN
      shipstation_odoo_connector/static/description/assets/modules/4.png
  51. BIN
      shipstation_odoo_connector/static/description/assets/modules/5.gif
  52. BIN
      shipstation_odoo_connector/static/description/assets/modules/6.png
  53. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/brands.png
  54. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/grid.png
  55. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/hero.gif
  56. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipping_number&_shipping_status.png
  57. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipstation_1.png
  58. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipstation_2.png
  59. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipstation_3.png
  60. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipstation_4.png
  61. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipstation_5.png
  62. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipstation_6.png
  63. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipstation_7.png
  64. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/shipstation_8.png
  65. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_1.png
  66. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_2.png
  67. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_3.png
  68. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_4.png
  69. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_5.png
  70. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_6.png
  71. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_7.png
  72. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_8.png
  73. BIN
      shipstation_odoo_connector/static/description/assets/screenshots/support_9.png
  74. BIN
      shipstation_odoo_connector/static/description/banner.png
  75. BIN
      shipstation_odoo_connector/static/description/icon.png
  76. 669
      shipstation_odoo_connector/static/description/index.html
  77. 56
      shipstation_odoo_connector/views/api_credential.xml
  78. 31
      shipstation_odoo_connector/views/delivery_carrier_view.xml
  79. 55
      shipstation_odoo_connector/views/delivery_shipstation.xml
  80. 52
      shipstation_odoo_connector/views/packages_shipstation.xml
  81. 19
      shipstation_odoo_connector/views/sale_orders.xml
  82. 51
      shipstation_odoo_connector/views/services.xml
  83. 21
      shipstation_odoo_connector/views/shipstation_actions.xml
  84. 62
      shipstation_odoo_connector/views/stock_picking.xml
  85. 58
      shipstation_odoo_connector/views/store.xml

42
shipstation_odoo_connector/README.rst

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

23
shipstation_odoo_connector/__init__.py

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

53
shipstation_odoo_connector/__manifest__.py

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

7
shipstation_odoo_connector/doc/RELEASE_NOTES.md

@ -0,0 +1,7 @@
## Module <shipstation_odoo_connector>
#### 04.11.2022
#### Version 15.0.1.0.0
##### ADD
- Initial Commit for shipstation_odoo_connector

28
shipstation_odoo_connector/models/__init__.py

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

38
shipstation_odoo_connector/models/delivery_method.py

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

34
shipstation_odoo_connector/models/packages_shipstation.py

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

39
shipstation_odoo_connector/models/services.py

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

439
shipstation_odoo_connector/models/shipstation_api.py

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

224
shipstation_odoo_connector/models/stock_picking.py

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

40
shipstation_odoo_connector/models/store.py

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

14
shipstation_odoo_connector/security/ir.model.access.csv

@ -0,0 +1,14 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_shipstation_api_user,access.shipstation.api.user,model_shipstation_api,shipstation_odoo_connector.group_shipstation_manager,1,1,1,1
acess_shipstation_store_details,access.shipstation.store.detais,model_shipstation_store,shipstation_odoo_connector.group_shipstation_manager,1,1,1,1
access_shipstation_service_details,access.shipstation.service,model_shipstation_service,shipstation_odoo_connector.group_shipstation_manager,1,1,1,1
access_shipstation_delivery_details,access.shipstation.delivery,model_shipstation_delivery,shipstation_odoo_connector.group_shipstation_manager,1,1,1,1
access_shipstation_packages_details,access.shipstation.packages.details,model_shipstation_packages,shipstation_odoo_connector.group_shipstation_manager,1,1,1,1
access_shipstation_api_user,access.shipstation.api.user,model_shipstation_api,base.group_user,1,1,1,0
acess_shipstation_store_details,access.shipstation.store.detais,model_shipstation_store,base.group_user,1,1,1,0
access_shipstation_service_details,access.shipstation.service,model_shipstation_service,base.group_user,1,1,1,0
access_shipstation_delivery_details,access.shipstation.delivery,model_shipstation_delivery,base.group_user,1,1,1,0
access_shipstation_packages_details,access.shipstation.packages.details,model_shipstation_packages,base.group_user,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_shipstation_api_user access.shipstation.api.user model_shipstation_api shipstation_odoo_connector.group_shipstation_manager 1 1 1 1
3 acess_shipstation_store_details access.shipstation.store.detais model_shipstation_store shipstation_odoo_connector.group_shipstation_manager 1 1 1 1
4 access_shipstation_service_details access.shipstation.service model_shipstation_service shipstation_odoo_connector.group_shipstation_manager 1 1 1 1
5 access_shipstation_delivery_details access.shipstation.delivery model_shipstation_delivery shipstation_odoo_connector.group_shipstation_manager 1 1 1 1
6 access_shipstation_packages_details access.shipstation.packages.details model_shipstation_packages shipstation_odoo_connector.group_shipstation_manager 1 1 1 1
7 access_shipstation_api_user access.shipstation.api.user model_shipstation_api base.group_user 1 1 1 0
8 acess_shipstation_store_details access.shipstation.store.detais model_shipstation_store base.group_user 1 1 1 0
9 access_shipstation_service_details access.shipstation.service model_shipstation_service base.group_user 1 1 1 0
10 access_shipstation_delivery_details access.shipstation.delivery model_shipstation_delivery base.group_user 1 1 1 0
11 access_shipstation_packages_details access.shipstation.packages.details model_shipstation_packages base.group_user 1 1 1 0

12
shipstation_odoo_connector/security/security.xml

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

BIN
shipstation_odoo_connector/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
shipstation_odoo_connector/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
shipstation_odoo_connector/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
shipstation_odoo_connector/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
shipstation_odoo_connector/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
shipstation_odoo_connector/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
shipstation_odoo_connector/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
shipstation_odoo_connector/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
shipstation_odoo_connector/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
shipstation_odoo_connector/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
shipstation_odoo_connector/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
shipstation_odoo_connector/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
shipstation_odoo_connector/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
shipstation_odoo_connector/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
shipstation_odoo_connector/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
shipstation_odoo_connector/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
shipstation_odoo_connector/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
shipstation_odoo_connector/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
shipstation_odoo_connector/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
shipstation_odoo_connector/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
shipstation_odoo_connector/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
shipstation_odoo_connector/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
shipstation_odoo_connector/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
shipstation_odoo_connector/static/description/assets/modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
shipstation_odoo_connector/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
shipstation_odoo_connector/static/description/assets/modules/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
shipstation_odoo_connector/static/description/assets/modules/5.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
shipstation_odoo_connector/static/description/assets/modules/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/brands.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/grid.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipping_number&_shipping_status.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipstation_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipstation_2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipstation_3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipstation_4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipstation_5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipstation_6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipstation_7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/shipstation_8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
shipstation_odoo_connector/static/description/assets/screenshots/support_9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
shipstation_odoo_connector/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
shipstation_odoo_connector/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

669
shipstation_odoo_connector/static/description/index.html

@ -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 &amp; 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 -->

56
shipstation_odoo_connector/views/api_credential.xml

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

31
shipstation_odoo_connector/views/delivery_carrier_view.xml

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

55
shipstation_odoo_connector/views/delivery_shipstation.xml

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

52
shipstation_odoo_connector/views/packages_shipstation.xml

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

19
shipstation_odoo_connector/views/sale_orders.xml

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

51
shipstation_odoo_connector/views/services.xml

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

21
shipstation_odoo_connector/views/shipstation_actions.xml

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

62
shipstation_odoo_connector/views/stock_picking.xml

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

58
shipstation_odoo_connector/views/store.xml

@ -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>
Loading…
Cancel
Save