first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from . import routes, shopify_retry
__all__ = [routes]
shopify_retry.patch()

View File

@@ -0,0 +1,173 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from collections import defaultdict
from decimal import Decimal
from trytond.model import Unique
from trytond.pool import PoolMeta
from .common import IdentifierMixin, gid2id
class Payment(IdentifierMixin, metaclass=PoolMeta):
__name__ = 'account.payment'
@classmethod
def __setup__(cls):
super().__setup__()
t = cls.__table__()
cls._sql_constraints += [
('shopify_identifier_unique',
Unique(t, t.shopify_identifier_signed),
'web_shop_shopify.msg_identifier_payment_unique'),
]
def process_shopify(self):
pass
@classmethod
def shopify_fields(cls):
return {
'id': None,
'kind': None,
'amountSet': {
'presentmentMoney': {
'amount': None,
'currencyCode': None,
},
},
'parentTransaction': {
'id': None,
},
'gateway': None,
'status': None,
}
@classmethod
def _get_shopify_payment_journal_pattern(cls, sale, transaction):
return {
'gateway': transaction['gateway'],
}
@classmethod
def _get_from_shopify(cls, sale, transaction):
assert (
transaction['kind'] in {'AUTHORIZATION', 'SALE'}
or (transaction['kind'] == 'REFUND'
and not transaction['parentTransaction']))
payment = cls(shopify_identifier=gid2id(transaction['id']))
payment.company = sale.company
payment.journal = sale.web_shop.get_payment_journal(
transaction['amountSet']['presentmentMoney']['currencyCode'],
cls._get_shopify_payment_journal_pattern(
sale, transaction))
if transaction['kind'] == 'REFUND':
payment.kind = 'payable'
else:
payment.kind = 'receivable'
payment.amount = Decimal(
transaction['amountSet']['presentmentMoney']['amount'])
payment.origin = sale
payment.party = sale.party
return payment
@classmethod
def get_from_shopify(cls, sale, order):
id2payments = {}
to_process = defaultdict(list)
transactions = [
t for t in order['transactions'] if t['status'] == 'SUCCESS']
# Order transactions to process parent first
kinds = ['AUTHORIZATION', 'CAPTURE', 'SALE', 'VOID', 'REFUND']
transactions.sort(key=lambda t: kinds.index(t['kind']))
amounts = defaultdict(Decimal)
for transaction in transactions:
if (transaction['kind'] not in {'AUTHORIZATION', 'SALE'}
and not (transaction['kind'] == 'REFUND'
and not transaction['parentTransaction'])):
continue
payments = cls.search([
('shopify_identifier', '=', gid2id(transaction['id'])),
])
if payments:
payment, = payments
else:
payment = cls._get_from_shopify(sale, transaction)
to_process[payment.company, payment.journal].append(payment)
id2payments[gid2id(transaction['id'])] = payment
amounts[gid2id(transaction['id'])] = Decimal(
transaction['amountSet']['presentmentMoney']['amount'])
cls.save(list(id2payments.values()))
for (company, journal), payments in to_process.items():
cls.submit(payments)
cls.process(payments)
captured = defaultdict(Decimal)
voided = defaultdict(Decimal)
refunded = defaultdict(Decimal)
for transaction in transactions:
if transaction['kind'] == 'SALE':
payment = id2payments[gid2id(transaction['id'])]
captured[payment] += Decimal(
transaction['amountSet']['presentmentMoney']['amount'])
elif transaction['kind'] == 'CAPTURE':
payment = id2payments[
gid2id(transaction['parentTransaction']['id'])]
id2payments[gid2id(transaction['id'])] = payment
captured[payment] += Decimal(
transaction['amountSet']['presentmentMoney']['amount'])
elif transaction['kind'] == 'VOID':
payment = id2payments[
gid2id(transaction['parentTransaction']['id'])]
voided[payment] += Decimal(
transaction['amountSet']['presentmentMoney']['amount'])
elif transaction['kind'] == 'REFUND':
if not transaction['parentTransaction']:
payment = id2payments[gid2id(transaction['id'])]
else:
payment = id2payments[
gid2id(transaction['parentTransaction']['id'])]
captured[payment] -= Decimal(
transaction['amountSet']['presentmentMoney']['amount'])
refunded[payment] += Decimal(
transaction['amountSet']['presentmentMoney']['amount'])
to_save = []
for payment in id2payments.values():
if payment.kind == 'payable':
amount = refunded[payment]
else:
amount = captured[payment]
if payment.amount != amount:
payment.amount = captured[payment]
to_save.append(payment)
cls.proceed(to_save)
cls.save(to_save)
to_succeed, to_fail, to_proceed = set(), set(), set()
for transaction_id, payment in id2payments.items():
amount = captured[payment] + voided[payment] + refunded[payment]
if amounts[transaction_id] == amount:
if payment.amount:
if payment.state != 'succeeded':
to_succeed.add(payment)
else:
if payment.state != 'failed':
to_fail.add(payment)
elif payment.state != 'processing':
to_proceed.add(payment)
cls.fail(to_fail)
cls.proceed(to_proceed)
cls.succeed(to_succeed)
return list(id2payments.values())
class PaymentJournal(metaclass=PoolMeta):
__name__ = 'account.payment.journal'
@classmethod
def __setup__(cls):
super().__setup__()
cls.process_method.selection.append(('shopify', "Shopify"))

View File

@@ -0,0 +1,59 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import re
from trytond.model import MatchMixin, ModelSQL, ModelView, fields
from trytond.pool import PoolMeta
class Carrier(metaclass=PoolMeta):
__name__ = 'carrier'
shopify_selections = fields.One2Many(
'carrier.selection.shopify', 'carrier', "Shopify Selections",
help="Define the criteria that will match this carrier "
"with the Shopify shipping methods.")
def shopify_match(self, shop, shipping_line, pattern=None):
pattern = pattern.copy() if pattern is not None else {}
pattern.setdefault('shop', shop.id)
pattern.setdefault('code', shipping_line.get('code'))
pattern.setdefault('title', shipping_line.get('title'))
for selection in self.shopify_selections:
if selection.match(pattern):
return True
return False
class SelectionShopify(MatchMixin, ModelSQL, ModelView):
__name__ = 'carrier.selection.shopify'
@classmethod
def __setup__(cls):
super().__setup__()
cls.__access__.add('carrier')
carrier = fields.Many2One(
'carrier', "Carrier", required=True, ondelete='CASCADE')
shop = fields.Many2One(
'web.shop', "Shop",
domain=[
('type', '=', 'shopify'),
])
code = fields.Char(
"Code",
help="The code of the shipping line.")
title = fields.Char(
"Title",
help="A regular expression to match the shipping line title.\n"
"Leave empty to allow any title.")
def match(self, pattern, match_none=False):
if 'title' in pattern:
pattern = pattern.copy()
title = pattern.pop('title') or ''
if (self.title is not None
and not re.search(self.title, title, flags=re.I)):
return False
return super().match(pattern, match_none=match_none)

View File

@@ -0,0 +1,23 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data depends="carrier">
<record model="ir.ui.view" id="carrier_view_form">
<field name="model">carrier</field>
<field name="inherit" ref="carrier.carrier_view_form"/>
<field name="name">carrier_form</field>
</record>
<record model="ir.ui.view" id="carrier_selection_shopify_view_form">
<field name="model">carrier.selection.shopify</field>
<field name="type">form</field>
<field name="name">carrier_selection_shopify_form</field>
</record>
<record model="ir.ui.view" id="carrier_selection_shopify_view_list">
<field name="model">carrier.selection.shopify</field>
<field name="type">tree</field>
<field name="name">carrier_selection_shopify_list</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,192 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from urllib.parse import urljoin
from trytond.i18n import lazy_gettext
from trytond.model import fields
from trytond.pool import Pool
from trytond.pyson import Eval
def id2gid(resouce, id):
return f'gid://shopify/{resouce}/{id}'
def gid2id(gid):
_, id = gid[len('gid://shopify/'):].split('/', 1)
return int(id)
class IdentifierMixin:
__slots__ = ()
shopify_identifier_signed = fields.Integer(
lazy_gettext('web_shop_shopify.msg_shopify_identifier'))
shopify_identifier_signed._sql_type = 'BIGINT'
shopify_identifier = fields.Function(fields.Integer(
lazy_gettext('web_shop_shopify.msg_shopify_identifier')),
'get_shopify_identifier', setter='set_shopify_identifier',
searcher='search_shopify_identifier')
shopify_identifier_char = fields.Function(fields.Char(
lazy_gettext('web_shop_shopify.msg_shopify_identifier')),
'get_shopify_identifier', setter='set_shopify_identifier',
searcher='search_shopify_identifier')
shopify_url = fields.Function(fields.Char(
lazy_gettext('web_shop_shopify.msg_shopify_url'),
states={
'invisible': ~Eval('shopify_url'),
}),
'get_shopify_url')
def get_shopify_identifier(self, name):
if self.shopify_identifier_signed is not None:
value = self.shopify_identifier_signed + (1 << 63)
if name == 'shopify_identifier_char':
value = str(value)
return value
@classmethod
def set_shopify_identifier(cls, records, name, value):
if value is not None:
value = int(value) - (1 << 63)
cls.write(records, {
'shopify_identifier_signed': value,
})
@classmethod
def search_shopify_identifier(cls, name, domain):
_, operator, value = domain
if operator in {'in', 'not in'}:
value = [
int(v) - (1 << 63) if v is not None else None for v in value]
elif value is not None:
value = int(value) - (1 << 63)
return [('shopify_identifier_signed', operator, value)]
def get_shopify_url(self, name):
if (getattr(self, 'shopify_resource', None)
and getattr(self, 'web_shop', None)
and self.shopify_identifier_char):
return urljoin(
self.web_shop.shopify_url + '/admin/',
f'{self.shopify_resource}/{self.shopify_identifier_char}')
@classmethod
def copy(cls, records, default=None):
if default is None:
default = {}
else:
default = default.copy()
default.setdefault('shopify_identifier_signed')
return super().copy(records, default=default)
class IdentifiersUpdateMixin:
__slots__ = ()
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields = set()
@classmethod
def set_shopify_to_update(cls, records):
pool = Pool()
Identifier = pool.get('web.shop.shopify_identifier')
identifiers = cls.get_shopify_identifier_to_update(records)
Identifier.write(identifiers, {
'to_update': True,
})
@classmethod
def get_shopify_identifier_to_update(cls, records):
raise NotImplementedError
@classmethod
def on_modification(cls, mode, records, field_names=None):
super().on_modification(mode, records, field_names=field_names)
if mode in {'create', 'delete'}:
cls.set_shopify_to_update(records)
elif mode == 'write':
if field_names & cls._shopify_fields:
cls.set_shopify_to_update(records)
class IdentifiersMixin(IdentifiersUpdateMixin):
__slots__ = ()
shopify_identifiers = fields.One2Many(
'web.shop.shopify_identifier', 'record',
lazy_gettext('web_shop_shopify.msg_shopify_identifiers'),
readonly=True)
def get_shopify_identifier(self, web_shop):
for record in self.shopify_identifiers:
if record.web_shop == web_shop:
return record.shopify_identifier
def set_shopify_identifier(self, web_shop, identifier=None):
pool = Pool()
Identifier = pool.get('web.shop.shopify_identifier')
for record in self.shopify_identifiers:
if record.web_shop == web_shop:
if not identifier:
Identifier.delete([record])
return
else:
if record.shopify_identifier != identifier:
record.shopify_identifier = identifier
record.save()
return record
if identifier:
record = Identifier(record=self, web_shop=web_shop)
record.shopify_identifier = identifier
record.save()
return record
@classmethod
def search_shopify_identifier(cls, web_shop, identifier):
records = cls.search([
('shopify_identifiers', 'where', [
('web_shop', '=', web_shop.id),
('shopify_identifier', '=', identifier),
]),
])
if records:
record, = records
return record
def is_shopify_to_update(self, web_shop, **extra):
for record in self.shopify_identifiers:
if record.web_shop == web_shop:
return (record.to_update
or (record.to_update_extra or {}) != extra)
return True
@classmethod
def copy(cls, records, default=None):
if default is None:
default = {}
else:
default = default.copy()
default.setdefault('shopify_identifiers')
return super().copy(records, default=default)
@classmethod
def on_modification(cls, mode, records, field_names=None):
pool = Pool()
Identifier = pool.get('web.shop.shopify_identifier')
super().on_modification(mode, records, field_names=field_names)
if mode == 'delete':
Identifier.delete(
sum((r.shopify_identifiers for r in records), ()))
@classmethod
def get_shopify_identifier_to_update(cls, records):
return sum((list(r.shopify_identifiers) for r in records), [])
def setattr_changed(record, name, value):
if getattr(record, name, None) != value:
setattr(record, name, value)
return True

View File

@@ -0,0 +1,11 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.exceptions import UserError, UserWarning
class ShopifyError(UserError):
pass
class ShopifyCredentialWarning(UserWarning):
pass

View File

@@ -0,0 +1,58 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import shopify
from .shopify_retry import GraphQLException
def deep_merge(d1, d2):
"Merge 2 fields dictionary"
result = d1.copy()
for key, value in d2.items():
if result.get(key):
result[key] = deep_merge(result[key], value)
else:
result[key] = value
return result
def selection(fields):
"Return selection string for the fields dictionary"
def _format(key, value):
if not value:
return key
fields = '\n'.join(_format(k, v) for k, v in value.items())
return f'{key} {{\n{fields}\n}}'
return _format('', fields).strip()
def iterate(query, params, query_name, path=None, data=None):
def getter(data):
if path:
for name in path.split('.'):
data = data[name]
return data
if data is None:
data = shopify.GraphQL().execute(
query, {
**params,
'cursor': None,
})['data'][query_name]
if errors := data.get('userErrors'):
raise GraphQLException({'errors': errors})
while True:
lst = getter(data)
for item in lst['nodes']:
yield item
if not lst['pageInfo']['hasNextPage']:
break
data = shopify.GraphQL().execute(
query, {
**params,
'cursor': lst['pageInfo']['endCursor'],
})['data'][query_name]
if errors := data.get('userErrors'):
raise GraphQLException({'errors': errors})

View File

@@ -0,0 +1,18 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.pool import PoolMeta
class Cron(metaclass=PoolMeta):
__name__ = 'ir.cron'
@classmethod
def __setup__(cls):
super().__setup__()
cls.method.selection.extend([
('web.shop|shopify_update_product', "Update Shopify Products"),
('web.shop|shopify_update_inventory',
"Update Shopify Inventory"),
('web.shop|shopify_fetch_order', "Fetch Shopify Orders"),
('web.shop|shopify_update_order', "Update Shopify Orders"),
])

View File

