Skip to content

Commit 72ea651

Browse files
committed
Merge branch 'develop'
2 parents 48bfd1e + e8a932b commit 72ea651

9 files changed

Lines changed: 117 additions & 60 deletions

File tree

ecommerce_integrations/amazon/doctype/amazon_sp_api_settings/amazon_repository.py

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@
1313

1414

1515
class AmazonRepository:
16-
def __init__(self) -> None:
17-
self.amz_settings = frappe.get_doc("Amazon SP API Settings")
16+
def __init__(self, amz_setting_name) -> None:
17+
self.amz_setting = frappe.get_doc("Amazon SP API Settings", amz_setting_name)
1818
self.instance_params = dict(
19-
iam_arn=self.amz_settings.iam_arn,
20-
client_id=self.amz_settings.client_id,
21-
client_secret=self.amz_settings.get_password("client_secret"),
22-
refresh_token=self.amz_settings.refresh_token,
23-
aws_access_key=self.amz_settings.aws_access_key,
24-
aws_secret_key=self.amz_settings.get_password("aws_secret_key"),
25-
country_code=self.amz_settings.country,
19+
iam_arn=self.amz_setting.iam_arn,
20+
client_id=self.amz_setting.client_id,
21+
client_secret=self.amz_setting.get_password("client_secret"),
22+
refresh_token=self.amz_setting.refresh_token,
23+
aws_access_key=self.amz_setting.aws_access_key,
24+
aws_secret_key=self.amz_setting.get_password("aws_secret_key"),
25+
country_code=self.amz_setting.country,
2626
)
2727

2828
# Helper Methods
@@ -34,7 +34,7 @@ def return_as_list(self, input):
3434

3535
def call_sp_api_method(self, sp_api_method, **kwargs):
3636
errors = {}
37-
max_retries = self.amz_settings.max_retry_limit
37+
max_retries = self.amz_setting.max_retry_limit
3838

3939
for x in range(max_retries):
4040
try:
@@ -53,8 +53,8 @@ def call_sp_api_method(self, sp_api_method, **kwargs):
5353
message=f"{error}: {errors.get(error)}", title=f'Method "{sp_api_method.__name__}" failed'
5454
)
5555

56-
self.amz_settings.enable_sync = 0
57-
self.amz_settings.save()
56+
self.amz_setting.enable_sync = 0
57+
self.amz_setting.save()
5858

5959
frappe.throw(
6060
_("Scheduled sync has been temporarily disabled because maximum retries have been exceeded!")
@@ -70,8 +70,8 @@ def get_account(self, name):
7070
if not account_name:
7171
new_account = frappe.new_doc("Account")
7272
new_account.account_name = "Amazon {0}".format(name)
73-
new_account.company = self.amz_settings.company
74-
new_account.parent_account = self.amz_settings.market_place_account_group
73+
new_account.company = self.amz_setting.company
74+
new_account.parent_account = self.amz_setting.market_place_account_group
7575
new_account.insert(ignore_permissions=True)
7676
account_name = new_account.name
7777

@@ -180,9 +180,9 @@ def create_customer(self, order):
180180
else:
181181
new_customer = frappe.new_doc("Customer")
182182
new_customer.customer_name = order_customer_name
183-
new_customer.customer_group = self.amz_settings.customer_group
184-
new_customer.territory = self.amz_settings.territory
185-
new_customer.customer_type = self.amz_settings.customer_type
183+
new_customer.customer_group = self.amz_setting.customer_group
184+
new_customer.territory = self.amz_setting.territory
185+
new_customer.customer_type = self.amz_setting.customer_type
186186
new_customer.save()
187187

188188
new_contact = frappe.new_doc("Contact")
@@ -240,7 +240,7 @@ def get_order_items(self, order_id):
240240
)
241241

242242
final_order_items = []
243-
warehouse = self.amz_settings.warehouse
243+
warehouse = self.amz_setting.warehouse
244244

245245
while True:
246246

@@ -298,11 +298,11 @@ def create_sales_order(self, order):
298298
"delivery_date": delivery_date,
299299
"transaction_date": transaction_date,
300300
"items": items,
301-
"company": self.amz_settings.company,
301+
"company": self.amz_setting.company,
302302
}
303303
)
304304

305-
taxes_and_charges = self.amz_settings.taxes_charges
305+
taxes_and_charges = self.amz_setting.taxes_charges
306306

