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