@@ -0,0 +1,30 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data noupdate="1">
<record model="ir.cron" id="cron_update_product">
<field name="method">web.shop|shopify_update_product</field>
<field name="interval_number" eval="1"/>
<field name="interval_type">days</field>
</record>
<record model="ir.cron" id="cron_update_inventory">
<field name="method">web.shop|shopify_update_inventory</field>
<field name="interval_number" eval="1"/>
<field name="interval_type">hours</field>
</record>
<record model="ir.cron" id="cron_fetch_order">
<field name="method">web.shop|shopify_fetch_order</field>
<field name="interval_number" eval="1"/>
<field name="interval_type">days</field>
</record>
<record model="ir.cron" id="cron_update_order">
<field name="method">web.shop|shopify_update_order</field>
<field name="interval_number" eval="1"/>
<field name="interval_type">days</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,443 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr "Seleccions de Shopify"
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr "Transportista"
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr "Codi"
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr "Botiga"
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr "Títol"
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr "Opció 1"
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr "Opció 2"
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr "Opció 3"
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr "Identificador únic de Shopify"
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr "SKU"
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr "UdM Shopify"
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr "Producte"
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr "Identificador únic de Shopify"
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr "UdM Shopify"
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr "Magatzems shopify"
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr "URL estat Shopify"
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr "Ajust d'impostos de Shopify"
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr "Venda"
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr "Albarà"
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr "Notificar al client sobre l'enviament"
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr "Token d'accés"
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr "Diaris de pagament"
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr "URL de la botiga"
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr "Versió"
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr "Magatzems"
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr "URL Webhook comandes"
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr "Secret compartit del webhook"
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr "ID de Shopify"
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr "Només zona d'emmagatzematge"
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr "Registre"
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr "A actualitzar"
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr "A actualitzar extra"
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr "Botiga web"
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr "Pasarel·la"
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr "Diari"
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr "Botiga"
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
"Defineix el criteri per a seleccionar el transportista amb els métodes "
"d'enviament de Shopify."
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr "El códi de la línia d'enviament."
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
"Expressió regular per vincular el títol de la línea d'enviament.\n"
"Deixeu en blanc per a qualsevol títol."
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"La cadena que s'utilitzar per identificar el producte en les URLs.\n"
"Deixa-ho en blanc per a que Shopify en generi una."
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "La unitat de mesura del producte a Shopify."
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"La cadena que s'utilitzar per identificar el producte en les URLs.\n"
"Deixa-ho en blanc per a que Shopify en generi una."
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "La unitat de mesura del producte a Shopify."
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr "L'URL que ha de cridar Shopify per als esdeveniments de la comanda."
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr "Marcar per utilitzar només la quantitat de la zona d'emmagatzematge."
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
"El nom de la passarel·la de pagament per a la qual sha dutilitzar el "
"diari."
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr "Selecció transportista Shopify"
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Identificadors de Shopify"
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Identificadors d'albarà"
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
"No s'ha pogut desar la col·lecció personalitzada \"%(category)s\" amb l'error:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"No s'ha pogut desar el compliment de la venda \"%(sale)s\" amb error:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
"No s'ha pogut trobar una orde de copliment per la quantitat \"%(quantity)s\""
" del moviment \"%(move)s\"."
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
"Una transacció de Shopify només es pot importar com a pagament una vegada."
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
"El registre no pot tenir més dun identificador de Shopify per botiga web."
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr "Una comanda de Shopify només es pot importar com a venda una vegada."
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr "Lalbarà no pot tenir més dun identificador de Shopify per venda."
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
"No s'ha pogut establir l'inventari amb error:\n"
"%(error)s"
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr "Cada ubicació de Shopify només es pot enllaçar a un magatzem."
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
"No s'ha pogut crear/actualitzar el producte \"%(template)s\" amb l'error:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
"Per actualitzar el producte \"%(product)s\" a Shopify, heu d'utilitzar una "
"unitat de mesura sense dígits."
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"No s'ha pogut desar el reemborsament per la venda \"%(sale)s\" amb error:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
"Per processar la venda \"%(sale)s\", heu d'establir un producte a la línia "
"\"%(line)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
"Per processar la venda \"%(sale)s\", heu d'establir una única ubicació a la "
"línia \"%(line)s\" de Shopify."
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
"No es pot restablir l'albarà \"%(shipment)s\" a esborrany perquè esta "
"vincular amb un enviament de Shopify."
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
"Per actualitzar els productes de la botiga \"%(shop)s\", heu d'establir la "
"moneda a \"%(shopify_currency)s\" en lloc de \"%(shop_currency)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
"Per actualitzar els productes de la botiga \"%(shop)s\", heu d'establir "
"l'idioma a \"%(shopify_primary_locale)s\" en lloc de \"%(shop_language)s\"."
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr "Estàs segur que vols modificar les credencials de Shopify?"
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr "Identificador de Shopify"
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr "Identificadors de Shopify"
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr "URL Shopify"
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
"El identificador únic de shopify \"%(handle)s\" del producte "
"\"%(template)s\" només pot tenir lletres mínuscules, guions y números."
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr "El identificador únic de shopify ha de ser únic."
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr "Marca per actualitzar"
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Identificadors de Shopify"
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Identificadors d'albarà"
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr "Inventari de productes de Shopify"
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr "Identificador d'albarà de Shopify"
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr "Identificador de Shopify"
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr "Diari de pagament de Shopify"
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr "Obtenir comandes de Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr "Actualitzar l'inventari de Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr "Actualitzar l'inventari de Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr "Actualitzar els productes de Shopify"
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr "Albarà de client"
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr "Criteri"
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr "Opcions de Shopify"
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr "Shopify"

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,450 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr "Shopify Zuordnungen"
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr "Versanddienstleister"
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr "Code"
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr "Webshop"
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr "Überschrift"
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr "Option 1"
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr "Option 2"
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr "Option 3"
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr "Shopfiy-Handle"
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr "SKU"
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr "Shopify Maßeinheit"
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr "Artikel"
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr "Shopify-Handle"
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr "Shopify Maßeinheit"
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr "Shopify-Logistikstandort"
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr "Shopify-Status-URL"
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr "Shopify Steuerkorrektur"
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr "Verkauf"
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr "Lieferung"
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr "Kunden über die Erfüllung benachrichtigen"
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr "Zugangstoken"
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr "Zahlungsjournale"
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr "Shop URL"
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr "Version"
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr "Logistikstandorte"
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr "Endpoint Webhook Bestellung"
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr "Shared Secret Webhook"
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr "Shopfiy ID"
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr "Nur Lagerzone"
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr "Datensatz"
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr "Aktualisierung erforderlich"
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr "Aktualisierung erforderlich Extra"
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr "Webshop"
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr "Gateway"
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr "Journal"
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr "Webshop"
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
"Definiert die Kriterien, nach denen dieser Versanddienstleister den Shopify-"
"Versandarten zugeordnet wird."
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr "Der Code der Versandposition."
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
"Ein regulärer Ausdruck, der mit dem Titel der Versandposition übereinstimmt.\n"
"Leer lassen, um alle Titel zuzulassen."
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"Die Zeichenfolge, die zur Identifizierung des Artikels in URLs verwendet wird.\n"
"Leer lassen, um Shopify die Generierung zu überlassen."
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "Die Maßeinheit des Artikels bei Shopify."
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"Die Zeichenfolge, die zur Identifizierung des Artikels in URLs verwendet wird.\n"
"Leer lassen, um Shopify die Generierung zu überlassen."
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "Die Maßeinheit des Artikels bei Shopify."
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
"Die URL die von Shopify bei Auftragsereignissen aufgerufen werden soll."
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr "Aktivieren, um nur den Bestand aus der Lagerzone zu verwenden."
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
"Der Name des Zahlungsanbieters für den das Journal verwendet werden muss."
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr "Versanddienstleister Auswahl Shopify"
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Shopfiy Identifikatoren"
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Lieferungsidentifikatoren"
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
"Beim Speichern der benutzerdefinierten Zusammenstellung \"%(category)s\" ist folgender Fehler aufgetreten:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"Beim Speichern der Auftragsabwicklung für den Verkauf \"%(sale)s\" ist folgender Fehler aufgetreten:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
"Fulfillment-Auftrag für %(quantity)s der Warenbewegung \"%(move)s\" konnte "
"nicht gefunden werden."
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
"Eine Shopify Transaktion kann nur einmal als Zahlung importiert werden."
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
"Es kann für den Datensatz jeweils nur ein Shopify Identifikator pro Webshop "
"vergeben werden."
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr "Ein Shopify Auftrag kann nur einmal als Verkauf importiert werden."
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
"Für die Lieferung kann jeweils nur einen Shopify Identifikator pro Webshop "
"vergeben werden."
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
"Fehler beim Festlegen des Lagerbestands:\n"
"%(error)s"
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
"Ein Shopify Lagerort kann jeweils nur einem Logistikstandort zugeordnet "
"werden."
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
"Beim Erstellen/Ändern des Artikels \"%(template)s\" ist folgender Fehler aufgetreten:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
"Damit der Artikel \"%(product)s\" auf Shopify aktualisiert werden kann, muss"
" eine Maßeinheit ohne Nachkommastellen verwendet werden."
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"Beim Speichern der Erstattung für den Verkauf \"%(sale)s\" ist folgender Fehler aufgetreten:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
"Damit der Verkauf \"%(sale)s\" ausgeführt werden kann, muss ein Artikel auf "
"Position \"%(line)s\" erfasst werden."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
"Damit der Verkauf \"%(sale)s\" ausgeführt werden kann, muss ein "
"Logistikstandort für die Position \"%(line)s\" in Shopify erfasst werden."
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
"Sie können die Sendung \"%(shipment)s\" nicht auf Entwurf zurücksetzen, da "
"sie mit einer Shopify-Auftragsabwicklung verknüpft ist."
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
"Damit die Artikel im Webshop \"%(shop)s\" aktualisiert werden können, muss "
"die Währung von \"%(shop_currency)s\" auf \"%(shopify_currency)s\" geändert "
"werden."
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
"Damit die Artikel für den Webshop \"%(shop)s\" aktualisiert werden können, "
"muss die Sprache von \"%(shop_language)s\" auf "
"\"%(shopify_primary_locale)s\" geändert werden."
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr "Möchten Sie die Shopify-Anmeldeinformationen wirklich ändern?"
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr "Shopify Identifikator"
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr "Shopify Identifikatoren"
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr "Shopify-URL"
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
"Der Shopify-Handle \"%(handle)s\" des Artikels \"%(template)s\" darf nur "
"Kleinbuchstaben, Bindestriche und Zahlen enthalten."
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr "Der Shopify-Handle des Artikels muss eindeutig sein."
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr "Zur Aktualisierung markieren"
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Shopify Identifikatoren"
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Lieferungsidentifikatoren"
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr "Artikel Shopify Bestandsartikel"
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr "Lager Lieferung Shopify-Identifikator"
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr "Webshop Shopify-Identifikator"
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr "Webshop Shopify Zahlungsjournal"
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr "Shopify Aufträge abrufen"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr "Shopify Lagerinformationen aktualisieren"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr "Shopify Aufträge aktualisieren"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr "Shopify Artikel aktualisieren"
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr "Kundenlieferung"
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr "Kriterien"
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr "Shopify Optionen"
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr "Shopify"

View File