307307
if taxes_and_charges:
308308
charges_and_fees = self.get_charges_and_fees(order_id)
@@ -373,7 +373,7 @@ def create_item_group(self, amazon_item):
373373
if not item_group:
374374
new_item_group = frappe.new_doc("Item Group")
375375
new_item_group.item_group_name = item_group_name
376-
new_item_group.parent_item_group = self.amz_settings.parent_item_group
376+
new_item_group.parent_item_group = self.amz_setting.parent_item_group
377377
new_item_group.insert()
378378
return new_item_group.item_group_name
379379

@@ -425,7 +425,7 @@ def create_ecommerce_item(self, item_code, asin, sku):
425425

426426
def create_item_price(self, amazon_item, item_code):
427427
item_price = frappe.new_doc("Item Price")
428-
item_price.price_list = self.amz_settings.price_list
428+
item_price.price_list = self.amz_setting.price_list
429429
item_price.price_list_rate = (
430430
amazon_item.get("AttributeSets")[0].get("ListPrice", {}).get("Amount") or 0
431431
)
@@ -536,15 +536,15 @@ def get_report_document(self, report_id):
536536

537537

538538
# Helper functions
539-
def validate_amazon_sp_api_credentials(**kargs):
539+
def validate_amazon_sp_api_credentials(**args):
540540
api = sp_api.SPAPI(
541-
iam_arn=kargs.get("iam_arn"),
542-
client_id=kargs.get("client_id"),
543-
client_secret=kargs.get("client_secret"),
544-
refresh_token=kargs.get("refresh_token"),
545-
aws_access_key=kargs.get("aws_access_key"),
546-
aws_secret_key=kargs.get("aws_secret_key"),
547-
country_code=kargs.get("country"),
541+
iam_arn=args.get("iam_arn"),
542+
client_id=args.get("client_id"),
543+
client_secret=args.get("client_secret"),
544+
refresh_token=args.get("refresh_token"),
545+
aws_access_key=args.get("aws_access_key"),
546+
aws_secret_key=args.get("aws_secret_key"),
547+
country_code=args.get("country"),
548548
)
549549

550550
try:
@@ -559,11 +559,11 @@ def validate_amazon_sp_api_credentials(**kargs):
559559
frappe.throw(msg)
560560

561561

562-
def get_orders(created_after):
563-
amazon_repository = AmazonRepository()
562+
def get_orders(amz_setting_name, created_after):
563+
amazon_repository = AmazonRepository(amz_setting_name)
564564
return amazon_repository.get_orders(created_after)
565565

566566

567-
def get_products_details():
568-
amazon_repository = AmazonRepository()
567+
def get_products_details(amz_setting_name):
568+
amazon_repository = AmazonRepository(amz_setting_name)
569569
return amazon_repository.get_products_details()

ecommerce_integrations/amazon/doctype/amazon_sp_api_settings/amazon_sp_api_settings.json

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"editable_grid": 1,
66
"engine": "InnoDB",
77
"field_order": [
8-
"enable_amazon",
8+
"is_active",
99
"section_break_4",
1010
"iam_arn",
1111
"refresh_token",
@@ -40,9 +40,12 @@
4040
"fields": [
4141
{
4242
"default": "0",
43-
"fieldname": "enable_amazon",
43+
"fieldname": "is_active",
4444
"fieldtype": "Check",
45-
"label": "Enable Amazon"
45+
"in_list_view": 1,
46+
"in_preview": 1,
47+
"in_standard_filter": 1,
48+
"label": "Is Active"
4649
},
4750
{
4851
"fieldname": "section_break_4",
@@ -70,7 +73,8 @@
7073
"fieldtype": "Data",
7174
"in_list_view": 1,
7275
"label": "Client ID",
73-
"reqd": 1
76+
"reqd": 1,
77+
"unique": 1
7478
},
7579
{
7680
"fieldname": "client_secret",
@@ -87,7 +91,8 @@
8791
"fieldname": "aws_access_key",
8892
"fieldtype": "Data",
8993
"label": "AWS Access Key",
90-
"reqd": 1
94+
"reqd": 1,
95+
"unique": 1
9196
},
9297
{
9398
"fieldname": "aws_secret_key",
@@ -231,9 +236,8 @@
231236
"report_hide": 1
232237
}
233238
],
234-
"issingle": 1,
235239
"links": [],
236-
"modified": "2022-02-07 16:16:17.733273",
240+
"modified": "2022-04-19 17:08:28.354861",
237241
"modified_by": "Administrator",
238242
"module": "Amazon",
239243
"name": "Amazon SP API Settings",
@@ -250,7 +254,6 @@
250254
"write": 1
251255
}
252256
],
253-
"quick_entry": 1,
254257
"sort_field": "modified",
255258
"sort_order": "DESC",
256259
"states": [],