@@ -0,0 +1,444 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr "Selecciones de Shopify"
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr "Transportista"
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr "Código"
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr "Tienda"
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr "Título"
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr "Opción 1"
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr "Opción 2"
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr "Opción 3"
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr "Identificador único de Shopify"
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr "SKU"
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr "UdM Shopify"
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr "Producto"
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr "Identificador único de shopify"
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr "UdM Shopify"
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr "Almacenes shopify"
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr "URL estado Shopify"
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr "Ajuste de impuestos de Shopify"
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr "Venta"
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr "Albarán"
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr "Notificar al cliente sobre el envio"
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr "Token de acceso"
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr "Diarios de pagos"
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr "URL de la tienda"
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr "Versión"
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr "Almacenes"
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr "URL Webhook Ordenes"
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr "Secreto compartido del webhook"
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr "ID de Shopify"
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr "Solo zona de almacenamiento"
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr "Registro"
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr "A actualizar"
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr "A actualizar extra"
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr "Tienda web"
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr "Pasarela"
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr "Diario"
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr "Tienda"
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
"Define el critera que seleccionar este transportista con los métodos de "
"envío de Shopify."
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr "El código de la línea de envío."
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
"Una expresión regular para vincular el titulo de la linea de envio.\n"
"Dejar en blanco para cualquier titulo."
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"La cadena que se utilitza para identificar el producto en las URLs.\n"
"Dejar en blanco para que Shopify genere uno."
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "La unidad de medida del producto en Shopify."
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"La cadena que se utilitza para identificar el producto en las URLs.\n"
"Dejar en blanco para que Shopify genere uno."
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "La unidad de medida del producto en Shopify."
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr "La URL que será llamada por Shopify para eventos de pedidos."
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr "Marcar para usar solo la cantidad de la zona de almacenamiento."
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
"El nombre de la pasarela de pago para la que se debe utilizar el diario."
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr "Selección transportista Shopify"
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Identificadores de Shopify"
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Identificadores de albarán"
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
"No se ha podido guardar la colección personalizada \"%(category)s\" con el error:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"No se ha podido guardar el cumplimiento para la venta \"%(sale)s\" con el error:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
"No se ha podido encontrar una orden de cumplimiento para la cantidad "
"%(quantity)s del movimiento \"%(move)s\"."
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr "Una transacción de Shopify solo se puede importar como pago una vez."
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
"El registro no puede tener más de un identificador de Shopify por tienda "
"web."
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr "Un pedido de Shopify solo se puede importar como venta una vez."
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
"El albarán no puede tener más de un identificador de Shopify por venta."
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
"No se ha podido establecer el inventario con el error:\n"
"%(error)s"
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr "Cada ubicación de Shopify solo se puede vincular a un almacén."
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
"No se ha podido crear/actualizar el producto \"%(template)s\" con el error:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
"Para actualizar el producto \"%(product)s\" en Shopify, debe usar una unidad"
" de medida sin dígitos."
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"No se ha podido guardar el reembolso de la venta \"%(sale)s\" con el error:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
"Para procesar la venta \"%(sale)s\" debe establecer un producto en la línea "
"\"%(line)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
"Para procesar la venta \"%(sale)s\" debe establecer un ubicación única en la"
" línea \"%(line)s\" de Shopify."
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
"No se puede restablecer el albarán \"%(shipment)s\" a borrador porqué esta "
"vinculado con un envio de Shopify."
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
"Para actualizar los productos de la tienda \"%(shop)s\", debe establecer la "
"moneda \"%(shopify_currency)s\" en lugar de \"%(shop_currency)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
"Para actualizar los productos de la tienda \"%(shop)s\", debe establecer el "
"idioma \"%(shopify_primary_locale)s\" en lugar de \"%(shop_language)s\"."
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr "¿Está seguro de que desea modificar las credenciales de Shopify?"
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr "Identificador de Shopify"
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr "Identificadores de Shopify"
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr "URL Shopify"
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
"El identificador único de shopify \"%(handle)s\" del producto "
"\"%(template)s\" solo puede contenter letras en minúsculas, guiones y "
"numeros."
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr "El identificador único de Shopify del producto debe ser único."
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr "Marcar para actualizar"
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Identificadores de Shopify"
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Identificadores de albarán"
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr "Inventario de productos de Shopify"
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr "Identificador de albarán de Shopify"
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr "Identificador de Shopify"
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr "Diario de pago de Shopify"
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr "Obtener pedidos de Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr "Actualizar el inventario de Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr "Actualizar pedidos de Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr "Actualizar productos de Shopify"
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr "Albarán de cliente"
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr "Criterio"
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr "Opciones de Shopify"
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr "Shopify"

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,452 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr "Sélections Shopify"
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr "Transporteur"
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr "Code"
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr "Boutique"
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr "Titre"
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr "Option 1"
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr "Option 2"
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr "Option 3"
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr "Poignée Shopify"
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr "UGS"
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr "UDM Shopify"
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr "Produit"
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr "Poignée Shopify"
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr "UDM Shopify"
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr "Entrepôt Shopify"
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr "URL de statut Shopify"
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr "Ajustement de tax Shopify"
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr "Vente"
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr "Expédition"
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr "Informer le client de la livraison"
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr "Jeton d'accès"
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr "Journaux de paiement"
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr "URL de la boutique"
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr "Version"
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr "Entrepôts"
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr "Point de terminaison du webhook de commande"
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr "Secret partagé du webhook"
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr "ID Shopify"
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr "Zone de magasin uniquement"
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr "Enregistrement"
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr "À mettre à jour"
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr "Supplément à mettre à jour"
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr "Boutique en ligne"
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr "Passerelle"
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr "Journal"
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr "Boutique"
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
"Définit les critères qui permettront d'associer ce transporteur aux méthodes"
" d'expédition de Shopify."
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr "Le code de la ligne d'expédition."
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
"Expression régulière permettant de trouver le titre de la ligne d'expédition.\n"
"Laissez vide pour autoriser n'importe quel titre."
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"La chaîne de caractères permettant d'identifier le produit dans 'lURL.\n"
"Laissez vide pour que Shopify en génère une."
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "L'unité de mesure du produit sur Shopify."
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"La chaîne de caractères permettant d'identifier le produit dans 'lURL.\n"
"Laissez vide pour que Shopify en génère une."
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "L'unité de mesure du produit sur Shopify."
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr "L'URL à appeler par Shopify pour les événements de commande."
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr "Cochez pour n'utiliser que la quantité de la zone de magasin."
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
"Le nom de la passerelle de paiement pour laquelle le journal doit être "
"utilisé."
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr "Sélection de transporteur Shopify"
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Identifiants Shopify"
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Identifiants d'expédition"
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
"Échec de l'enregistrement de la collection personnalisée « %(category)s » avec l'erreur :\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"Échec de l'enregistrement du traitement pour la vente « %(sale)s » avec l'erreur :\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
"Impossible de trouver la commande d'exécution pour %(quantity)s du mouvement"
" « %(move)s »."
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
"Une transaction Shopify ne peut être importée qu'une seule fois en tant que "
"paiement."
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
"L'enregistrement ne peut pas avoir plus d'un identifiant Shopify par "
"boutique en ligne."
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
"Une commande Shopify ne peut être importée qu'une seule fois en tant que "
"vente."
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
"L'expédition ne peut pas avoir plus d'un identifiant Shopify par vente."
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
"Échec de la configuration de l'inventaire avec lerrer :\n"
"%(error)s"
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr "Chaque emplacement Shopify ne peut être lié qu'à un seul entrepôt."
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
"Échec de la création/mise à jour du produit « %(template)s » avec l'erreur :\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
"Pour mettre à jour le produit « %(product)s » sur Shopify, vous devez "
"utiliser une unité de mesure sans décimales."
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"Échec de l'enregistrement du remboursement pour la vente « %(sale)s » avec l'erreur :\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
"Pour traiter la vente « %(sale)s » vous devez définir un produit sur la "
"ligne « %(line)s »."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
"Pour traiter la vente « %(sale)s », vous devez définir un emplacement unique"
" pour la ligne « %(line)s » sur Shopify."
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
"Vous ne pouvez pas réinitialiser l'expédition \"%(shipment)s\" à l'état de "
"brouillon car elle est liée à une expédition Shopify."
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
"Pour mettre à jour les produits de la boutique « %(shop)s », vous devez "
"mettre la devise à « %(shopify_currency)s » au lieu de "
"« %(shop_currency)s »."
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
"Pour mettre à jour les produits de la boutique « %(shop)s », vous devez "
"mettre la langue à « %(shopify_primary_locale)s » au lieu de "
"« %(shop_language)s »."
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
"Êtes-vous sûr de vouloir modifier les informations d'identification de "
"Shopify ?"
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr "Identifiant Shopify"
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr "Identifiants Shopify"
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr "URL Shopify"
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
"La poignée Shopify « %(handle)s » du produit « %(template)s » ne peut "
"contenir que des lettres minuscules, des tirets et des chiffres."
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr "La poignée du produit sur Shopify doit être unique."
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr "Définir à mettre à jour"
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Identifiants Shopify"
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Identifiants d'expédition"
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr "Article d'inventaire Shopify du produit"
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr "Identifiant Shopify d'expédition de stock"
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr "Identifiant Shopify de la boutique en ligne"
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr "Journal des paiements Shopify de la boutique en ligne"
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr "Récupérer les commandes Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr "Mettre à jour l'inventaire Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr "Mettre à jour les commandes Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr "Mettre à jour les produits Shopify"
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr "Expédition cliente"
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr "Critères"
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr "Options Shopify"
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr "Shopify"

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,406 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
#, fuzzy
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr "Toko"
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr "Produk"
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr "Versi"
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr "Jurnal"
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr "Toko"
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,406 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
#, fuzzy
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr "Magazzini"
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr "Magazzini"
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,442 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr "Shopify opties"
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr "Koerier"
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr "Code"
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr "Winkel"
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr "Titel"
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr "Optie 1"
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr "Optie 2"
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr "Optie 3"
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr "Shopify koppeling"
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr "SKU"
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr "Shopify maateenheid"
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr "Product"
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr "Shopify koppeling"
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr "Shopify maateenheid"
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr "Shopify magazijnen"
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr "Shopify status URL"
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr "Shopify Belastingaanpassing"
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr "Verkoop"
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr "Levering"
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr "Informeer de klant over de afhandeling"
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr "Toegangssleutel"
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr "Betalingsdagboeken"
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr "Winkel-URL"
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr "Versie"
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr "Magazijnen"
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr "Webhook order eindpunt"
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr "Webhook gedeeld geheim"
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr "Shopify-ID"
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr "Enige opslagzone"
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr "Record"
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr "Bijwerken"
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr "Extra bijwerken"
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr "Webwinkel"
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr "poort"
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr "Dagboek"
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr "Winkel"
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
"Definieer de criteria die ervoor zorgen dat deze vervoerder overeenkomt met "
"de verzendmethoden van Shopify."
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr "De code van de verzend regel."
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
"Een reguliere expressie die overeenkomt met de titel van de verzendregel.\n"
"Laat dit veld leeg om elke titel toe te staan."
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"De tekst die wordt gebruikt om het product in URL's te identificeren.\n"
"Laat dit veld leeg zodat Shopify er zelf een kan genereren."
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "De maateenheid van het product in Shopify."
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
"De tekst die wordt gebruikt om het product in URL's te identificeren.\n"
"Laat dit veld leeg zodat Shopify er zelf een kan genereren."
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "De maateenheid van het product in Shopify."
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr "De url die aangeroepen wordt door Shopify voor order gebeurtenissen."
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr "Vink aan om alleen de hoeveelheid van de opslagzone te gebruiken."
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
"De naam van de betalingsgateway waarvoor het journaal moet worden gebruikt."
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr "Koerier selectie Shopify"
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Shopify-ID's"
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Zendings-ID's"
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
"De volgende fout is opgetreden tijdens het opslaan van de gepersonaliseerde compilatie \"%(category)s\":\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"Kan uitvoering voor verkoop \"%(sale)s\" niet opslaan met fout:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr "Kan opdracht voor %(quantity)s van boeking \"%(move)s\" niet vinden."
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
"Een shopify-transactie kan slechts één keer als betaling worden "
"geïmporteerd."
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr "Het record kan niet meer dan één Shopify-ID per webshop bevatten."
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
"Een Shopify-bestelling kan slechts één keer als verkoop worden geïmporteerd."
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr "De zending mag niet meer dan één Shopify-ID per verkoop hebben."
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
"Inventaris instellen mislukt met fout:\n"
"%(error)s"
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr "Elke Shopify-locatie kan slechts aan één magazijn worden gekoppeld."
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
"Het aanmaken/updaten van product \"%(template)s\" is mislukt met foutmelding:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
"Om product \"%(product)s\" op Shopify bij te werken, moet er een maateenheid"
" gebruikt worden zonder decimalen."
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"De volgende fout is opgetreden tijdens het opslaan van het tegoed voor de verkoop \"%(sale)s\":\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
"Om de verkoop \"%(sale)s\" te verwerken, moet u een product instellen op de "
"regel \"%(line)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
"Om de verkoop \"%(sale)s\" te verwerken, moet u een unieke locatie instellen"
" voor de regel \"%(line)s\" op Shopify."
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
"U kunt verzending \"%(shipment)s\" niet terugzetten naar concept, omdat deze"
" is gekoppeld aan een Shopify afhandeling."
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
"Om producten in de winkel \"%(shop)s\" bij te werken, moet u de valuta "
"instellen op \"%(shopify_currency)s\" in plaats van \"%(shop_currency)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
"Om producten in de winkel \"%(shop)s\" bij te werken, moet u de taal "
"instellen op \"%(shopify_primary_locale)s\" in plaats van "
"\"%(shop_language)s\"."
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr "Weet u zeker dat u de inloggegevens bij Shopify wil wijzigen?"
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr "Shopify-ID"
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr "Shopify-ID's"
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr "Shopify URL"
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
"De Shopify koppeling \"%(handle)s\" van product \"%(template)s\" mag alleen "
"kleine letters, koppeltekens en cijfers bevatten."
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr "De Shopify koppeling van het product moet uniek zijn."
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr "Instellen om te updaten"
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Shopify-ID's"
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Zendings-ID's"
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr "Product shopify voorraaditem"
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr "Voorraad shopify identificatie"
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr "Webshop shopify identificatie"
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr "Webwinkel shopify dagboek betaling"
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr "Shopify-bestellingen ophalen"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr "Shopify-inventaris bijwerken"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr "Shopify-bestellingen bijwerken"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr "Update Shopify-producten"
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr "Klant zending"
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr "Criteria"
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr "Shopify-opties"
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr "Shopify"

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,436 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr "Opções do Shopify"
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
#, fuzzy
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr "Loja"
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr "Opção 1"
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr "Opção 2"
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr "Opção 3"
#, fuzzy
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr "ID da Shopify"
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr "SKU"
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr "Shopify UoM"
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr "Produto"
#, fuzzy
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr "ID da Shopify"
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr "Shopify UoM"
#, fuzzy
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr "Armazéms"
#, fuzzy
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr "Shopify UoM"
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr "Ajuste de Impostos da Shopify"
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr "Venda"
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr "Remessa"
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr "Token de Acesso"
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr "Diários de Pagamento"
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr "URL da Loja"
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr "Versão"
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr "Armazéms"
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr "Endpoint do Pedido do Webhook"
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr "Segredo Compartilhado do Webhook"
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr "ID da Shopify"
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr "Apenas Zona de Armazenamento"
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr "Registro"
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr "Para atualizar"
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr "Por Atualizar Extra"
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr "Loja Virtual"
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr "Gateway"
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr "Diário"
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr "Loja"
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "A Unidade de Medida do Produto no Shopify."
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr "A Unidade de Medida do Produto no Shopify."
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr "A URL a ser Chamada pelo Shopify para Eventos de Pedidos."
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr "Marque para usar Somente a Quantidade da Zona de Armazenamento."
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr "O Nome do Gateway de Pagamento para o qual o Diário Deve ser Usado."
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Identificadores do Shopify"
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Identificadores de Remessa"
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
"Falha ao Salvar a Coleção Personalizada \"%(category)s\" com erro:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"Falha ao Salvar o Atendimento da Venda \"%(sale)s\" com erro:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
"Falha ao Encontrar a ordem de Atendimento para %(quantity)s do Movimento "
"\"%(move)s\"."
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
"Uma Transação do Shopify só pode ser Importada como Pagamento uma Vez."
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
"O registro não Pode ter Mais de um Identificador Shopify por Loja Virtual."
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr "Um pedido da Shopify só Pode ser Importado como uma Venda uma Vez."
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr "A Remessa não Pode ter Mais de um Identificador Shopify por Venda."
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
"Falha ao Salvar a Variante \"%(product)s\" com erro:\n"
"%(error)s"
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr "Cada localização da Shopify só pode ser Vinculado a um Armazém."
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
"Falha ao Salvar o Produto \"%(template)s\" com erro:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
"Para Atualizar o Produto \"%(product)s\" no Shopify, Você deve usar uma "
"Unidade de Medida sem Dígitos."
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
"Falha ao Salvar o Eeembolso da Venda \"%(sale)s\" com erro:\n"
"%(error)s"
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
"Para Processar a Venda \"%(sale)s\" Você deve Definir um Produto na Linha "
"\"%(line)s\"."
#, fuzzy, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
"Para Processar a Venda \"%(sale)s\" Você deve Definir um Produto na Linha "
"\"%(line)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
"Para Atualizar Produtos na loja \"%(shop)s\", Você deve Definir a Moeda como"
" \"%(shopify_currency)s\" em vez de \"%(shop_currency)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
"Para Atualizar Produtos na Loja \"%(shop)s\", Você deve definir o Idioma "
"para \"%(shopify_primary_locale)s\" em vez de \"%(shop_language)s\"."
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr "Tem Certeza de Que Deseja Modificar as Credenciais do Shopify?"
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr "Identificador do Shopify"
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr "Identificadores do Shopify"
#, fuzzy
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr "URL da Loja"
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr "Definido para Atualizar"
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr "Identificadores do Shopify"
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr "Identificadores de Remessa"
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr "Item de Inventário do Produto Shopify"
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr "Identificador Shopify de Remessa de Estoque"
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr "Identificador Shopify da Loja Virtual"
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr "Diário de Pagamentos da Loja Virtual Shopify"
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr "Obter Pedidos do Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr "Atualizar inventário do Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr "Atualizar Pedidos do Shopify"
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr "Atualizar Produtos do Shopify"
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr "Remessa ao Cliente"
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr "Shopify"
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr "Opções do Shopify"
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr "Shopify"

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,405 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:carrier,shopify_selections:"
msgid "Shopify Selections"
msgstr ""
msgctxt "field:carrier.selection.shopify,carrier:"
msgid "Carrier"
msgstr ""
msgctxt "field:carrier.selection.shopify,code:"
msgid "Code"
msgstr ""
msgctxt "field:carrier.selection.shopify,shop:"
msgid "Shop"
msgstr ""
msgctxt "field:carrier.selection.shopify,title:"
msgid "Title"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option1:"
msgid "Option 1"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option2:"
msgid "Option 2"
msgstr ""
msgctxt "field:product.attribute.set,shopify_option3:"
msgid "Option 3"
msgstr ""
msgctxt "field:product.product,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.product,shopify_sku:"
msgid "SKU"
msgstr ""
msgctxt "field:product.product,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:product.shopify_inventory_item,product:"
msgid "Product"
msgstr ""
msgctxt "field:product.template,shopify_handle:"
msgid "Shopify Handle"
msgstr ""
msgctxt "field:product.template,shopify_uom:"
msgid "Shopify UoM"
msgstr ""
msgctxt "field:sale.line,shopify_warehouse:"
msgid "Shopify Warehouse"
msgstr ""
msgctxt "field:sale.sale,shopify_status_url:"
msgid "Shopify Status URL"
msgstr ""
msgctxt "field:sale.sale,shopify_tax_adjustment:"
msgid "Shopify Tax Adjustment"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,sale:"
msgid "Sale"
msgstr ""
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
msgid "Shipment"
msgstr ""
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
msgid "Notify Customer about Fulfillment"
msgstr ""
msgctxt "field:web.shop,shopify_password:"
msgid "Access Token"
msgstr ""
msgctxt "field:web.shop,shopify_payment_journals:"
msgid "Payment Journals"
msgstr ""
msgctxt "field:web.shop,shopify_url:"
msgid "Shop URL"
msgstr ""
msgctxt "field:web.shop,shopify_version:"
msgid "Version"
msgstr ""
msgctxt "field:web.shop,shopify_warehouses:"
msgid "Warehouses"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
msgid "Webhook Order Endpoint"
msgstr ""
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
msgid "Webhook Shared Secret"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_id:"
msgid "Shopify ID"
msgstr ""
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Only storage zone"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,record:"
msgid "Record"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update:"
msgid "To Update"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
msgid "To Update Extra"
msgstr ""
msgctxt "field:web.shop.shopify_identifier,web_shop:"
msgid "Web Shop"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
msgid "Gateway"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,journal:"
msgid "Journal"
msgstr ""
msgctxt "field:web.shop.shopify_payment_journal,shop:"
msgid "Shop"
msgstr ""
msgctxt "help:carrier,shopify_selections:"
msgid ""
"Define the criteria that will match this carrier with the Shopify shipping "
"methods."
msgstr ""
msgctxt "help:carrier.selection.shopify,code:"
msgid "The code of the shipping line."
msgstr ""
msgctxt "help:carrier.selection.shopify,title:"
msgid ""
"A regular expression to match the shipping line title.\n"
"Leave empty to allow any title."
msgstr ""
msgctxt "help:product.product,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.product,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:product.template,shopify_handle:"
msgid ""
"The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one."
msgstr ""
msgctxt "help:product.template,shopify_uom:"
msgid "The Unit of Measure of the product on Shopify."
msgstr ""
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
msgid "The URL to be called by Shopify for Order events."
msgstr ""
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
msgid "Check to use only the quantity of the storage zone."
msgstr ""
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
msgid "The payment gateway name for which the journal must be used."
msgstr ""
msgctxt "model:carrier.selection.shopify,string:"
msgid "Carrier Selection Shopify"
msgstr ""
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_custom_collection_fail"
msgid ""
"Failed to save custom collection \"%(category)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_fail"
msgid ""
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
msgid "A shopify transaction can only be imported as payment once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
msgid "The record cannot have more than one Shopify identifier per web shop."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
msgid "A Shopify order can only be imported as a sale once."
msgstr ""
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
msgid "The shipment can not have more than one Shopify identifier per sale."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_inventory_set_fail"
msgid ""
"Failed to set inventory with error:\n"
"%(error)s"
msgstr ""
msgctxt "model:ir.message,text:msg_location_id_unique"
msgid "Each Shopify location can only be linked to one warehouse."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_fail"
msgid ""
"Failed to create/update product \"%(template)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
msgid ""
"To update product \"%(product)s\" on Shopify, you must use an unit of "
"measure without digits."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_refund_fail"
msgid ""
"Failed to save refund for sale \"%(sale)s\" with error:\n"
"%(error)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_product"
msgid ""
"To process the sale \"%(sale)s\" you must set a product on the line "
"\"%(line)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
msgid ""
"To process the sale \"%(sale)s\" you must set a unique location for the line"
" \"%(line)s\" on Shopify."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
msgid ""
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
"a Shopify fulfillment."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_currency_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the currency to "
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_shop_locale_different"
msgid ""
"To update products on the shop \"%(shop)s\", you must set the language to "
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
msgid "Are you sure you want to modify Shopify credentials?"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifier"
msgid "Shopify Identifier"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_identifiers"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.message,text:msg_shopify_url"
msgid "Shopify URL"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
msgid ""
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
"only lowercase letters, hyphens, and numbers."
msgstr ""
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
msgid "The Shopify Handle of product must be unique."
msgstr ""
msgctxt ""
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
msgid "Set to Update"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
msgid "Shopify Identifiers"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
msgid "Shipment Identifiers"
msgstr ""
msgctxt "model:product.shopify_inventory_item,string:"
msgid "Product Shopify Inventory Item"
msgstr ""
msgctxt "model:stock.shipment.shopify_identifier,string:"
msgid "Stock Shipment Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_identifier,string:"
msgid "Web Shop Shopify Identifier"
msgstr ""
msgctxt "model:web.shop.shopify_payment_journal,string:"
msgid "Web Shop Shopify Payment Journal"
msgstr ""
msgctxt "selection:account.payment.journal,process_method:"
msgid "Shopify"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Fetch Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Inventory"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Orders"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Update Shopify Products"
msgstr ""
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
msgid "Customer Shipment"
msgstr ""
msgctxt "selection:web.shop,type:"
msgid "Shopify"
msgstr ""
msgctxt "view:carrier.selection.shopify:"
msgid "Criteria"
msgstr ""
msgctxt "view:product.attribute.set:"
msgid "Shopify Options"
msgstr ""
msgctxt "view:web.shop:"
msgid "Shopify"
msgstr ""

View File

@@ -0,0 +1,81 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data grouped="1">
<record model="ir.message" id="msg_shopify_credential_modified">
<field name="text">Are you sure you want to modify Shopify credentials?</field>
</record>
<record model="ir.message" id="msg_shopify_identifier">
<field name="text">Shopify Identifier</field>
</record>
<record model="ir.message" id="msg_shopify_url">
<field name="text">Shopify URL</field>
</record>
<record model="ir.message" id="msg_identifier_record_web_shop_unique">
<field name="text">The record cannot have more than one Shopify identifier per web shop.</field>
</record>
<record model="ir.message" id="msg_location_id_unique">
<field name="text">Each Shopify location can only be linked to one warehouse.</field>
</record>
<record model="ir.message" id="msg_shopify_identifiers">
<field name="text">Shopify Identifiers</field>
</record>
<record model="ir.message" id="msg_identifier_sale_web_shop_unique">
<field name="text">A Shopify order can only be imported as a sale once.</field>
</record>
<record model="ir.message" id="msg_shop_currency_different">
<field name="text">To update products on the shop "%(shop)s", you must set the currency to "%(shopify_currency)s" instead of "%(shop_currency)s".</field>
</record>
<record model="ir.message" id="msg_shop_locale_different">
<field name="text">To update products on the shop "%(shop)s", you must set the language to "%(shopify_primary_locale)s" instead of "%(shop_language)s".</field>
</record>
<record model="ir.message" id="msg_template_shopify_handle_unique">
<field name="text">The Shopify Handle of product must be unique.</field>
</record>
<record model="ir.message" id="msg_template_shopify_handle_invalid">
<field name="text">The Shopify Handle "%(handle)s" of product "%(template)s" can contain only lowercase letters, hyphens, and numbers.</field>
</record>
<record model="ir.message" id="msg_product_shopify_uom_digits">
<field name="text">To update product "%(product)s" on Shopify, you must use an unit of measure without digits.</field>
</record>
<record model="ir.message" id="msg_custom_collection_fail">
<field name="text">Failed to save custom collection "%(category)s" with error:
%(error)s</field>
</record>
<record model="ir.message" id="msg_product_fail">
<field name="text">Failed to create/update product "%(template)s" with error:
%(error)s</field>
</record>
<record model="ir.message" id="msg_inventory_set_fail">
<field name="text">Failed to set inventory with error:
%(error)s</field>
</record>
<record model="ir.message" id="msg_fulfillment_fail">
<field name="text">Failed to save fulfillment for sale "%(sale)s" with error:
%(error)s</field>
</record>
<record model="ir.message" id="msg_refund_fail">
<field name="text">Failed to save refund for sale "%(sale)s" with error:
%(error)s</field>
</record>
<record model="ir.message" id="msg_identifier_payment_unique">
<field name="text">A shopify transaction can only be imported as payment once.</field>
</record>
<record model="ir.message" id="msg_identifier_shipment_sale_unique">
<field name="text">The shipment can not have more than one Shopify identifier per sale.</field>
</record>
<record model="ir.message" id="msg_sale_line_without_product">
<field name="text">To process the sale "%(sale)s" you must set a product on the line "%(line)s".</field>
</record>
<record model="ir.message" id="msg_sale_line_without_warehouse">
<field name="text">To process the sale "%(sale)s" you must set a unique location for the line "%(line)s" on Shopify.</field>
</record>
<record model="ir.message" id="msg_fulfillment_order_line_not_found">
<field name="text">Failed to find fulfillment order for %(quantity)s of move "%(move)s".</field>
</record>
<record model="ir.message" id="msg_shipment_cancelled_draft_shopify">
<field name="text">You cannot reset shipment "%(shipment)s" to draft because it is linked to a Shopify fulfillment.</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,187 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import logging
from trytond.model import sequence_reorder
from trytond.pool import Pool, PoolMeta
from trytond.tools import remove_forbidden_chars
from trytond.tools.email_ import EmailNotValidError, validate_email
from .common import IdentifiersMixin, gid2id, setattr_changed
logger = logging.getLogger(__name__)
class Party(IdentifiersMixin, metaclass=PoolMeta):
__name__ = 'party.party'
@classmethod
def shopify_fields(cls):
return {
'id': None,
'displayName': None,
'email': None,
'phone': None,
'locale': None,
}
@classmethod
def get_from_shopify(cls, shop, customer):
pool = Pool()
ContactMechanism = pool.get('party.contact_mechanism')
Lang = pool.get('ir.lang')
party = cls.search_shopify_identifier(
shop, gid2id(customer['id']))
if not party:
party = cls()
setattr_changed(party, 'name', remove_forbidden_chars(
customer['displayName']))
if customer['locale']:
lang = Lang.get(customer['locale'])
else:
lang = None
setattr_changed(party, 'lang', lang)
contact_mechanisms = list(getattr(party, 'contact_mechanisms', []))
for types, value in [
(['email'], customer['email']),
(['phone', 'mobile'], customer['phone']),
]:
value = remove_forbidden_chars(value)
if not value:
continue
index = len(contact_mechanisms)
for i, contact_mechanism in enumerate(contact_mechanisms):
if (contact_mechanism.type in types
and not contact_mechanism.address):
index = min(i, index)
if (contact_mechanism.value_compact
== contact_mechanism.format_value_compact(
value, contact_mechanism.type)):
contact_mechanisms.insert(
index,
contact_mechanisms.pop(i))
break
else:
if types[0] == 'email':
try:
validate_email(value)
except EmailNotValidError as e:
logger.info("Skip email %s", value, exc_info=e)
continue
contact_mechanisms.insert(index, ContactMechanism(
type=types[0], value=value))
party.contact_mechanisms = sequence_reorder(contact_mechanisms)
# TODO tax_exempt
return party
def get_address_from_shopify(self, shopify_address):
pool = Pool()
Address = pool.get('party.address')
ContactMechanism = pool.get('party.contact_mechanism')
shopify_values = Address.get_shopify_values(shopify_address)
for address in self.addresses:
if address.shopify_values() == shopify_values:
break
else:
address = Address(**shopify_values)
address.party = self
address.save()
contact_mechanisms = list(self.contact_mechanisms)
if phone := remove_forbidden_chars(shopify_address['phone']):
index = len(contact_mechanisms)
for i, contact_mechanism in enumerate(contact_mechanisms):
if (contact_mechanism.type in ['phone', 'mobile']
and contact_mechanism.address == address):
index = min(i, index)
if (contact_mechanism.value_compact
== contact_mechanism.format_value_compact(
phone, contact_mechanism.type)):
contact_mechanisms.insert(
index,
contact_mechanisms.pop(i))
break
else:
contact_mechanisms.insert(index, ContactMechanism(
party=self, address=address,
type='phone', value=phone))
ContactMechanism.save(sequence_reorder(
contact_mechanisms))
return address
class Address(metaclass=PoolMeta):
__name__ = 'party.address'
@classmethod
def shopify_fields(cls):
return {
'name': None,
'company': None,
'address1': None,
'address2': None,
'city': None,
'zip': None,
'countryCodeV2': None,
'provinceCode': None,
'phone': None,
}
@classmethod
def get_shopify_values(self, address):
pool = Pool()
Country = pool.get('country.country')
Subdivision = pool.get('country.subdivision')
SubdivisionType = pool.get('party.address.subdivision_type')
values = {}
values['party_name'] = remove_forbidden_chars(address['name'] or '')
if address['company']:
values['party_name'] += (
f"({remove_forbidden_chars(address['company'])})")
values['street'] = '\n'.join(filter(None, [
address['address1'], address['address2']]))
values['city'] = remove_forbidden_chars(address['city'] or '')
values['postal_code'] = address['zip'] or ''
if address['countryCodeV2']:
country, = Country.search([
('code', '=', address['countryCodeV2']),
], limit=1)
values['country'] = country.id
if address['provinceCode']:
subdivision_code = '-'.join(
[address['countryCodeV2'], address['provinceCode']])
subdivision_domain = [
('country', '=', country.id),
('code', 'like', subdivision_code + '%'),
]
types = SubdivisionType.get_types(country)
if types:
subdivision_domain.append(('type', 'in', types))
subdivisions = Subdivision.search(subdivision_domain, limit=1)
if subdivisions:
subdivision, = subdivisions
values['subdivision'] = subdivision.id
return values
def shopify_values(self):
values = {}
values['party_name'] = self.party_name or ''
values['street'] = self.street or ''
values['city'] = self.city or ''
values['postal_code'] = self.postal_code or ''
if self.country:
values['country'] = self.country.id
if self.subdivision:
values['subdivision'] = self.subdivision.id
return values
class Replace(metaclass=PoolMeta):
__name__ = 'party.replace'
@classmethod
def fields_to_replace(cls):
return super().fields_to_replace() + [
('web.shop.shopify_identifier', 'record'),
]

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="party_view_form">
<field name="model">party.party</field>
<field name="inherit" ref="party.party_view_form"/>
<field name="name">party_form</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,724 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import re
from decimal import Decimal
from urllib.parse import urljoin
import shopify
from sql.conditionals import NullIf
from sql.operators import Equal
from trytond.i18n import gettext
from trytond.model import Exclude, ModelSQL, ModelView, fields
from trytond.modules.product.exceptions import TemplateValidationError
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval, If
from trytond.tools import grouped_slice, slugify
from trytond.transaction import Transaction
from . import graphql
from .common import IdentifiersMixin, IdentifiersUpdateMixin, id2gid
QUERY_COLLECTION = '''\
query GetCollection($id: ID!) {
collection(id: $id) %(fields)s
}'''
QUERY_PRODUCT = '''\
query GetProduct($id: ID!) {
product(id: $id) %(fields)s
}'''
QUERY_VARIANT = '''\
query GetProductVariant($id: ID!) {
productVariant(id: $id) %(fields)s
}'''
class Category(IdentifiersMixin, metaclass=PoolMeta):
__name__ = 'product.category'
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields.add('name')
def get_shopify(self, shop):
shopify_id = self.get_shopify_identifier(shop)
if shopify_id:
shopify_id = id2gid('Collection', shopify_id)
collection = shopify.GraphQL().execute(
QUERY_COLLECTION % {
'fields': graphql.selection({
'id': None,
}),
}, {'id': shopify_id})['data']['collection'] or {}
else:
collection = {}
collection['title'] = self.name[:255]
collection['metafields'] = metafields = []
managed_metafields = shop.managed_metafields()
for key, value in self.get_shopify_metafields(shop).items():
if key not in managed_metafields:
continue
namespace, key = key.split('.', 1)
metafields.append({
'namespace': namespace,
'key': key,
'value': value,
})
return collection
def get_shopify_metafields(self, shop):
return {}
class TemplateCategory(IdentifiersUpdateMixin, metaclass=PoolMeta):
__name__ = 'product.template-product.category'
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields.update(['template', 'category'])
@classmethod
def get_shopify_identifier_to_update(cls, records):
return sum((list(r.template.shopify_identifiers) for r in records), [])
class Template(IdentifiersMixin, metaclass=PoolMeta):
__name__ = 'product.template'
shopify_uom = fields.Many2One(
'product.uom', "Shopify UoM",
states={
'readonly': Bool(Eval('shopify_identifiers', [-1])),
'invisible': ~Eval('salable', False),
},
help="The Unit of Measure of the product on Shopify.")
shopify_handle = fields.Char(
"Shopify Handle",
states={
'invisible': ~Eval('salable', False),
},
help="The string that's used to identify the product in URLs.\n"
"Leave empty to let Shopify generate one.")
@classmethod
def __setup__(cls):
super().__setup__()
t = cls.__table__()
cls._sql_constraints += [
('shopify_handle_unique',
Exclude(t,
(NullIf(t.shopify_handle, ''), Equal)),
'web_shop_shopify.msg_template_shopify_handle_unique'),
]
cls._shopify_fields.update([
'name', 'web_shop_description', 'attribute_set',
'customs_category', 'tariff_codes_category',
'country_of_origin', 'weight', 'weight_uom'])
categories = cls._shopify_uom_categories()
cls.shopify_uom.domain = [
('category', 'in', [Eval(c, -1) for c in categories]),
('digits', '=', 0),
]
@classmethod
def _shopify_uom_categories(cls):
return ['default_uom_category']
def get_shopify_uom(self):
return self.sale_uom
@classmethod
def get_shopify_identifier_to_update(cls, templates):
pool = Pool()
Product = pool.get('product.product')
products = [p for t in templates for p in t.products]
return (super().get_shopify_identifier_to_update(templates)
+ Product.get_shopify_identifier_to_update(products))
def get_shopify(self, shop, categories):
shopify_id = self.get_shopify_identifier(shop)
product = {}
if shopify_id:
shopify_id = id2gid('Product', shopify_id)
product = shopify.GraphQL().execute(
QUERY_PRODUCT % {
'fields': graphql.selection({
'id': None,
'status': None,
}),
}, {'id': shopify_id})['data']['product'] or {}
if product.get('status') == 'ARCHIVED':
product['status'] = 'ACTIVE'
product['title'] = self.name
if self.web_shop_description:
product['descriptionHtml'] = self.web_shop_description
if self.shopify_handle:
product['handle'] = self.shopify_handle
product['productOptions'] = options = []
for i, attribute in enumerate(self.shopify_attributes, 1):
values = set()
for p in self.products:
if p.attributes and attribute.name in p.attributes:
values.add(p.attributes.get(attribute.name))
values = [
{'name': attribute.format(value)}
for value in sorted(values)]
options.append({
'name': attribute.string,
'position': i,
'values': values,
})
product['collections'] = collections = []
for category in categories:
if collection_id := category.get_shopify_identifier(shop):
collections.append(id2gid(
'Collection', collection_id))
product['metafields'] = metafields = []
managed_metafields = shop.managed_metafields()
for key, value in self.get_shopify_metafields(shop).items():
if key not in managed_metafields:
continue
namespace, key = key.split('.', 1)
metafields.append({
'namespace': namespace,
'key': key,
**value
})
return product
def get_shopify_metafields(self, shop):
return {}
@property
def shopify_attributes(self):
if not self.attribute_set:
return []
return filter(None, [
self.attribute_set.shopify_option1,
self.attribute_set.shopify_option2,
self.attribute_set.shopify_option3])
@classmethod
def validate_fields(cls, templates, field_names):
super().validate_fields(templates, field_names)
cls.check_shopify_handle(templates, field_names)
@classmethod
def check_shopify_handle(cls, templates, field_names):
if field_names and 'shopify_handle' not in field_names:
return
for template in templates:
if (template.shopify_handle
and not re.fullmatch(
r'[a-z0-9-]+', template.shopify_handle)):
raise TemplateValidationError(gettext(
'web_shop_shopify.msg_template_shopify_handle_invalid',
template=template.rec_name,
handle=template.shopify_handle,
))
class Template_SaleSecondaryUnit(metaclass=PoolMeta):
__name__ = 'product.template'
@classmethod
def _shopify_uom_categories(cls):
return super()._shopify_uom_categories() + [
'sale_secondary_uom_category']
def get_shopify_uom(self):
uom = super().get_shopify_uom()
if self.sale_secondary_uom and not self.sale_secondary_uom.digits:
uom = self.sale_secondary_uom
return uom
class Product(IdentifiersMixin, metaclass=PoolMeta):
__name__ = 'product.product'
shopify_sku = fields.Function(
fields.Char("SKU"), 'get_shopify_sku', searcher='search_shopify_sku')
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields.update(['code', 'attributes', 'position'])
@classmethod
def get_shopify_identifier_to_update(cls, records):
pool = Pool()
InventoryItem = pool.get('product.shopify_inventory_item')
items = InventoryItem.browse(records)
return (super().get_shopify_identifier_to_update(records)
+ sum((list(i.shopify_identifiers) for i in items), []))
def set_shopify_identifier(self, web_shop, identifier=None):
pool = Pool()
InventoryItem = pool.get('product.shopify_inventory_item')
if not identifier:
inventory_item = InventoryItem(self.id)
inventory_item.set_shopify_identifier(web_shop)
return super().set_shopify_identifier(web_shop, identifier=identifier)
def get_shopify_sku(self, name):
return self.code
@classmethod
def search_shopify_sku(cls, name, clause):
return [('code',) + tuple(clause[1:])]
def get_shopify(
self, shop, sale_price, sale_tax, price, tax,
shop_taxes_included=True):
shopify_id = self.get_shopify_identifier(shop)
if shopify_id:
shopify_id = id2gid('ProductVariant', shopify_id)
variant = shopify.GraphQL().execute(
QUERY_VARIANT % {
'fields': graphql.selection({
'id': None,
}),
}, {'id': shopify_id})['data']['productVariant'] or {}
else:
variant = {}
sale_price = self.shopify_price(
sale_price, sale_tax, taxes_included=shop_taxes_included)
if sale_price is not None:
variant['price'] = str(sale_price.quantize(Decimal('.00')))
else:
variant['price'] = None
price = self.shopify_price(
price, tax, taxes_included=shop_taxes_included)
if price is not None:
variant['compareAtPrice'] = str(
price.quantize(Decimal('.00')))
else:
variant['compareAtPrice'] = None
variant['taxable'] = bool(sale_tax)
for identifier in self.identifiers:
if identifier.type == 'ean':
variant['barcode'] = identifier.code
break
variant['optionValues'] = options = []
attributes = self.attributes or {}
for attribute in self.template.shopify_attributes:
value = attributes.get(attribute.name)
value = attribute.format(value)
options.append({
'optionName': attribute.string,
'name': value,
})
variant['metafields'] = metafields = []
managed_metafields = shop.managed_metafields()
for key, value in self.get_shopify_metafields(shop).items():
if key not in managed_metafields:
continue
namespace, key = key.split('.', 1)
metafields.append({
'namespace': namespace,
'key': key,
'value': value,
})
return variant
def get_shopify_metafields(self, shop):
return {}
def shopify_price(self, price, tax, taxes_included=True):
pool = Pool()
Uom = pool.get('product.uom')
if price is None or tax is None:
return None
if taxes_included:
price += tax
return Uom.compute_price(
self.sale_uom, price, self.shopify_uom,
factor=self.shopify_uom_factor, rate=self.shopify_uom_rate)
@property
def shopify_uom_factor(self):
return None
@property
def shopify_uom_rate(self):
return None
@property
def shopify_quantity(self):
pool = Pool()
Uom = pool.get('product.uom')
quantity = self.forecast_quantity
if quantity < 0:
quantity = 0
return Uom.compute_qty(
self.default_uom, quantity, self.shopify_uom, round=True,
factor=self.shopify_uom_factor, rate=self.shopify_uom_rate)
class ProductURL(metaclass=PoolMeta):
__name__ = 'product.web_shop_url'
def get_url(self, name):
url = super().get_url(name)
if (self.shop.type == 'shopify'
and (handle := self.product.template.shopify_handle)):
url = urljoin(self.shop.shopify_url + '/', f'products/{handle}')
return url
class ShopifyInventoryItem(IdentifiersMixin, ModelSQL, ModelView):
__name__ = 'product.shopify_inventory_item'
product = fields.Function(
fields.Many2One('product.product', "Product"), 'get_product')
@classmethod
def table_query(cls):
return Pool().get('product.product').__table__()
def get_product(self, name):
return self.id
def get_shopify(self, shop, shop_weight_unit=None):
pool = Pool()
SaleLine = pool.get('sale.line')
ModelData = pool.get('ir.model.data')
Uom = pool.get('product.uom')
movable_types = SaleLine.movable_types()
inventory_item = {}
inventory_item['sku'] = self.product.shopify_sku
inventory_item['tracked'] = (
self.product.type in movable_types and not self.product.consumable)
inventory_item['requiresShipping'] = (
self.product.type in movable_types)
if getattr(self.product, 'weight', None) and shop_weight_unit:
units = {}
units['KILOGRAMS'] = ModelData.get_id('product', 'uom_kilogram')
units['GRAMS'] = ModelData.get_id('product', 'uom_gram')
units['POUNDS'] = ModelData.get_id('product', 'uom_pound')
units['OUNCES'] = ModelData.get_id('product', 'uom_ounce')
weight = self.product.weight
weight_unit = self.product.weight_uom
if self.product.weight_uom.id not in units.values():
weight_unit = Uom(units[shop_weight_unit])
weight = Uom.compute_qty(
self.product.weight_uom, weight, weight_unit)
weight_unit = {
v: k for k, v in units.items()}[weight_unit.id]
inventory_item['measurement'] = {
'weight': {
'unit': weight_unit,
'value': weight,
},
}
return inventory_item
class ShopifyInventoryItem_Customs(metaclass=PoolMeta):
__name__ = 'product.shopify_inventory_item'
def get_shopify(self, shop, shop_weight_unit=None):
pool = Pool()
Date = pool.get('ir.date')
inventory_item = super().get_shopify(
shop, shop_weight_unit=shop_weight_unit)
with Transaction().set_context(company=shop.company.id):
today = Date.today()
inventory_item['countryCodeOfOrigin'] = (
self.product.country_of_origin.code
if self.product.country_of_origin else None)
tariff_code = self.product.get_tariff_code(
{'date': today, 'country': None})
inventory_item['harmonizedSystemCode'] = (
tariff_code.code if tariff_code else None)
country_harmonized_system_codes = []
countries = set()
for tariff_code in self.product.get_tariff_codes({'date': today}):
if (tariff_code.country
and tariff_code.country not in countries):
country_harmonized_system_codes.append({
'harmonizedSystemCode': tariff_code.code,
'countryCode': tariff_code.country.code,
})
countries.add(tariff_code.country)
inventory_item['countryHarmonizedSystemCodes'] = (
country_harmonized_system_codes)
return inventory_item
class Product_TariffCode(IdentifiersUpdateMixin, metaclass=PoolMeta):
__name__ = 'product-customs.tariff.code'
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields.update(['product', 'tariff_code'])
@classmethod
def get_shopify_identifier_to_update(cls, records):
pool = Pool()
Template = pool.get('product.template')
Category = pool.get('product.category')
templates = set()
categories = set()
for record in records:
if isinstance(record.product, Template):
templates.add(record.product)
elif isinstance(record.product, Category):
categories.add(record.product)
if categories:
for sub_categories in grouped_slice(list(categories)):
templates.update(Template.search([
('customs_category', 'in',
[c.id for c in sub_categories]),
]))
templates = Template.browse(list(templates))
return Template.get_shopify_identifier_to_update(templates)
class ProductIdentifier(IdentifiersUpdateMixin, metaclass=PoolMeta):
__name__ = 'product.identifier'
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields.update(['product', 'code'])
@classmethod
def get_shopify_identifier_to_update(cls, identifiers):
return sum((
list(i.product.shopify_identifiers) for i in identifiers), [])
class Product_SaleSecondaryUnit(metaclass=PoolMeta):
__name__ = 'product.product'
@property
def shopify_uom_factor(self):
factor = super().shopify_uom_factor
if (self.sale_secondary_uom
and self.shopify_uom.category
== self.sale_secondary_uom.category):
factor = self.sale_secondary_uom_normal_factor
return factor
@property
def shopify_uom_rate(self):
rate = super().shopify_uom_rate
if (self.sale_secondary_uom
and self.shopify_uom.category
== self.sale_secondary_uom.category):
rate = self.sale_secondary_uom_normal_rate
return rate
class AttributeSet(IdentifiersUpdateMixin, metaclass=PoolMeta):
__name__ = 'product.attribute.set'
shopify_option1 = fields.Many2One(
'product.attribute', "Option 1",
domain=[
('id', 'in', Eval('attributes', [])),
If(Eval('shopify_option2'),
('id', '!=', Eval('shopify_option2')),
()),
If(Eval('shopify_option3'),
('id', '!=', Eval('shopify_option3')),
()),
])
shopify_option2 = fields.Many2One(
'product.attribute', "Option 2",
domain=[
('id', 'in', Eval('attributes', [])),
If(Eval('shopify_option1'),
('id', '!=', Eval('shopify_option1')),
('id', '=', None)),
If(Eval('shopify_option3'),
('id', '!=', Eval('shopify_option3')),
()),
],
states={
'invisible': ~Eval('shopify_option1'),
})
shopify_option3 = fields.Many2One(
'product.attribute', "Option 3",
domain=[
('id', 'in', Eval('attributes', [])),
If(Eval('shopify_option1'),
('id', '!=', Eval('shopify_option1')),
()),
If(Eval('shopify_option2'),
('id', '!=', Eval('shopify_option2')),
('id', '=', None)),
],
states={
'invisible': ~Eval('shopify_option2'),
})
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields.update(
['shopify_option1', 'shopify_option2', 'shopify_option3'])
@classmethod
def get_shopify_identifier_to_update(cls, sets):
pool = Pool()
Template = pool.get('product.template')
templates = []
for sub_sets in grouped_slice(sets):
templates.extend(Template.search([
('attribute_set', 'in', [s.id for s in sub_sets]),
]))
return Template.get_shopify_identifier_to_update(templates)
class Attribute(IdentifiersUpdateMixin, metaclass=PoolMeta):
__name__ = 'product.attribute'
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields.add('selection')
domain = [
('type', '!=', 'shopify'),
]
if cls.web_shops.domain:
cls.web_shops.domain = [cls.web_shops.domain, domain]
else:
cls.web_shops.domain = domain
@classmethod
def get_shopify_identifier_to_update(cls, attributes):
pool = Pool()
Set = pool.get('product.attribute.set')
sets = Set.browse(sum((a.sets for a in attributes), ()))
return Set.get_shopify_identifier_to_update(sets)
class Template_Image(metaclass=PoolMeta):
__name__ = 'product.template'
@property
def shopify_images(self):
for image in self.images_used:
if image.web_shop:
yield image
def get_shopify(self, shop, categories):
product = super().get_shopify(shop, categories)
product['files'] = files = []
for image in self.shopify_images:
file = {
'alt': image.description,
'contentType': 'IMAGE',
'filename': image.shopify_name,
}
if image_id := image.get_shopify_identifier(shop):
file['id'] = id2gid('MediaImage', image_id)
else:
file['originalSource'] = self.get_image_url(
_external=True, id=image.id)
files.append(file)
return product
class Product_Image(metaclass=PoolMeta):
__name__ = 'product.product'
@property
def shopify_images(self):
for image in self.images_used:
if image.web_shop:
yield image
def get_shopify(
self, shop, sale_price, sale_tax, price, tax,
shop_taxes_included=True):
variant = super().get_shopify(
shop, sale_price, sale_tax, price, tax,
shop_taxes_included=shop_taxes_included)
for image in self.shopify_images:
file = {
'alt': image.description,
'contentType': 'IMAGE',
'filename': image.shopify_name,
}
if image_id := image.get_shopify_identifier(shop):
file['id'] = id2gid('MediaImage', image_id)
else:
file['originalSource'] = self.get_image_url(
_external=True, id=image.id)
variant['file'] = file
break
else:
variant['file'] = None
return variant
class Image(IdentifiersMixin, metaclass=PoolMeta):
__name__ = 'product.image'
@classmethod
def __setup__(cls):
super().__setup__()
cls._shopify_fields.update(['template', 'product', 'attributes'])
@classmethod
def on_write(cls, images, values):
pool = Pool()
Identifier = pool.get('web.shop.shopify_identifier')
callback = super().on_write(images, values)
if values.keys() & {'image', 'template', 'web_shop'}:
to_delete = []
for image in images:
to_delete.extend(image.shopify_identifiers)
if to_delete:
callback.append(lambda: Identifier.delete(to_delete))
return callback
@classmethod
def get_shopify_identifier_to_update(cls, images):
return (
sum((list(i.template.shopify_identifiers) for i in images), [])
+ sum(
(list(p.shopify_identifiers)
for i in images for p in i.template.products), []))
@property
def shopify_name(self):
if self.product:
name = self.product.name
else:
name = self.template.name
name = slugify(name)
return f'{name}.jpg'
class Image_Attribute(metaclass=PoolMeta):
__name__ = 'product.image'
@property
def shopify_name(self):
name = super().shopify_name
if self.product:
attributes_name = self.product.attributes_name
else:
attributes_name = self.attributes_name
if attributes_name:
name += ' ' + attributes_name
return name