ecommerce_integrations/amazon/doctype/amazon_sp_api_settings/amazon_sp_api_settings.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
class AmazonSPAPISettings(Document):
1818
def validate(self):
19-
if self.enable_amazon == 1:
19+
if self.is_active == 1:
2020
self.validate_credentials()
2121
setup_custom_fields()
2222
else:
@@ -42,20 +42,24 @@ def after_save(self):
4242

4343
@frappe.whitelist()
4444
def get_products_details(self):
45-
if self.enable_amazon == 1:
46-
get_products_details()
45+
if self.is_active == 1:
46+
get_products_details(amz_setting_name=self.name)
4747

4848
@frappe.whitelist()
4949
def get_order_details(self):
50-
if self.enable_amazon == 1:
51-
get_orders(created_after=self.after_date)
50+
if self.is_active == 1:
51+
get_orders(amz_setting_name=self.name, created_after=self.after_date)
5252

5353

5454
# Called via a hook in every hour.
5555
def schedule_get_order_details():
56-
amz_settings = frappe.get_doc("Amazon SP API Settings")
57-
if amz_settings.enable_amazon and amz_settings.enable_sync:
58-
get_orders(created_after=amz_settings.after_date)
56+
amz_settings = frappe.get_all(
57+
"Amazon SP API Settings", filters={"is_active": 1, "enable_sync": 1}, pluck="name"
58+
)
59+
60+
for amz_setting in amz_settings:
61+
after_date = frappe.get_value("Amazon SP API Settings", amz_setting, "after_date")
62+
get_orders(amz_setting_name=amz_setting, created_after=after_date)
5963

6064

6165
def setup_custom_fields():

ecommerce_integrations/amazon/doctype/amazon_sp_api_settings/test_amazon_sp_api_settings.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def get_item_group():
217217

218218
return item_group_name
219219

220-
self.enable_amazon = 1
220+
self.is_active = 1
221221
self.iam_arn = "********************"
222222
self.refresh_token = "********************"
223223
self.client_id = "********************"
@@ -241,19 +241,19 @@ def get_item_group():
241241

242242
class TestAmazonRepository(AmazonRepository):
243243
def __init__(self) -> None:
244-
self.amz_settings = TestAmazonSettings()
244+
self.amz_setting = TestAmazonSettings()
245245
self.instance_params = dict(
246-
iam_arn=self.amz_settings.iam_arn,
247-
client_id=self.amz_settings.client_id,
248-
client_secret=self.amz_settings.client_secret,
249-
refresh_token=self.amz_settings.refresh_token,
250-
aws_access_key=self.amz_settings.aws_access_key,
251-
aws_secret_key=self.amz_settings.aws_secret_key,
252-
country_code=self.amz_settings.country,
246+
iam_arn=self.amz_setting.iam_arn,
247+
client_id=self.amz_setting.client_id,
248+
client_secret=self.amz_setting.client_secret,
249+
refresh_token=self.amz_setting.refresh_token,
250+
aws_access_key=self.amz_setting.aws_access_key,
251+
aws_secret_key=self.amz_setting.aws_secret_key,
252+
country_code=self.amz_setting.country,
253253
)
254254

255255
def call_sp_api_method(self, sp_api_method, **kwargs):
256-
max_retries = self.amz_settings.max_retry_limit
256+
max_retries = self.amz_setting.max_retry_limit
257257

258258
for x in range(max_retries):
259259
try:

ecommerce_integrations/patches.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
ecommerce_integrations.patches.update_shopify_custom_fields
2+
ecommerce_integrations.patches.copy_amazon_single_doc
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import frappe
2+
3+
4+
def execute():
5+
if frappe.db.get_single_value("Amazon SP API Settings", "enable_amazon"):
6+
try:
7+
amz_settings = frappe.get_doc("Amazon SP API Settings")
8+
9+
frappe.reload_doc("amazon", "doctype", frappe.scrub("Amazon SP API Settings"))
10+
11+
new_amz_setting = frappe.new_doc("Amazon SP API Settings")
12+
new_amz_setting.is_active = amz_settings.enable_amazon
13+
new_amz_setting.iam_arn = amz_settings.iam_arn
14+
new_amz_setting.refresh_token = amz_settings.refresh_token
15+
new_amz_setting.client_id = amz_settings.client_id
16+
new_amz_setting.client_secret = amz_settings.get_password("client_secret")
17+
new_amz_setting.aws_access_key = amz_settings.aws_access_key
18+
new_amz_setting.aws_secret_key = amz_settings.get_password("aws_secret_key")
19+
new_amz_setting.country = amz_settings.country
20+
new_amz_setting.company = amz_settings.company
21+
new_amz_setting.warehouse = amz_settings.warehouse
22+
new_amz_setting.parent_item_group = amz_settings.parent_item_group
23+
new_amz_setting.price_list = amz_settings.price_list
24+
new_amz_setting.customer_group = amz_settings.customer_group
25+
new_amz_setting.territory = amz_settings.territory
26+
new_amz_setting.customer_type = amz_settings.customer_type
27+
new_amz_setting.market_place_account_group = amz_settings.market_place_account_group
28+
new_amz_setting.after_date = amz_settings.after_date
29+
new_amz_setting.taxes_charges = amz_settings.taxes_charges
30+
new_amz_setting.enable_sync = amz_settings.enable_sync
31+
new_amz_setting.max_retry_limit = amz_settings.max_retry_limit
32+
new_amz_setting.is_old_data_migrated = amz_settings.is_old_data_migrated
33+
34+
new_amz_setting.insert()
35+
except Exception as e:
36+
frappe.log_error(
37+
message=e, title=f'Method "{execute.__name__}" failed',
38+
)

ecommerce_integrations/unicommerce/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
ITEM_LENGTH_FIELD = "unicommerce_item_length"
3030
ITEM_WIDTH_FIELD = "unicommerce_item_width"
3131
ITEM_HEIGHT_FIELD = "unicommerce_item_height"
32+
ITEM_BATCH_GROUP_FIELD = "unicommerce_batch_group_code"
3233
SHIPPING_PACKAGE_STATUS_FIELD = "unicommerce_shipping_package_status"
3334
IS_COD_CHECKBOX = "unicommerce_is_cod"
3435
SHIPPING_METHOD_FIELD = "unicommerce_shipping_method"

ecommerce_integrations/unicommerce/doctype/unicommerce_settings/unicommerce_settings.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
GRN_STOCK_ENTRY_TYPE,
2323
INVOICE_CODE_FIELD,
2424
IS_COD_CHECKBOX,
25+
ITEM_BATCH_GROUP_FIELD,
2526
ITEM_HEIGHT_FIELD,
2627
ITEM_LENGTH_FIELD,
2728
ITEM_SYNC_CHECKBOX,
@@ -231,6 +232,13 @@ def setup_custom_fields(update=True):
231232
insert_after=ITEM_WIDTH_FIELD,
232233
print_hide=1,
233234
),
235+
dict(
236+
fieldname=ITEM_BATCH_GROUP_FIELD,
237+
label="Batch Group Code",
238+
fieldtype="Data",
239+
insert_after=ITEM_HEIGHT_FIELD,
240+
print_hide=1,
241+
),
234242
],
235243
"Sales Order": [
236244
dict(

ecommerce_integrations/unicommerce/product.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from ecommerce_integrations.unicommerce.api_client import JsonDict, UnicommerceAPIClient
1111
from ecommerce_integrations.unicommerce.constants import (
1212
DEFAULT_WEIGHT_UOM,
13+
ITEM_BATCH_GROUP_FIELD,
1314
ITEM_HEIGHT_FIELD,
1415
ITEM_LENGTH_FIELD,
1516
ITEM_SYNC_CHECKBOX,
@@ -37,6 +38,7 @@
3738
"length": ITEM_LENGTH_FIELD,
3839
"width": ITEM_WIDTH_FIELD,
3940
"height": ITEM_HEIGHT_FIELD,
41+
"batchGroupCode": ITEM_BATCH_GROUP_FIELD,
4042
}
4143

4244
ERPNEXT_TO_UNI_ITEM_MAPPING = {v: k for k, v in UNI_TO_ERPNEXT_ITEM_MAPPING.items()}

0 commit comments

Comments
 (0)