View File

@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="product_template_view_form">
<field name="model">product.template</field>
<field name="inherit" ref="product.template_view_form"/>
<field name="name">product_template_form</field>
</record>
<record model="ir.ui.view" id="product_attribute_set_view_form">
<field name="model">product.attribute.set</field>
<field name="inherit" ref="product_attribute.attribute_set_view_form"/>
<field name="name">product_attribute_set_form</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,128 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import base64
import hashlib
import hmac
import logging
from trytond.protocols.wrappers import (
HTTPStatus, Response, abort, redirect, with_pool, with_transaction)
from trytond.wsgi import app
logger = logging.getLogger(__name__)
def verify_webhook(data, hmac_header, secret):
digest = hmac.new(secret, data, hashlib.sha256).digest()
computed_hmac = base64.b64encode(digest)
return hmac.compare_digest(computed_hmac, hmac_header.encode('utf-8'))
@app.route(
'/<database_name>/web_shop_shopify/webhook/<shop>/order', methods={'POST'})
@with_pool
@with_transaction(context={'_skip_warnings': True})
def order(request, pool, shop):
Sale = pool.get('sale.sale')
Shop = pool.get('web.shop')
shop = Shop.get(shop)
data = request.get_data()
verified = verify_webhook(
data, request.headers.get('X-Shopify-Hmac-SHA256'),
shop.shopify_webhook_shared_secret.encode('utf-8'))
if not verified:
abort(HTTPStatus.UNAUTHORIZED)
topic = request.headers.get('X-Shopify-Topic')
order = request.get_json()
logger.info("Shopify webhook %s for %s", topic, order['id'])
if topic == 'orders/create':
if not Sale.search([
('web_shop', '=', shop.id),
('shopify_identifier', '=', order['id']),
], order=[], limit=1):
Shop.__queue__.shopify_fetch_order([shop])
elif topic in {
'orders/updated', 'orders/edited', 'orders/paid',
'orders/cancelled'}:
if topic == 'orders/edited':
order_id = order['order_edit']['id']
else:
order_id = order['id']
sales = Sale.search([
('web_shop', '=', shop.id),
('shopify_identifier', '=', order_id),
], order=[], limit=1)
if not sales:
Shop.__queue__.shopify_fetch_order([shop])
else:
sale, = sales
Shop.__queue__.update_sale_ids(shop, [sale.id])
else:
logger.warn("Unsupported topic '%s'", topic)
return Response(status=HTTPStatus.NO_CONTENT)
@app.route('/<database_name>/web_shop_shopify/products/<id>', methods={'GET'})
@app.auth_required
@with_pool
@with_transaction(user='request')
def shopify_product(request, pool, id):
Template = pool.get('product.template')
try:
template, = Template.search(
[('shopify_identifiers.shopify_identifier_char', '=', id)],
limit=1)
except ValueError:
abort(HTTPStatus.NOT_FOUND)
return redirect(template.__href__)
@app.route(
'/<database_name>/web_shop_shopify'
'/products/<product_id>/variants/<variant_id>',
methods={'GET'})
@app.auth_required
@with_pool
@with_transaction(user='request')
def shopify_product_variant(request, pool, product_id, variant_id):
Product = pool.get('product.product')
try:
product, = Product.search([
('template.shopify_identifiers.shopify_identifier_char',
'=', product_id),
('shopify_identifiers.shopify_identifier_char',
'=', variant_id),
],
limit=1)
except ValueError:
abort(HTTPStatus.NOT_FOUND)
return redirect(product.__href__)
@app.route('/<database_name>/web_shop_shopify/customers/<id>', methods={'GET'})
@app.auth_required
@with_pool
@with_transaction(user='request')
def shopify_customer(request, pool, id):
Party = pool.get('party.party')
try:
party, = Party.search([
('shopify_identifiers.shopify_identifier_char', '=', id),
], limit=1)
except ValueError:
abort(HTTPStatus.NOT_FOUND)
return redirect(party.__href__)
@app.route('/<database_name>/web_shop_shopify/orders/<id>', methods={'GET'})
@app.auth_required
@with_pool
@with_transaction(user='request')
def shopify_order(request, pool, id):
Sale = pool.get('sale.sale')
try:
sale, = Sale.search([('shopify_identifier_char', '=', id)], limit=1)
except ValueError:
abort(HTTPStatus.NOT_FOUND)
return redirect(sale.__href__)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="sale_view_form">
<field name="model">sale.sale</field>
<field name="inherit" ref="sale.sale_view_form"/>
<field name="name">sale_form</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,87 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import json
import logging
import time
import urllib
from pyactiveresource.connection import ClientError
from shopify import Limits
from shopify.base import ShopifyConnection
from shopify.resources.graphql import GraphQL
try:
from shopify.resources.graphql import GraphQLException
except ImportError:
class GraphQLException(Exception):
def __init__(self, response):
self._response = response
@property
def errors(self):
return self._response['errors']
from trytond.protocols.wrappers import HTTPStatus
from trytond.tools.logging import format_args
logger = logging.getLogger(__name__)
def patch():
def _open(*args, **kwargs):
while True:
try:
return open_func(*args, **kwargs)
except ClientError as e:
if e.response.code == HTTPStatus.TOO_MANY_REQUESTS:
retry_after = float(
e.response.headers.get('Retry-After', 2))
logger.debug(
"Shopify connection retry after %ss", retry_after)
time.sleep(retry_after)
else:
raise
else:
try:
if Limits.credit_maxed():
logger.debug("Shopify connection credit maxed")
time.sleep(0.5)
except Exception:
pass
if ShopifyConnection._open != _open:
open_func = ShopifyConnection._open
ShopifyConnection._open = _open
def graphql_execute(self, *args, **kwargs):
log_message = "GraphQL execute %s"
log_args = (
format_args(args, kwargs, logger.isEnabledFor(logging.DEBUG)),)
while True:
try:
result = graphql_execute_func(self, *args, **kwargs)
except urllib.error.HTTPError as e:
if e.code == HTTPStatus.TOO_MANY_REQUESTS:
retry_after = float(e.headers.get('Retry-After', 2))
logger.debug("GraphQL retry after %ss", retry_after)
time.sleep(retry_after)
else:
logger.exception(log_message, *log_args)
raise GraphQLException(json.load(e.fp))
if isinstance(result, str):
result = json.loads(result)
if result.get('errors'):
for error in result['errors']:
if error.get('extensions', {}).get('code') == 'THROTTLED':
logger.debug("GraphQL throttled")
time.sleep(0.5)
continue
logger.exception(log_message, *log_args)
raise GraphQLException(result)
logger.info(log_message, *log_args)
logger.debug("GraphQL Result: %r", result)
return result
if GraphQL.execute != graphql_execute:
graphql_execute_func = GraphQL.execute
GraphQL.execute = graphql_execute

View File

@@ -0,0 +1,279 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from collections import defaultdict
import shopify
from trytond.i18n import gettext, lazy_gettext
from trytond.model import ModelSQL, ModelView, Unique, Workflow, fields
from trytond.model.exceptions import AccessError
from trytond.pool import Pool, PoolMeta
from . import graphql
from .common import IdentifierMixin, id2gid
from .exceptions import ShopifyError
QUERY_FULFILLMENT_ORDERS = '''\
query FulfillmentOrders($orderId: ID!) {
order(id: $orderId) %(fields)s
}'''
class ShipmentOut(metaclass=PoolMeta):
__name__ = 'stock.shipment.out'
shopify_identifiers = fields.One2Many(
'stock.shipment.shopify_identifier', 'shipment',
lazy_gettext('web_shop_shopify.msg_shopify_identifiers'))
def get_shopify(self, sale, fulfillment_order_fields=None):
if self.state not in {'shipped', 'done'}:
return
shopify_id = self.get_shopify_identifier(sale)
if shopify_id:
# Fulfillment can not be modified
return
else:
fulfillment = {}
for shop_warehouse in sale.web_shop.shopify_warehouses:
if shop_warehouse.warehouse == self.warehouse:
location_id = int(shop_warehouse.shopify_id)
break
else:
location_id = None
fulfillment_order_fields = graphql.deep_merge(
fulfillment_order_fields or {}, {
'fulfillmentOrders(first: 250)': {
'nodes': {
'id': None,
'assignedLocation': {
'location': {
'id': None,
},
},
'lineItems(first: 250)': {
'nodes': {
'id': None,
'lineItem': {
'id': None,
'fulfillableQuantity': None,
},
},
},
'status': None,
},
},
})
order_id = id2gid('Order', sale.shopify_identifier)
fulfillment_orders = shopify.GraphQL().execute(
QUERY_FULFILLMENT_ORDERS % {
'fields': graphql.selection(fulfillment_order_fields),
}, {'orderId': order_id})['data']['order']['fulfillmentOrders']
line_items = defaultdict(list)
for move in self.outgoing_moves:
if move.sale == sale:
for order_id, line_item in move.get_shopify(
fulfillment_orders, location_id):
line_items[order_id].append(line_item)
if not line_items:
return
fulfillment['lineItemsByFulfillmentOrder'] = [{
'fulfillmentOrderId': order_id,
'fulfillmentOrderLineItems': line_items,
}
for order_id, line_items in line_items.items()]
fulfillment['notifyCustomer'] = bool(
sale.web_shop.shopify_fulfillment_notify_customer)
return fulfillment
def get_shopify_identifier(self, sale):
for record in self.shopify_identifiers:
if record.sale == sale:
return record.shopify_identifier
def set_shopify_identifier(self, sale, identifier=None):
pool = Pool()
Identifier = pool.get('stock.shipment.shopify_identifier')
for record in self.shopify_identifiers:
if record.sale == sale:
if not identifier:
Identifier.delete([record])
return
else:
if record.shopify_identifier != identifier:
record.shopify_identifier = identifier
record.save()
return record
if identifier:
record = Identifier(shipment=self, sale=sale)
record.shopify_identifier = identifier
record.save()
return record
@classmethod
def search_shopify_identifier(cls, sale, identifier):
records = cls.search([
('shopify_identifiers', 'where', [
('sale', '=', sale.id),
('shopify_identifier', '=', identifier),
]),
])
if records:
record, = records
return record
@classmethod
def copy(cls, records, default=None):
if default is None:
default = {}
else:
default = default.copy()
default.setdefault('shopify_identifiers')
return super().copy(records, default=default)
@classmethod
@ModelView.button
@Workflow.transition('draft')
def draft(cls, shipments):
for shipment in shipments:
if shipment.state == 'cancelled' and shipment.shopify_identifiers:
raise AccessError(
gettext(
'web_shop_shopify.'
'msg_shipment_cancelled_draft_shopify',
shipment=shipment.rec_name))
super().draft(shipments)
class ShipmentShopifyIdentifier(IdentifierMixin, ModelSQL, ModelView):
__name__ = 'stock.shipment.shopify_identifier'
shipment = fields.Reference("Shipment", [
('stock.shipment.out', "Customer Shipment"),
], required=True)
sale = fields.Many2One('sale.sale', "Sale", required=True)
@classmethod
def __setup__(cls):
super().__setup__()
cls.shopify_identifier_signed.states = {
'required': True,
}
t = cls.__table__()
cls._sql_constraints += [
('shipment_sale_unique',
Unique(t, t.shipment, t.sale, t.shopify_identifier_signed),
'web_shop_shopify.msg_identifier_shipment_sale_unique'),
]
class ShipmentOut_PackageShipping(metaclass=PoolMeta):
__name__ = 'stock.shipment.out'
def get_shopify(self, sale, fulfillment_order_fields=None):
fulfillment = super().get_shopify(
sale, fulfillment_order_fields=fulfillment_order_fields)
if fulfillment and self.packages:
numbers, urls = [], []
fulfillment['trackingInfo'] = {
'numbers': numbers,
'urls': urls,
}
for package in self.packages:
if package.shipping_reference:
numbers.append(package.shipping_reference)
if package.shipping_tracking_url:
urls.append(package.shipping_tracking_url)
return fulfillment
class Move(metaclass=PoolMeta):
__name__ = 'stock.move'
def get_shopify(self, fulfillment_orders, location_id):
pool = Pool()
SaleLine = pool.get('sale.line')
Uom = pool.get('product.uom')
if (not isinstance(self.origin, SaleLine)
or not self.origin.shopify_identifier):
return
location_id = id2gid('Location', location_id)
identifier = id2gid('LineItem', self.origin.shopify_identifier)
quantity = round(Uom.compute_qty(
self.unit, self.quantity, self.origin.unit))
for fulfillment_order in fulfillment_orders['nodes']:
if fulfillment_order['status'] in {'CANCELLED', 'CLOSED'}:
continue
if (fulfillment_order['assignedLocation']['location']['id']
!= location_id):
continue
for line_item in fulfillment_order['lineItems']['nodes']:
if line_item['lineItem']['id'] == identifier:
qty = min(
quantity, line_item['lineItem']['fulfillableQuantity'])
if qty:
yield fulfillment_order['id'], {
'id': line_item['id'],
'quantity': qty,
}
quantity -= qty
if quantity <= 0:
return
else:
raise ShopifyError(gettext(
'web_shop_shopify.msg_fulfillment_order_line_not_found',
quantity=quantity,
move=self.rec_name,
))
class Move_Kit(metaclass=PoolMeta):
__name__ = 'stock.move'
def get_shopify(self, fulfillment_orders, location_id):
pool = Pool()
SaleLineComponent = pool.get('sale.line.component')
UoM = pool.get('product.uom')
yield from super().get_shopify(fulfillment_orders, location_id)
if not isinstance(self.origin, SaleLineComponent):
return
sale_line = self.origin.line
# Track only the first component
if min(c.id for c in sale_line.components) != self.origin.id:
return
location_id = id2gid('Location', location_id)
identifier = id2gid('LineItem', sale_line.shopify_identifier)
c_quantity = UoM.compute_qty(
self.unit, self.quantity, self.origin.unit, round=False)
if self.origin.quantity:
ratio = c_quantity / self.origin.quantity
else:
ratio = 1
quantity = round(sale_line.quantity * ratio)
for fulfillment_order in fulfillment_orders['nodes']:
if (fulfillment_order['assignedLocation']['location']['id']
!= location_id):
continue
for line_item in fulfillment_order['lineItems']['nodes']:
if line_item['lineItem']['id'] == identifier:
qty = min(
quantity, line_item['lineItem']['fulfillableQuantity'])
if qty:
yield fulfillment_order['id'], {
'id': line_item['id'],
'quantity': qty,
}
quantity -= qty
if quantity <= 0:
return
else:
raise ShopifyError(gettext(
'web_shop_shopify.msg_fulfillment_order_line_not_found',
quantity=quantity,
move=self.rec_name,
))

View File

@@ -0,0 +1,55 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="stock_shipment_shopify_identifier_view_form">
<field name="model">stock.shipment.shopify_identifier</field>
<field name="type">form</field>
<field name="name">stock_shipment_shopify_identifier_form</field>
</record>
<record model="ir.ui.view" id="stock_shipment_shopify_identifier_view_list">
<field name="model">stock.shipment.shopify_identifier</field>
<field name="type">tree</field>
<field name="name">stock_shipment_shopify_identifier_list</field>
</record>
<record model="ir.action.act_window" id="act_stock_shipment_shopify_identifier_form">
<field name="name">Shipment Identifiers</field>
<field name="res_model">stock.shipment.shopify_identifier</field>
</record>
<record model="ir.action.act_window.view" id="act_stock_shipment_shopify_identifier_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="stock_shipment_shopify_identifier_view_list"/>
<field name="act_window" ref="act_stock_shipment_shopify_identifier_form"/>
</record>
<record model="ir.action.act_window.view" id="act_stock_shipment_shopify_identifier_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="stock_shipment_shopify_identifier_view_form"/>
<field name="act_window" ref="act_stock_shipment_shopify_identifier_form"/>
</record>
<menuitem
parent="menu_shop_shopify_identifier_form"
action="act_stock_shipment_shopify_identifier_form"
sequence="50"
id="menu_stock_shipment_shopify_identifier_form"/>
<record model="ir.model.access" id="access_stock_shipment_shopify_identifier">
<field name="model">stock.shipment.shopify_identifier</field>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_stock_shipment_shopify_identifier_admin">
<field name="model">stock.shipment.shopify_identifier</field>
<field name="group" ref="res.group_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,753 @@
=========================
Web Shop Shopify Scenario
=========================
Imports::
>>> import os
>>> import random
>>> import string
>>> import time
>>> import urllib.request
>>> from decimal import Decimal
>>> from itertools import cycle
>>> from unittest.mock import patch
>>> import shopify
>>> from shopify.api_version import ApiVersion
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, create_tax, get_accounts)
>>> from trytond.modules.account_invoice.tests.tools import (
... set_fiscalyear_invoice_sequences)
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.product_image.product import ImageURLMixin
>>> from trytond.modules.web_shop_shopify.common import gid2id, id2gid
>>> from trytond.modules.web_shop_shopify.product import Template
>>> from trytond.modules.web_shop_shopify.tests import tools
>>> from trytond.modules.web_shop_shopify.web import Shop
>>> from trytond.tests.tools import activate_modules, assertEqual, assertTrue
>>> FETCH_SLEEP, MAX_SLEEP = 1, 10
Patch image URL::
>>> get_image_url = patch.object(
... ImageURLMixin, 'get_image_url').start()
>>> get_image_url.side_effect = cycle([
... 'https://downloads.tryton.org/tests/shopify/chair.jpg',
... 'https://downloads.tryton.org/tests/shopify/chair-black.jpg',
... 'https://downloads.tryton.org/tests/shopify/chair-white.jpg',
... ])
Activate modules::
>>> config = activate_modules([
... 'web_shop_shopify',
... 'account_payment_clearing',
... 'carrier',
... 'customs',
... 'product_measurements',
... 'product_image',
... 'sale_discount',
... 'sale_shipment_cost',
... ],
... create_company, create_chart)
>>> Account = Model.get('account.account')
>>> Carrier = Model.get('carrier')
>>> CarrierSelection = Model.get('carrier.selection')
>>> Category = Model.get('product.category')
>>> Country = Model.get('country.country')
>>> Cron = Model.get('ir.cron')
>>> Inventory = Model.get('stock.inventory')
>>> Journal = Model.get('account.journal')
>>> Location = Model.get('stock.location')
>>> Party = Model.get('party.party')
>>> PaymentJournal = Model.get('account.payment.journal')
>>> Product = Model.get('product.product')
>>> ProductAttribute = Model.get('product.attribute')
>>> ProductAttributeSet = Model.get('product.attribute.set')
>>> ProductInventoryItem = Model.get('product.shopify_inventory_item')
>>> ProductTemplate = Model.get('product.template')
>>> Sale = Model.get('sale.sale')
>>> ShopifyIdentifier = Model.get('web.shop.shopify_identifier')
>>> Tariff = Model.get('customs.tariff.code')
>>> Uom = Model.get('product.uom')
>>> WebShop = Model.get('web.shop')
Set metafields to product::
>>> def get_shopify_metafields(self, shop):
... return {
... 'global.test': {
... 'type': 'single_line_text_field',
... 'value': self.name,
... },
... }
>>> Template.get_shopify_metafields = get_shopify_metafields
>>> def managed_metafields(self):
... return {'global.test'}
>>> Shop.managed_metafields = managed_metafields
Create country::
>>> belgium = Country(name="Belgium", code='BE')
>>> belgium.save()
>>> china = Country(name="China", code='CN')
>>> china.save()
Get company::
>>> company = get_company()
Get accounts::
>>> accounts = get_accounts()
Create tax::
>>> tax = create_tax(Decimal('.10'))
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
>>> fiscalyear.click('create_period')
Create payment journal::
>>> shopify_account = Account(parent=accounts['receivable'].parent)
>>> shopify_account.name = "Shopify"
>>> shopify_account.type = accounts['receivable'].type
>>> shopify_account.reconcile = True
>>> shopify_account.save()
>>> payment_journal = PaymentJournal()
>>> payment_journal.name = "Shopify"
>>> payment_journal.process_method = 'shopify'
>>> payment_journal.clearing_journal, = Journal.find([('code', '=', 'REV')])
>>> payment_journal.clearing_account = shopify_account
>>> payment_journal.save()
Define a web shop::
>>> web_shop = WebShop(name="Web Shop")
>>> web_shop.type = 'shopify'
>>> web_shop.shopify_url = os.getenv('SHOPIFY_URL')
>>> web_shop.shopify_password = os.getenv('SHOPIFY_PASSWORD')
>>> web_shop.shopify_version = sorted(ApiVersion.versions, reverse=True)[1]
>>> shop_warehouse = web_shop.shopify_warehouses.new()
>>> shop_warehouse.warehouse, = Location.find([('type', '=', 'warehouse')])
>>> shopify_payment_journal = web_shop.shopify_payment_journals.new()
>>> shopify_payment_journal.journal = payment_journal
>>> web_shop.save()
>>> shopify.ShopifyResource.activate_session(shopify.Session(
... web_shop.shopify_url,
... web_shop.shopify_version,
... web_shop.shopify_password))
>>> location = tools.get_location()
>>> shop_warehouse, = web_shop.shopify_warehouses
>>> shop_warehouse.shopify_id = str(gid2id(location['id']))
>>> web_shop.save()
Create categories::
>>> category1 = Category(name="Category 1")
>>> category1.save()
>>> sub_category = Category(name="Sub Category", parent=category1)
>>> sub_category.save()
>>> category2 = Category(name="Category 2")
>>> category2.save()
>>> account_category = Category(name="Account Category")
>>> account_category.accounting = True
>>> account_category.account_expense = accounts['expense']
>>> account_category.account_revenue = accounts['revenue']
>>> account_category.customer_taxes.append(tax)
>>> account_category.save()
>>> account_category_shipping = Category(name="Account Category Shipping")
>>> account_category_shipping.accounting = True
>>> account_category_shipping.account_expense = accounts['expense']
>>> account_category_shipping.account_revenue = accounts['revenue']
>>> account_category_shipping.save()
Create attribute set::
>>> attribute_set = ProductAttributeSet(name="Attributes")
>>> attribute = attribute_set.attributes.new()
>>> attribute.name = 'color'
>>> attribute.string = "Color"
>>> attribute.type_ = 'selection'
>>> attribute.selection = "blue:Blue\nred:Red"
>>> attribute_set.save()
>>> attribute = attribute_set.attributes.new()
>>> attribute.name = 'check'
>>> attribute.string = "Check"
>>> attribute.type_ = 'boolean'
>>> attribute_set.save()
>>> attribute1, attribute2 = attribute_set.attributes
>>> attribute_set.shopify_option1 = attribute1
>>> attribute_set.shopify_option2 = attribute2
>>> attribute_set.save()
Create tariff codes::
>>> tariff1 = Tariff(code='170390')
>>> tariff1.save()
>>> tariff2 = Tariff(code='17039099', country=belgium)
>>> tariff2.save()
Create products::
>>> unit, = Uom.find([('name', '=', "Unit")])
>>> template = ProductTemplate()
>>> template.name = "Product 1"
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.web_shop_description = "<p>Product description</p>"
>>> template.shopify_handle = 'product-%s' % random.randint(0, 1000)
>>> template.list_price = round(Decimal('9.99') / (1 + tax.rate), 4)
>>> template.account_category = account_category
>>> template.categories.append(Category(sub_category.id))
>>> template.country_of_origin = china
>>> _ = template.tariff_codes.new(tariff_code=tariff1)
>>> _ = template.tariff_codes.new(tariff_code=tariff2)
>>> template.weight = 10
>>> template.weight_uom, = Uom.find([('name', '=', "Carat")])
>>> template.save()
>>> product1, = template.products
>>> product1.suffix_code = 'PROD1'
>>> product1.save()
>>> template = ProductTemplate()
>>> template.name = "Product 2"
>>> template.default_uom = unit
>>> template.type = 'service'
>>> template.salable = True
>>> template.list_price = round(Decimal('20') / (1 + tax.rate), 4)
>>> template.account_category = account_category
>>> template.categories.append(Category(category2.id))
>>> template.save()
>>> product2, = template.products
>>> product2.suffix_code = 'PROD2'
>>> product2.save()
>>> variant = ProductTemplate()
>>> variant.name = "Variant"
>>> variant.code = "VAR"
>>> variant.default_uom = unit
>>> variant.type = 'goods'
>>> variant.salable = True
>>> variant.list_price = round(Decimal('50') / (1 + tax.rate), 4)
>>> variant.attribute_set = attribute_set
>>> variant.account_category = account_category
>>> variant.categories.append(Category(category1.id))
>>> variant.categories.append(Category(category2.id))
>>> image = variant.images.new(web_shop=True)
>>> image.image = urllib.request.urlopen(
... 'https://downloads.tryton.org/tests/shopify/chair.jpg').read()
>>> variant1, = variant.products
>>> variant1.suffix_code = "1"
>>> variant1.attributes = {
... 'color': 'blue',
... 'check': True,
... }
>>> variant2 = variant.products.new()
>>> variant2.suffix_code = "2"
>>> variant2.attributes = {
... 'color': 'red',
... 'check': False,
... }
>>> variant.save()
>>> variant1, variant2 = variant.products
>>> image = variant1.images.new(web_shop=True, template=variant)
>>> image.image = urllib.request.urlopen(
... 'https://downloads.tryton.org/tests/shopify/chair-black.jpg').read()
>>> variant1.save()
>>> image = variant2.images.new(web_shop=True, template=variant)
>>> image.image = urllib.request.urlopen(
... 'https://downloads.tryton.org/tests/shopify/chair-white.jpg').read()
>>> variant2.save()
Create carriers::
>>> carrier_template = ProductTemplate()
>>> carrier_template.name = 'Carrier Product'
>>> carrier_template.default_uom = unit
>>> carrier_template.type = 'service'
>>> carrier_template.salable = True
>>> carrier_template.list_price = Decimal('3')
>>> carrier_template.account_category = account_category_shipping
>>> carrier_template.save()
>>> carrier_product, = carrier_template.products
>>> carrier_product.cost_price = Decimal('2')
>>> carrier_product.save()
>>> carrier1 = Carrier()
>>> party = Party(name="Carrier 1")
>>> party.save()
>>> carrier1.party = party
>>> carrier1.carrier_product = carrier_product
>>> carrier1.save()
>>> carrier2 = Carrier()
>>> party = Party(name="Carrier 2")
>>> party.save()
>>> carrier2.party = party
>>> carrier2.carrier_product = carrier_product
>>> _ = carrier2.shopify_selections.new(code='SHIP')
>>> carrier2.save()
>>> CarrierSelection(carrier=carrier1).save()
>>> CarrierSelection(carrier=carrier2).save()
Fill warehouse::
>>> inventory = Inventory()
>>> inventory.location, = Location.find([('code', '=', 'STO')])
>>> line = inventory.lines.new()
>>> line.product = product1
>>> line.quantity = 10
>>> line = inventory.lines.new()
>>> line.product = variant1
>>> line.quantity = 5
>>> inventory.click('confirm')
>>> inventory.state
'done'
Set categories, products and attributes to web shop::
>>> web_shop.categories.extend([
... Category(category1.id),
... Category(sub_category.id),
... Category(category2.id)])
>>> web_shop.products.extend([
... Product(product1.id),
... Product(product2.id),
... Product(variant1.id),
... Product(variant2.id)])
>>> web_shop.save()
Run update product::
>>> cron_update_product, = Cron.find([
... ('method', '=', 'web.shop|shopify_update_product'),
... ])
>>> cron_update_product.click('run_once')
>>> category1.reload()
>>> len(category1.shopify_identifiers)
1
>>> category2.reload()
>>> len(category2.shopify_identifiers)
1
>>> product1.reload()
>>> len(product1.shopify_identifiers)
1
>>> len(product1.template.shopify_identifiers)
1
>>> product2.reload()
>>> len(product2.shopify_identifiers)
1
>>> len(product2.template.shopify_identifiers)
1
>>> variant1.reload()
>>> len(variant1.shopify_identifiers)
1
>>> variant2.reload()
>>> len(variant2.shopify_identifiers)
1
>>> variant.reload()
>>> len(variant.shopify_identifiers)
1
>>> all(i.shopify_identifiers for i in variant.images)
True
Run update inventory::
>>> cron_update_inventory, = Cron.find([
... ('method', '=', 'web.shop|shopify_update_inventory'),
... ])
>>> cron_update_inventory.click('run_once')
Check inventory item::
>>> inventory_items = ProductInventoryItem.find([])
>>> inventory_item_ids = [i.shopify_identifier
... for inv in inventory_items for i in inv.shopify_identifiers]
>>> for _ in range(MAX_SLEEP):
... inventory_levels = tools.get_inventory_levels(location)
... if inventory_levels and len(inventory_levels) == 2:
... break
... time.sleep(FETCH_SLEEP)
>>> sorted(l['quantities'][0]['quantity'] for l in inventory_levels
... if l['quantities'][0]['quantity']
... and gid2id(l['item']['id']) in inventory_item_ids)
[5, 10]
Remove a category, a product and an image::
>>> _ = web_shop.categories.pop(web_shop.categories.index(category2))
>>> _ = web_shop.products.pop(web_shop.products.index(product2))
>>> web_shop.save()
>>> variant2.images.remove(variant2.images[0])
>>> variant2.save()
Rename a category::
>>> sub_category.name = "Sub-category"
>>> sub_category.save()
>>> identifier, = sub_category.shopify_identifiers
>>> bool(identifier.to_update)
True
Update attribute::
>>> attribute, = [a for a in attribute_set.attributes if a.name == 'color']
>>> attribute.selection += "\ngreen:Green"
>>> attribute.save()
Run update product::
>>> cron_update_product, = Cron.find([
... ('method', '=', 'web.shop|shopify_update_product'),
... ])
>>> cron_update_product.click('run_once')
>>> category1.reload()
>>> len(category1.shopify_identifiers)
1
>>> category2.reload()
>>> len(category2.shopify_identifiers)
0
>>> sub_category.reload()
>>> identifier, = sub_category.shopify_identifiers
>>> bool(identifier.to_update)
False
>>> product1.reload()
>>> len(product1.shopify_identifiers)
1
>>> len(product1.template.shopify_identifiers)
1
>>> product2.reload()
>>> len(product2.shopify_identifiers)
0
>>> identifier, = product2.template.shopify_identifiers
>>> tools.get_product(identifier.shopify_identifier)['status']
'ARCHIVED'
>>> variant1.reload()
>>> len(variant1.shopify_identifiers)
1
>>> variant2.reload()
>>> len(variant2.shopify_identifiers)
1
>>> variant.reload()
>>> len(variant.shopify_identifiers)
1
>>> all(i.shopify_identifiers for i in variant1.images)
True
>>> any(i.shopify_identifiers for i in variant2.images)
False
Create an order on Shopify::
>>> customer_phone = '+32-495-555-' + (
... ''.join(random.choice(string.digits) for _ in range(3)))
>>> customer_address_phone = '+32-495-555-' + (
... ''.join(random.choice(string.digits) for _ in range(3)))
>>> customer = tools.create_customer({
... 'lastName': "Customer",
... 'email': (''.join(
... random.choice(string.ascii_letters) for _ in range(10))
... + '@example.com'),
... 'phone': customer_phone,
... 'locale': 'en-CA',
... })
>>> order = tools.create_order({
... 'customer': {
... 'toAssociate': {
... 'id': customer['id'],
... },
... },
... 'shippingAddress': {
... 'lastName': "Customer",
... 'address1': "Street",
... 'city': "City",
... 'countryCode': 'BE',
... 'phone': customer_address_phone,
... },
... 'lineItems': [{
... 'variantId': id2gid(
... 'ProductVariant',
... product1.shopify_identifiers[0].shopify_identifier),
... 'quantity': 1,
... }, {
... 'variantId': id2gid(
... 'ProductVariant',
... product1.shopify_identifiers[0].shopify_identifier),
... 'quantity': 1,
... }, {
... 'variantId': id2gid(
... 'ProductVariant',
... variant1.shopify_identifiers[0].shopify_identifier),
... 'quantity': 5,
... }],
... 'shippingLines': [{
... 'code': 'SHIP',
... 'title': "Shipping",
... 'priceSet': {
... 'shopMoney': {
... 'amount': 4,
... 'currencyCode': company.currency.code,
... },
... },
... }],
... 'discountCode': {
... 'itemFixedDiscountCode': {
... 'amountSet': {
... 'shopMoney': {
... 'amount': 15,
... 'currencyCode': company.currency.code,
... },
... },
... 'code': "CODE",
... },
... },
... 'financialStatus': 'AUTHORIZED',
... 'transactions': [{
... 'kind': 'AUTHORIZATION',
... 'status': 'SUCCESS',
... 'amountSet': {
... 'shopMoney': {
... 'amount': 258.98,
... 'currencyCode': company.currency.code,
... },
... },
... 'test': True,
... }],
... })
>>> order['totalPriceSet']['presentmentMoney']['amount']
'258.98'
>>> order['displayFinancialStatus']
'AUTHORIZED'
>>> order['displayFulfillmentStatus']
'UNFULFILLED'
Run fetch order::
>>> with config.set_context(shopify_orders=[gid2id(order['id'])]):
... cron_fetch_order, = Cron.find([
... ('method', '=', 'web.shop|shopify_fetch_order'),
... ])
... cron_fetch_order.click('run_once')
>>> sale, = Sale.find([])
>>> sale.shopify_tax_adjustment
Decimal('0.01')
>>> len(sale.lines)
4
>>> sorted([l.unit_price for l in sale.lines])
[Decimal('4.0000'), Decimal('8.5727'), Decimal('8.5727'), Decimal('42.9309')]
>>> any(l.product == carrier_product for l in sale.lines)
True
>>> sale.total_amount
Decimal('258.98')
>>> len(sale.payments)
1
>>> payment, = sale.payments
>>> payment.state
'processing'
>>> payment.amount
Decimal('0')
>>> assertEqual(sale.carrier, carrier2)
>>> sale.state
'quotation'
>>> sale.party.name
'Customer'
>>> sale.party.lang.code
'en'
>>> assertTrue(sale.party.email)
>>> assertEqual(sale.party.phone.replace(' ', ''), customer_phone.replace('-', ''))
>>> address, = sale.party.addresses
>>> address_contact_mechanism, = address.contact_mechanisms
>>> assertEqual(
... address_contact_mechanism.value.replace(' ', ''),
... customer_address_phone.replace('-', ''))
>>> len(sale.party.contact_mechanisms)
3
>>> assertTrue(sale.web_status_url)
Capture full amount::
>>> transaction = tools.capture_order(
... order['id'], 258.98, order['transactions'][0]['id'])
>>> with config.set_context(shopify_orders=[gid2id(order['id'])]):
... cron_update_order, = Cron.find([
... ('method', '=', 'web.shop|shopify_update_order'),
... ])
... cron_update_order.click('run_once')
>>> sale.reload()
>>> len(sale.payments)
1
>>> payment, = sale.payments
>>> payment.state
'succeeded'
>>> sale.state
'processing'
>>> len(sale.invoices)
0
>>> len(sale.party.contact_mechanisms)
3
Make a partial shipment::
>>> shipment, = sale.shipments
>>> move, = [m for m in shipment.inventory_moves if m.product == variant1]
>>> move.quantity = 3
>>> shipment.click('pick')
>>> shipment.click('pack')
>>> shipment.click('do')
>>> shipment.state
'done'
>>> sale.reload()
>>> len(sale.invoices)
0
>>> order = tools.get_order(order['id'])
>>> order['displayFulfillmentStatus']
'PARTIALLY_FULFILLED'
>>> len(order['fulfillments'])
1
>>> order['displayFinancialStatus']
'PAID'
Ship and cancel remaining shipment::
>>> shipment, = [s for s in sale.shipments if s.state != 'done']
>>> shipment.click('pick')
>>> shipment.click('pack')
>>> shipment.click('ship')
>>> shipment.state
'shipped'
>>> order = tools.get_order(order['id'])
>>> order['displayFulfillmentStatus']
'FULFILLED'
>>> len(order['fulfillments'])
2
>>> shipment.click('cancel')
>>> shipment.state
'cancelled'
>>> order = tools.get_order(order['id'])
>>> order['displayFulfillmentStatus']
'PARTIALLY_FULFILLED'
>>> len(order['fulfillments'])
2
>>> shipment_exception = sale.click('handle_shipment_exception')
>>> shipment_exception.form.recreate_moves.extend(
... shipment_exception.form.ignore_moves.find())
>>> shipment_exception.execute('handle')
Cancel remaining shipment::
>>> shipment, = [s for s in sale.shipments if s.state not in {'done', 'cancelled'}]
>>> shipment.click('cancel')
>>> shipment.state
'cancelled'
>>> sale.reload()
>>> sale.shipment_state
'exception'
>>> len(sale.invoices)
0
>>> order = tools.get_order(order['id'])
>>> order['displayFulfillmentStatus']
'PARTIALLY_FULFILLED'
>>> len(order['fulfillments'])
2
>>> order['displayFinancialStatus']
'PAID'
Ignore shipment exception::
>>> shipment_exception = sale.click('handle_shipment_exception')
>>> shipment_exception.form.ignore_moves.extend(
... shipment_exception.form.ignore_moves.find())
>>> shipment_exception.execute('handle')
>>> order = tools.get_order(order['id'])
>>> order['displayFulfillmentStatus']
'FULFILLED'
>>> len(order['fulfillments'])
2
>>> order['displayFinancialStatus']
'PARTIALLY_REFUNDED'
>>> sale.reload()
>>> invoice, = sale.invoices
>>> invoice.total_amount
Decimal('164.53')
>>> payment, = sale.payments
>>> payment.state
'succeeded'
Correct taxes as partial invoice can get rounding gap::
>>> tax_line, = invoice.taxes
>>> tax_line.amount += payment.amount - invoice.total_amount
>>> invoice.save()
>>> assertEqual(invoice.total_amount, payment.amount)
Post invoice::
>>> invoice.click('post')
>>> invoice.state
'paid'
>>> sale.reload()
>>> sale.state
'done'
>>> order = tools.get_order(order['id'])
>>> bool(order['closed'])
True
Clean up::
>>> tools.delete_order(order['id'])
>>> for product in ShopifyIdentifier.find(
... [('record', 'like', 'product.template,%')]):
... tools.delete_product(id2gid('Product', product.shopify_identifier))
>>> for category in ShopifyIdentifier.find(
... [('record', 'like', 'product.category,%')]):
... tools.delete_collection(id2gid('Collection', category.shopify_identifier))
>>> for _ in range(MAX_SLEEP):
... try:
... tools.delete_customer(customer['id'])
... except Exception:
... time.sleep(FETCH_SLEEP)
... else:
... break
>>> shopify.ShopifyResource.clear_session()

View File

@@ -0,0 +1,296 @@
=====================================
Web Shop Shopify Product Kit Scenario
=====================================
Imports::
>>> import os
>>> import random
>>> import string
>>> import time
>>> from decimal import Decimal
>>> import shopify
>>> from shopify.api_version import ApiVersion
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.account_invoice.tests.tools import (
... set_fiscalyear_invoice_sequences)
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.web_shop_shopify.common import gid2id, id2gid
>>> from trytond.modules.web_shop_shopify.tests import tools
>>> from trytond.tests.tools import activate_modules
>>> FETCH_SLEEP, MAX_SLEEP = 1, 10
Activate modules::
>>> config = activate_modules([
... 'web_shop_shopify',
... 'product_kit',
... ],
... create_company, create_chart)
>>> Account = Model.get('account.account')
>>> Category = Model.get('product.category')
>>> Cron = Model.get('ir.cron')
>>> Location = Model.get('stock.location')
>>> PaymentJournal = Model.get('account.payment.journal')
>>> Product = Model.get('product.product')
>>> ProductTemplate = Model.get('product.template')
>>> Sale = Model.get('sale.sale')
>>> ShopifyIdentifier = Model.get('web.shop.shopify_identifier')
>>> Uom = Model.get('product.uom')
>>> WebShop = Model.get('web.shop')
Get company::
>>> company = get_company()
Get accounts::
>>> accounts = get_accounts()
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
>>> fiscalyear.click('create_period')
Create payment journal::
>>> shopify_account = Account(parent=accounts['receivable'].parent)
>>> shopify_account.name = "Shopify"
>>> shopify_account.type = accounts['receivable'].type
>>> shopify_account.reconcile = True
>>> shopify_account.save()
>>> payment_journal = PaymentJournal()
>>> payment_journal.name = "Shopify"
>>> payment_journal.process_method = 'shopify'
>>> payment_journal.save()
Define a web shop::
>>> web_shop = WebShop(name="Web Shop")
>>> web_shop.type = 'shopify'
>>> web_shop.shopify_url = os.getenv('SHOPIFY_URL')
>>> web_shop.shopify_password = os.getenv('SHOPIFY_PASSWORD')
>>> web_shop.shopify_version = sorted(ApiVersion.versions, reverse=True)[1]
>>> shop_warehouse = web_shop.shopify_warehouses.new()
>>> shop_warehouse.warehouse, = Location.find([('type', '=', 'warehouse')])
>>> shopify_payment_journal = web_shop.shopify_payment_journals.new()
>>> shopify_payment_journal.journal = payment_journal
>>> web_shop.save()
>>> shopify.ShopifyResource.activate_session(shopify.Session(
... web_shop.shopify_url,
... web_shop.shopify_version,
... web_shop.shopify_password))
>>> location = tools.get_location()
>>> shop_warehouse, = web_shop.shopify_warehouses
>>> shop_warehouse.shopify_id = str(gid2id(location['id']))
>>> web_shop.save()
Create categories::
>>> category = Category(name="Category")
>>> category.save()
>>> account_category = Category(name="Account Category")
>>> account_category.accounting = True
>>> account_category.account_expense = accounts['expense']
>>> account_category.account_revenue = accounts['revenue']
>>> account_category.save()
Create product kit::
>>> unit, = Uom.find([('name', '=', "Unit")])
>>> meter, = Uom.find([('name', '=', "Meter")])
>>> template = ProductTemplate()
>>> template.name = "Component 1"
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.save()
>>> component1, = template.products
>>> template = ProductTemplate()
>>> template.name = "Component 2"
>>> template.default_uom = meter
>>> template.type = 'goods'
>>> template.save()
>>> component2, = template.products
>>> template = ProductTemplate()
>>> template.name = "Product Kit"
>>> template.default_uom = unit
>>> template.type = 'kit'
>>> template.salable = True
>>> template.list_price = Decimal('100.0000')
>>> template.account_category = account_category
>>> template.categories.append(Category(category.id))
>>> template.save()
>>> product, = template.products
>>> product.suffix_code = 'PROD'
>>> product.save()
>>> _ = template.components.new(product=component1, quantity=2)
>>> _ = template.components.new(product=component2, quantity=5)
>>> template.save()
Set categories, products and attributes to web shop::
>>> web_shop.categories.append(Category(category.id))
>>> web_shop.products.append(Product(product.id))
>>> web_shop.save()
Run update product::
>>> cron_update_product, = Cron.find([
... ('method', '=', 'web.shop|shopify_update_product'),
... ])
>>> cron_update_product.click('run_once')
Create an order on Shopify::
>>> customer = tools.create_customer({
... 'lastName': "Customer",
... 'email': (''.join(
... random.choice(string.ascii_letters) for _ in range(10))
... + '@example.com'),
... 'addresses': [{
... 'address1': "Street",
... 'city': "City",
... 'countryCode': 'BE',
... }],
... })
>>> order = tools.create_order({
... 'customerId': customer['id'],
... 'lineItems': [{
... 'variantId': id2gid(
... 'ProductVariant',
... product.shopify_identifiers[0].shopify_identifier),
... 'quantity': 3,
... }],
... 'financialStatus': 'AUTHORIZED',
... 'transactions': [{
... 'kind': 'AUTHORIZATION',
... 'status': 'SUCCESS',
... 'amountSet': {
... 'shopMoney': {
... 'amount': 300,
... 'currencyCode': company.currency.code,
... },
... },
... 'test': True,
... }],
... })
>>> order['totalPriceSet']['presentmentMoney']['amount']
'300.0'
>>> order['displayFinancialStatus']
'AUTHORIZED'
>>> transaction = tools.capture_order(
... order['id'], 300, order['transactions'][0]['id'])
Run fetch order::
>>> with config.set_context(shopify_orders=[gid2id(order['id'])]):
... cron_fetch_order, = Cron.find([
... ('method', '=', 'web.shop|shopify_fetch_order'),
... ])
... for _ in range(MAX_SLEEP):
... cron_fetch_order.click('run_once')
... if Sale.find([]):
... break
... time.sleep(FETCH_SLEEP)
>>> sale, = Sale.find([])
>>> sale.total_amount
Decimal('300.00')
>>> sale_line, = sale.lines
>>> sale_line.quantity
3.0
Make a partial shipment of components::
>>> shipment, = sale.shipments
>>> for move in shipment.inventory_moves:
... if move.product == component1:
... move.quantity = 4
... else:
... move.quantity = 0
>>> shipment.click('pick')
>>> shipment.click('pack')
>>> shipment.click('do')
>>> shipment.state
'done'
>>> order = tools.get_order(order['id'])
>>> order['displayFulfillmentStatus']
'PARTIALLY_FULFILLED'
>>> fulfillment, = order['fulfillments']
>>> fulfillment_line_item, = fulfillment['fulfillmentLineItems']['nodes']
>>> fulfillment_line_item['quantity']
2
Make a partial shipment for a single component::
>>> sale.reload()
>>> _, shipment = sale.shipments
>>> for move in shipment.inventory_moves:
... if move.product == component1:
... move.quantity = 0
... else:
... move.quantity = 10
>>> shipment.click('pick')
>>> shipment.click('pack')
>>> shipment.click('do')
>>> shipment.state
'done'
>>> order = tools.get_order(order['id'])
>>> order['displayFulfillmentStatus']
'PARTIALLY_FULFILLED'
>>> fulfillment, = order['fulfillments']
>>> fulfillment_line_item, = fulfillment['fulfillmentLineItems']['nodes']
>>> fulfillment_line_item['quantity']
2
Ship remaining::
>>> sale.reload()
>>> _, _, shipment = sale.shipments
>>> shipment.click('pick')
>>> shipment.click('pack')
>>> shipment.click('do')
>>> shipment.state
'done'
>>> order = tools.get_order(order['id'])
>>> order['displayFulfillmentStatus']
'FULFILLED'
Clean up::
>>> tools.delete_order(order['id'])
>>> for product in ShopifyIdentifier.find(
... [('record', 'like', 'product.template,%')]):
... tools.delete_product(id2gid('Product', product.shopify_identifier))
>>> for category in ShopifyIdentifier.find(
... [('record', 'like', 'product.category,%')]):
... tools.delete_collection(id2gid('Collection', category.shopify_identifier))
>>> for _ in range(MAX_SLEEP):
... try:
... tools.delete_customer(customer['id'])
... except Exception:
... time.sleep(FETCH_SLEEP)
... else:
... break
>>> shopify.ShopifyResource.clear_session()

View File

@@ -0,0 +1,242 @@
========================================
Web Shop Shopify Secondary Unit Scenario
========================================
Imports::
>>> import os
>>> import random
>>> import string
>>> import time
>>> from decimal import Decimal
>>> import shopify
>>> from shopify.api_version import ApiVersion
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.account_invoice.tests.tools import (
... set_fiscalyear_invoice_sequences)
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.web_shop_shopify.common import gid2id, id2gid
>>> from trytond.modules.web_shop_shopify.tests import tools
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> FETCH_SLEEP, MAX_SLEEP = 1, 10
Activate modules::
>>> config = activate_modules([
... 'web_shop_shopify',
... 'sale_secondary_unit',
... ],
... create_company, create_chart)
>>> Account = Model.get('account.account')
>>> Category = Model.get('product.category')
>>> Cron = Model.get('ir.cron')
>>> Location = Model.get('stock.location')
>>> PaymentJournal = Model.get('account.payment.journal')
>>> Product = Model.get('product.product')
>>> ProductTemplate = Model.get('product.template')
>>> Sale = Model.get('sale.sale')
>>> ShopifyIdentifier = Model.get('web.shop.shopify_identifier')
>>> Uom = Model.get('product.uom')
>>> WebShop = Model.get('web.shop')
Get company::
>>> company = get_company()
Get accounts::
>>> accounts = get_accounts()
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
>>> fiscalyear.click('create_period')
Create payment journal::
>>> shopify_account = Account(parent=accounts['receivable'].parent)
>>> shopify_account.name = "Shopify"
>>> shopify_account.type = accounts['receivable'].type
>>> shopify_account.reconcile = True
>>> shopify_account.save()
>>> payment_journal = PaymentJournal()
>>> payment_journal.name = "Shopify"
>>> payment_journal.process_method = 'shopify'
>>> payment_journal.save()
Define a web shop::
>>> web_shop = WebShop(name="Web Shop")
>>> web_shop.type = 'shopify'
>>> web_shop.shopify_url = os.getenv('SHOPIFY_URL')
>>> web_shop.shopify_password = os.getenv('SHOPIFY_PASSWORD')
>>> web_shop.shopify_version = sorted(ApiVersion.versions, reverse=True)[1]
>>> shop_warehouse = web_shop.shopify_warehouses.new()
>>> shop_warehouse.warehouse, = Location.find([('type', '=', 'warehouse')])
>>> shopify_payment_journal = web_shop.shopify_payment_journals.new()
>>> shopify_payment_journal.journal = payment_journal
>>> web_shop.save()
>>> shopify.ShopifyResource.activate_session(shopify.Session(
... web_shop.shopify_url,
... web_shop.shopify_version,
... web_shop.shopify_password))
>>> location = tools.get_location()
>>> shop_warehouse, = web_shop.shopify_warehouses
>>> shop_warehouse.shopify_id = str(gid2id(location['id']))
>>> web_shop.save()
Create categories::
>>> category = Category(name="Category")
>>> category.save()
>>> account_category = Category(name="Account Category")
>>> account_category.accounting = True
>>> account_category.account_expense = accounts['expense']
>>> account_category.account_revenue = accounts['revenue']
>>> account_category.save()
Create product::
>>> unit, = Uom.find([('name', '=', "Unit")])
>>> unit.digits = 2
>>> unit.rounding = 0.01
>>> unit.save()
>>> cm, = Uom.find([('name', '=', "Centimeter")])
>>> cm, = cm.duplicate(default={'digits': 0, 'rounding': 1})
>>> template = ProductTemplate()
>>> template.name = "Product 1"
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.sale_secondary_uom = cm
>>> template.sale_secondary_uom_factor = 25
>>> template.list_price = Decimal('100.0000')
>>> template.account_category = account_category
>>> template.categories.append(Category(category.id))
>>> template.save()
>>> product, = template.products
>>> product.suffix_code = 'PROD'
>>> product.save()
Set categories, products and attributes to web shop::
>>> web_shop.categories.append(Category(category.id))
>>> web_shop.products.append(Product(product.id))
>>> web_shop.save()
Run update product::
>>> cron_update_product, = Cron.find([
... ('method', '=', 'web.shop|shopify_update_product'),
... ])
>>> cron_update_product.click('run_once')
Create an order on Shopify::
>>> customer = tools.create_customer({
... 'lastName': "Customer",
... 'email': (''.join(
... random.choice(string.ascii_letters) for _ in range(10))
... + '@example.com'),
... 'addresses': [{
... 'address1': "Street",
... 'city': "City",
... 'countryCode': 'BE',
... }],
... })
>>> order = tools.create_order({
... 'customerId': customer['id'],
... 'lineItems': [{
... 'variantId': id2gid(
... 'ProductVariant',
... product.shopify_identifiers[0].shopify_identifier),
... 'quantity': 50,
... }],
... 'shippingLines': [{
... 'code': 'SHIP',
... 'title': "Shipping",
... 'priceSet': {
... 'shopMoney': {
... 'amount': 2,
... 'currencyCode': company.currency.code,
... },
... },
... }],
... 'financialStatus': 'AUTHORIZED',
... 'transactions': [{
... 'kind': 'AUTHORIZATION',
... 'status': 'SUCCESS',
... 'amountSet': {
... 'shopMoney': {
... 'amount': 202,
... 'currencyCode': company.currency.code,
... },
... },
... 'test': True,
... }],
... })
>>> order['totalPriceSet']['presentmentMoney']['amount']
'202.0'
>>> order['displayFinancialStatus']
'AUTHORIZED'
Run fetch order::
>>> with config.set_context(shopify_orders=[gid2id(order['id'])]):
... cron_fetch_order, = Cron.find([
... ('method', '=', 'web.shop|shopify_fetch_order'),
... ])
... for _ in range(MAX_SLEEP):
... cron_fetch_order.click('run_once')
... if Sale.find([]):
... break
... time.sleep(FETCH_SLEEP)
>>> sale, = Sale.find([])
>>> len(sale.lines)
2
>>> sale.total_amount
Decimal('202.00')
>>> line, = [l for l in sale.lines if l.product]
>>> line.quantity
2.0
>>> assertEqual(line.unit, unit)
>>> line.unit_price
Decimal('100.0000')
>>> line.secondary_quantity
50.0
>>> assertEqual(line.secondary_unit, cm)
>>> line.secondary_unit_price
Decimal('4.0000')
Clean up::
>>> tools.delete_order(order['id'])
>>> for product in ShopifyIdentifier.find(
... [('record', 'like', 'product.template,%')]):
... tools.delete_product(id2gid('Product', product.shopify_identifier))
>>> for category in ShopifyIdentifier.find(
... [('record', 'like', 'product.category,%')]):
... tools.delete_collection(id2gid('Collection', category.shopify_identifier))
>>> for _ in range(MAX_SLEEP):
... try:
... tools.delete_customer(customer['id'])
... except Exception:
... time.sleep(FETCH_SLEEP)
... else:
... break
>>> shopify.ShopifyResource.clear_session()

View File

@@ -0,0 +1,60 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import unittest
from trytond.modules.web_shop_shopify.graphql import deep_merge, selection
class GraphQLTestCase(unittest.TestCase):
"Test GraphQL library"
def test_deep_merge(self):
"Test deep_merge"
a = {
'id': None,
'firstName': None,
'birthday': {
'month': None,
},
}
b = {
'id': None,
'lastName': None,
'birthday': {
'day': None,
},
}
self.assertEqual(deep_merge(a, b), {
'id': None,
'firstName': None,
'lastName': None,
'birthday': {
'month': None,
'day': None,
},
})
def test_selection(self):
"Test selection"
for fields, result in [
({'id': None}, '{\nid\n}'),
({
'id': None,
'firstName': None,
'lastName': None},
'{\nid\nfirstName\nlastName\n}'),
({
'id': None,
'firstName': None,
'lastName': None,
'birthday': {
'month': None,
'day': None,
},
},
'{\nid\nfirstName\nlastName\n'
'birthday {\nmonth\nday\n}\n}'),
]:
with self.subTest(fields=fields):
self.assertEqual(selection(fields), result)

View File

@@ -0,0 +1,27 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.modules.party.tests import PartyCheckReplaceMixin
from trytond.modules.web_shop_shopify.common import gid2id, id2gid
from trytond.tests.test_tryton import ModuleTestCase
class WebShopShopifyTestCase(PartyCheckReplaceMixin, ModuleTestCase):
'Test Web Shop Shopify module'
module = 'web_shop_shopify'
extras = [
'carrier', 'customs', 'product_image', 'product_image_attribute',
'product_kit', 'product_measurements', 'sale_discount',
'sale_invoice_grouping', 'sale_secondary_unit', 'sale_shipment_cost',
'stock_package_shipping']
def test_id2gid(self):
"Test ID to GID"
self.assertEqual(id2gid('Product', '123'), 'gid://shopify/Product/123')
def test_gid2id(self):
"Test GID to ID"
self.assertEqual(gid2id('gid://shopify/Product/123'), 123)
del ModuleTestCase

View File

@@ -0,0 +1,18 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os
from trytond.tests.test_tryton import TEST_NETWORK, load_doc_tests
def load_tests(*args, **kwargs):
if (not TEST_NETWORK
or not (os.getenv('SHOPIFY_PASSWORD')
and os.getenv('SHOPIFY_URL'))):
kwargs.setdefault('skips', set()).update({
'scenario_web_shop_shopify.rst',
'scenario_web_shop_shopify_secondary_unit.rst',
'scenario_web_shop_shopify_product_kit.rst',
})
return load_doc_tests(__name__, __file__, *args, **kwargs)

View File

@@ -0,0 +1,216 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import shopify
from trytond.modules.web_shop_shopify.common import id2gid
from trytond.modules.web_shop_shopify.shopify_retry import GraphQLException
def get_location():
return shopify.GraphQL().execute('''{
locations(first:1) {
nodes {
id
}
}
}''')['data']['locations']['nodes'][0]
def get_inventory_levels(location):
return shopify.GraphQL().execute('''query InventoryLevels($id: ID!) {
location(id: $id) {
inventoryLevels(first: 250) {
nodes {
item {
id
}
quantities(names: ["available"]) {
name
quantity
}
}
}
}
}''', {
'id': location['id'],
})['data']['location']['inventoryLevels']['nodes']
def get_product(id):
return shopify.GraphQL().execute('''query Product($id: ID!) {
product(id: $id) {
status
}
}''', {
'id': id2gid('Product', id),
})['data']['product']
def delete_product(id):
result = shopify.GraphQL().execute('''mutation productDelete($id: ID!) {
productDelete(input: {id: $id}) {
userErrors {
field
message
}
}
}''', {
'id': id,
})['data']['productDelete']
if errors := result.get('userErrors'):
raise GraphQLException({'errors': errors})
def delete_collection(id):
result = shopify.GraphQL().execute('''mutation collectionDelete($id: ID!) {
collectionDelete(input: {id: $id}) {
userErrors {
field
message
}
}
}''', {
'id': id,
})['data']['collectionDelete']
if errors := result.get('userErrors'):
raise GraphQLException({'errors': errors})
def create_customer(customer):
result = shopify.GraphQL().execute('''mutation customerCreate(
$input: CustomerInput!) {
customerCreate(input: $input) {
customer {
id
}
userErrors {
field
message
}
}
}''', {
'input': customer,
})['data']['customerCreate']
if errors := result.get('userErrors'):
raise GraphQLException({'errors': errors})
return result['customer']
def delete_customer(id):
result = shopify.GraphQL().execute('''mutation customerDelete($id: ID!) {
customerDelete(input: {id: $id}) {
userErrors {
field
message
}
}
}''', {
'id': id,
})['data']['customerDelete']
if errors := result.get('userErrors'):
raise GraphQLException({'errors': errors})
def create_order(order):
result = shopify.GraphQL().execute('''mutation orderCreate(
$order: OrderCreateOrderInput!) {
orderCreate(order: $order) {
order {
id
totalPriceSet {
presentmentMoney {
amount
currencyCode
}
}
displayFinancialStatus
displayFulfillmentStatus
transactions(first: 250) {
id
}
fulfillments {
id
}
closed
}
userErrors {
field
message
}
}
}''', {
'order': order,
})['data']['orderCreate']
if errors := result.get('userErrors'):
raise GraphQLException({'errors': errors})
return result['order']
def get_order(id):
return shopify.GraphQL().execute('''query Order($id: ID!) {
order(id: $id) {
id
totalPriceSet {
presentmentMoney {
amount
currencyCode
}
}
displayFinancialStatus
displayFulfillmentStatus
transactions(first: 250) {
id
}
fulfillments {
id
fulfillmentLineItems(first: 10) {
nodes {
quantity
}
}
}
closed
}
}''', {
'id': id,
})['data']['order']
def capture_order(id, amount, parent_transaction_id):
result = shopify.GraphQL().execute('''mutation orderCapture(
$input: OrderCaptureInput!) {
orderCapture(input: $input) {
transaction {
id
}
userErrors {
field
message
}
}
}''', {
'input': {
'amount': amount,
'id': id,
'parentTransactionId': parent_transaction_id,
},
})['data']['orderCapture']
if errors := result.get('userErrors'):
raise GraphQLException({'errors': errors})
return result['transaction']
def delete_order(id):
result = shopify.GraphQL().execute('''mutation orderDelete($orderId: ID!) {
orderDelete(orderId: $orderId) {
userErrors {
field
message
}
}
}''', {
'orderId': id,
})['data']['orderDelete']
if errors := result.get('userErrors'):
raise GraphQLException({'errors': errors})

View File

@@ -0,0 +1,109 @@
[tryton]
version=7.8.3
depends:
account_payment
currency
ir
party
product
product_attribute
sale
sale_amendment
sale_payment
stock
web_shop
extras_depend:
carrier
customs
product_image
product_image_attribute
product_kit
product_measurements
sale_discount
sale_invoice_grouping
sale_secondary_unit
sale_shipment_cost
stock_package_shipping
xml:
ir.xml
product.xml
party.xml
web.xml
sale.xml
stock.xml
carrier.xml
message.xml
[register]
model:
ir.Cron
web.Shop
web.ShopShopifyIdentifier
web.Shop_Warehouse
web.Shop_Attribute
web.ShopShopifyPaymentJournal
product.Category
product.TemplateCategory
product.Template
product.Product
product.ProductURL
product.ShopifyInventoryItem
product.ProductIdentifier
product.AttributeSet
product.Attribute
party.Party
party.Address
sale.Sale
sale.Line
account.Payment
account.PaymentJournal
stock.ShipmentOut
stock.ShipmentShopifyIdentifier
stock.Move
wizard:
party.Replace
[register carrier]
model:
carrier.Carrier
carrier.SelectionShopify
[register customs]
model:
product.ShopifyInventoryItem_Customs
product.Product_TariffCode
[register product_image]
model:
web.Shop_Image
product.Template_Image
product.Product_Image
product.Image
[register product_image_attribute]
model:
product.Image_Attribute
[register product_kit]
model:
stock.Move_Kit
sale.Line_Kit
[register sale_discount]
model:
sale.Line_Discount
[register sale_secondary_unit]
model:
product.Template_SaleSecondaryUnit
product.Product_SaleSecondaryUnit
sale.Line_SaleSecondaryUnit
[register sale_shipment_cost]
model:
sale.Sale_ShipmentCost
sale.Line_ShipmentCost
[register stock_package_shipping]
model:
stock.ShipmentOut_PackageShipping

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="/form" position="inside">
<field name="shopify_selections" colspan="4"/>
</xpath>
</data>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form cursor="shop" col="2">
<label name="carrier"/>
<field name="carrier"/>
<separator string="Criteria" id="criteria" colspan="2"/>
<label name="shop"/>
<field name="shop"/>
<label name="code"/>
<field name="code"/>
<label name="title"/>
<field name="title"/>
</form>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="carrier" expand="2"/>
<field name="shop" expand="1"/>
<field name="code" expand="1"/>
<field name="title" expand="1"/>
</tree>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//field[@name='identifiers']" position="after">
<field name="shopify_identifiers" colspan="4"/>
</xpath>
</data>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//field[@name='attributes']" position="after">
<group id="shopify_options" string="Shopify Options" colspan="4" col="-1">
<field name="shopify_option1"/>
<field name="shopify_option2"/>
<field name="shopify_option3"/>
</group>
</xpath>
</data>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//page[@id='web_shop']" position="inside">
<newline/>
<label name="shopify_uom"/>
<field name="shopify_uom"/>
<newline/>
<label name="shopify_handle"/>
<field name="shopify_handle"/>
<newline/>
<field name="shopify_identifiers" colspan="4"/>
</xpath>
</data>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//field[@name='web_id']" position="after">
<newline/>
<label name="shopify_url"/>
<field name="shopify_url" widget="url" colspan="3"/>
</xpath>
</data>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//page[@name='warehouses']" position="after">
<page name="shopify_warehouses">
<field name="shopify_warehouses" colspan="4" view_ids="web_shop_shopify.shop_stock_location_view_list,web_shop_shopify.shop_stock_location_view_form"/>
</page>
</xpath>
<xpath expr="//page[@id='products']" position="after">
<page string="Shopify" id="shopify" col="6">
<label name="shopify_url"/>
<field name="shopify_url"/>
<label name="shopify_password"/>
<field name="shopify_password" widget="password"/>
<label name="shopify_version"/>
<field name="shopify_version"/>
<label name="shopify_webhook_shared_secret"/>
<field name="shopify_webhook_shared_secret"/>
<label name="shopify_webhook_endpoint_order"/>
<field name="shopify_webhook_endpoint_order"/>
<label name="shopify_fulfillment_notify_customer"/>
<field name="shopify_fulfillment_notify_customer"/>
<field name="shopify_payment_journals" colspan="6"/>
</page>
</xpath>
</data>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="web_shop"/>
<field name="web_shop" colspan="3"/>
<label name="record"/>
<field name="record"/>
<label name="shopify_identifier"/>
<field name="shopify_identifier" width="20"/>
<label name="shopify_url"/>
<field name="shopify_url" widget="url"/>
<label name="to_update"/>
<field name="to_update"/>
</form>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="web_shop" expand="1"/>
<field name="record" expand="1"/>
<field name="shopify_identifier" expand="2" optional="0"/>
<field name="shopify_url" widget="url"/>
<field name="to_update" optional="1"/>
<button name="set_to_update" tree_invisible="1"/>
</tree>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="shop"/>
<field name="shop" colspan="3"/>
<label name="journal"/>
<field name="journal" widget="selection"/>
<label name="sequence"/>
<field name="sequence"/>
<label name="gateway"/>
<field name="gateway"/>
</form>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree sequence="sequence">
<field name="shop" expand="1"/>
<field name="gateway"/>
<field name="journal" expand="2"/>
</tree>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="shop"/>
<field name="shop" colspan="3"/>
<label name="warehouse"/>
<field name="warehouse"/>
<label name="shopify_id"/>
<field name="shopify_id"/>
<label name="shopify_stock_skip_warehouse"/>
<field name="shopify_stock_skip_warehouse"/>
</form>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="shop" expand="1"/>
<field name="warehouse" expand="1"/>
<field name="shopify_id"/>
</tree>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="shipment"/>
<field name="shipment" colspan="3"/>
<label name="sale"/>
<field name="sale"/>
<label name="shopify_identifier"/>
<field name="shopify_identifier" width="20"/>
</form>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="shipment" expand="1"/>
<field name="sale" expand="1"/>
<field name="shopify_identifier" expand="2"/>
</tree>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,93 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="shop_view_form">
<field name="model">web.shop</field>
<field name="inherit" ref="web_shop.shop_view_form"/>
<field name="name">shop_form</field>
</record>
<record model="ir.ui.view" id="shop_stock_location_view_form">
<field name="model">web.shop-stock.location</field>
<field name="type">form</field>
<field name="priority" eval="20"/>
<field name="name">shop_stock_location_form</field>
</record>
<record model="ir.ui.view" id="shop_stock_location_view_list">
<field name="model">web.shop-stock.location</field>
<field name="type">tree</field>
<field name="priority" eval="20"/>
<field name="name">shop_stock_location_list</field>
</record>
<record model="ir.ui.view" id="shop_shopify_identifier_view_form">
<field name="model">web.shop.shopify_identifier</field>
<field name="type">form</field>
<field name="name">shop_shopify_identifier_form</field>
</record>
<record model="ir.ui.view" id="shop_shopify_identifier_view_list">
<field name="model">web.shop.shopify_identifier</field>
<field name="type">tree</field>
<field name="name">shop_shopify_identifier_list</field>
</record>
<record model="ir.action.act_window" id="act_shop_shopify_identifier_form">
<field name="name">Shopify Identifiers</field>
<field name="res_model">web.shop.shopify_identifier</field>
</record>
<record model="ir.action.act_window.view" id="act_shop_shopify_identifier_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="shop_shopify_identifier_view_list"/>
<field name="act_window" ref="act_shop_shopify_identifier_form"/>
</record>
<record model="ir.action.act_window.view" id="act_shop_shopify_identifier_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="shop_shopify_identifier_view_form"/>
<field name="act_window" ref="act_shop_shopify_identifier_form"/>
</record>
<menuitem
parent="ir.menu_models"
action="act_shop_shopify_identifier_form"
sequence="50"
id="menu_shop_shopify_identifier_form"/>
<record model="ir.model.access" id="access_shop_shopify_identifier">
<field name="model">web.shop.shopify_identifier</field>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_shop_shopify_identifier_admin">
<field name="model">web.shop.shopify_identifier</field>
<field name="group" ref="res.group_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<record model="ir.model.button" id="shop_shopify_identifier_set_to_update_button">
<field name="model">web.shop.shopify_identifier</field>
<field name="name">set_to_update</field>
<field name="string">Set to Update</field>
</record>
<record model="ir.ui.view" id="shop_shopify_payment_journal_view_form">
<field name="model">web.shop.shopify_payment_journal</field>
<field name="type">form</field>
<field name="name">shop_shopify_payment_journal_form</field>
</record>
<record model="ir.ui.view" id="shop_shopify_payment_journal_view_list">
<field name="model">web.shop.shopify_payment_journal</field>
<field name="type">tree</field>
<field name="name">shop_shopify_payment_journal_list</field>
</record>
</data>
</tryton>