mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-02 11:49:10 +00:00
fix: merge conflict
This commit is contained in:
14
.github/workflows/docker-release.yml
vendored
Normal file
14
.github/workflows/docker-release.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
name: Trigger Docker build on release
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [released]
|
||||||
|
jobs:
|
||||||
|
curl:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: alpine:latest
|
||||||
|
steps:
|
||||||
|
- name: curl
|
||||||
|
run: |
|
||||||
|
apk add curl bash
|
||||||
|
curl -s -X POST -H "Content-Type: application/json" -H "Accept: application/json" -H "Travis-API-Version: 3" -H "Authorization: token ${{ secrets.TRAVIS_CI_TOKEN }}" -d '{"request":{"branch":"master"}}' https://api.travis-ci.com/repo/frappe%2Ffrappe_docker/requests
|
||||||
@@ -16,7 +16,7 @@ frappe.listview_settings['Purchase Invoice'] = {
|
|||||||
} else if(frappe.datetime.get_diff(doc.due_date) < 0) {
|
} else if(frappe.datetime.get_diff(doc.due_date) < 0) {
|
||||||
return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<,Today"];
|
return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<,Today"];
|
||||||
} else {
|
} else {
|
||||||
return [__("Unpaid"), "orange", "outstanding_amount,>,0|due,>=,Today"];
|
return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>=,Today"];
|
||||||
}
|
}
|
||||||
} else if(cint(doc.is_return)) {
|
} else if(cint(doc.is_return)) {
|
||||||
return [__("Return"), "darkgrey", "is_return,=,Yes"];
|
return [__("Return"), "darkgrey", "is_return,=,Yes"];
|
||||||
|
|||||||
@@ -286,14 +286,14 @@ class PartyLedgerSummaryReport(object):
|
|||||||
|
|
||||||
if parties and accounts:
|
if parties and accounts:
|
||||||
if len(parties) == 1:
|
if len(parties) == 1:
|
||||||
party = parties.keys()[0]
|
party = list(parties.keys())[0]
|
||||||
for account, amount in iteritems(accounts):
|
for account, amount in iteritems(accounts):
|
||||||
self.party_adjustment_accounts.add(account)
|
self.party_adjustment_accounts.add(account)
|
||||||
self.party_adjustment_details.setdefault(party, {})
|
self.party_adjustment_details.setdefault(party, {})
|
||||||
self.party_adjustment_details[party].setdefault(account, 0)
|
self.party_adjustment_details[party].setdefault(account, 0)
|
||||||
self.party_adjustment_details[party][account] += amount
|
self.party_adjustment_details[party][account] += amount
|
||||||
elif len(accounts) == 1 and not has_irrelevant_entry:
|
elif len(accounts) == 1 and not has_irrelevant_entry:
|
||||||
account = accounts.keys()[0]
|
account = list(accounts.keys())[0]
|
||||||
self.party_adjustment_accounts.add(account)
|
self.party_adjustment_accounts.add(account)
|
||||||
for party, amount in iteritems(parties):
|
for party, amount in iteritems(parties):
|
||||||
self.party_adjustment_details.setdefault(party, {})
|
self.party_adjustment_details.setdefault(party, {})
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class StockController(AccountsController):
|
|||||||
gl_list = []
|
gl_list = []
|
||||||
warehouse_with_no_account = []
|
warehouse_with_no_account = []
|
||||||
|
|
||||||
|
precision = frappe.get_precision('GL Entry', 'debit_in_account_currency')
|
||||||
for item_row in voucher_details:
|
for item_row in voucher_details:
|
||||||
sle_list = sle_map.get(item_row.name)
|
sle_list = sle_map.get(item_row.name)
|
||||||
if sle_list:
|
if sle_list:
|
||||||
@@ -79,7 +80,7 @@ class StockController(AccountsController):
|
|||||||
"against": item_row.expense_account,
|
"against": item_row.expense_account,
|
||||||
"cost_center": item_row.cost_center,
|
"cost_center": item_row.cost_center,
|
||||||
"remarks": self.get("remarks") or "Accounting Entry for Stock",
|
"remarks": self.get("remarks") or "Accounting Entry for Stock",
|
||||||
"debit": flt(sle.stock_value_difference, 2),
|
"debit": flt(sle.stock_value_difference, precision),
|
||||||
"is_opening": item_row.get("is_opening") or self.get("is_opening") or "No",
|
"is_opening": item_row.get("is_opening") or self.get("is_opening") or "No",
|
||||||
}, warehouse_account[sle.warehouse]["account_currency"]))
|
}, warehouse_account[sle.warehouse]["account_currency"]))
|
||||||
|
|
||||||
@@ -89,7 +90,7 @@ class StockController(AccountsController):
|
|||||||
"against": warehouse_account[sle.warehouse]["account"],
|
"against": warehouse_account[sle.warehouse]["account"],
|
||||||
"cost_center": item_row.cost_center,
|
"cost_center": item_row.cost_center,
|
||||||
"remarks": self.get("remarks") or "Accounting Entry for Stock",
|
"remarks": self.get("remarks") or "Accounting Entry for Stock",
|
||||||
"credit": flt(sle.stock_value_difference, 2),
|
"credit": flt(sle.stock_value_difference, precision),
|
||||||
"project": item_row.get("project") or self.get("project"),
|
"project": item_row.get("project") or self.get("project"),
|
||||||
"is_opening": item_row.get("is_opening") or self.get("is_opening") or "No"
|
"is_opening": item_row.get("is_opening") or self.get("is_opening") or "No"
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -234,14 +234,17 @@ def get_order_taxes(shopify_order, shopify_settings):
|
|||||||
return taxes
|
return taxes
|
||||||
|
|
||||||
def update_taxes_with_shipping_lines(taxes, shipping_lines, shopify_settings):
|
def update_taxes_with_shipping_lines(taxes, shipping_lines, shopify_settings):
|
||||||
|
"""Shipping lines represents the shipping details,
|
||||||
|
each such shipping detail consists of a list of tax_lines"""
|
||||||
for shipping_charge in shipping_lines:
|
for shipping_charge in shipping_lines:
|
||||||
taxes.append({
|
for tax in shipping_charge.get("tax_lines"):
|
||||||
"charge_type": _("Actual"),
|
taxes.append({
|
||||||
"account_head": get_tax_account_head(shipping_charge),
|
"charge_type": _("Actual"),
|
||||||
"description": shipping_charge["title"],
|
"account_head": get_tax_account_head(tax),
|
||||||
"tax_amount": shipping_charge["price"],
|
"description": tax["title"],
|
||||||
"cost_center": shopify_settings.cost_center
|
"tax_amount": tax["price"],
|
||||||
})
|
"cost_center": shopify_settings.cost_center
|
||||||
|
})
|
||||||
|
|
||||||
return taxes
|
return taxes
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import json
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import get_request_session
|
from frappe.utils import get_request_session
|
||||||
|
from requests.exceptions import HTTPError
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
||||||
from erpnext.erpnext_integrations.utils import get_webhook_address
|
from erpnext.erpnext_integrations.utils import get_webhook_address
|
||||||
from erpnext.erpnext_integrations.doctype.shopify_log.shopify_log import make_shopify_log
|
from erpnext.erpnext_integrations.doctype.shopify_log.shopify_log import make_shopify_log
|
||||||
@@ -39,24 +40,28 @@ class ShopifySettings(Document):
|
|||||||
def register_webhooks(self):
|
def register_webhooks(self):
|
||||||
webhooks = ["orders/create", "orders/paid", "orders/fulfilled"]
|
webhooks = ["orders/create", "orders/paid", "orders/fulfilled"]
|
||||||
|
|
||||||
url = get_shopify_url('admin/webhooks.json', self)
|
url = get_shopify_url('admin/api/2020-04/webhooks.json', self)
|
||||||
created_webhooks = [d.method for d in self.webhooks]
|
created_webhooks = [d.method for d in self.webhooks]
|
||||||
|
|
||||||
for method in webhooks:
|
for method in webhooks:
|
||||||
if method in created_webhooks:
|
if method in created_webhooks:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
session = get_request_session()
|
session = get_request_session()
|
||||||
try:
|
try:
|
||||||
d = session.post(url, data=json.dumps({
|
res = session.post(url, data=json.dumps({
|
||||||
"webhook": {
|
"webhook": {
|
||||||
"topic": method,
|
"topic": method,
|
||||||
"address": get_webhook_address(connector_name='shopify_connection', method='store_request_data'),
|
"address": get_webhook_address(connector_name='shopify_connection', method='store_request_data'),
|
||||||
"format": "json"
|
"format": "json"
|
||||||
}
|
}
|
||||||
}), headers=get_header(self))
|
}), headers=get_header(self))
|
||||||
d.raise_for_status()
|
res.raise_for_status()
|
||||||
self.update_webhook_table(method, d.json())
|
self.update_webhook_table(method, res.json())
|
||||||
|
|
||||||
|
except HTTPError as e:
|
||||||
|
error_message = res.json().get('errors', e)
|
||||||
|
make_shopify_log(status="Warning", exception=error_message, rollback=True)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
make_shopify_log(status="Warning", message=e.message, exception=False)
|
make_shopify_log(status="Warning", message=e.message, exception=False)
|
||||||
|
|
||||||
@@ -65,13 +70,18 @@ class ShopifySettings(Document):
|
|||||||
deleted_webhooks = []
|
deleted_webhooks = []
|
||||||
|
|
||||||
for d in self.webhooks:
|
for d in self.webhooks:
|
||||||
url = get_shopify_url('admin/webhooks/{0}.json'.format(d.webhook_id), self)
|
url = get_shopify_url('admin/api/2020-04/webhooks/{0}.json'.format(d.webhook_id), self)
|
||||||
try:
|
try:
|
||||||
res = session.delete(url, headers=get_header(self))
|
res = session.delete(url, headers=get_header(self))
|
||||||
res.raise_for_status()
|
res.raise_for_status()
|
||||||
deleted_webhooks.append(d)
|
deleted_webhooks.append(d)
|
||||||
|
|
||||||
|
except HTTPError as e:
|
||||||
|
error_message = res.json().get('errors', e)
|
||||||
|
make_shopify_log(status="Warning", exception=error_message, rollback=True)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
frappe.log_error(message=frappe.get_traceback(), title=e.message[:140])
|
frappe.log_error(message=e, title='Shopify Webhooks Issue')
|
||||||
|
|
||||||
for d in deleted_webhooks:
|
for d in deleted_webhooks:
|
||||||
self.remove(d)
|
self.remove(d)
|
||||||
@@ -144,4 +154,3 @@ def setup_custom_fields():
|
|||||||
}
|
}
|
||||||
|
|
||||||
create_custom_fields(custom_fields)
|
create_custom_fields(custom_fields)
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from erpnext.erpnext_integrations.doctype.shopify_settings.shopify_settings impo
|
|||||||
shopify_variants_attr_list = ["option1", "option2", "option3"]
|
shopify_variants_attr_list = ["option1", "option2", "option3"]
|
||||||
|
|
||||||
def sync_item_from_shopify(shopify_settings, item):
|
def sync_item_from_shopify(shopify_settings, item):
|
||||||
url = get_shopify_url("/admin/products/{0}.json".format(item.get("product_id")), shopify_settings)
|
url = get_shopify_url("admin/api/2020-04/products/{0}.json".format(item.get("product_id")), shopify_settings)
|
||||||
session = get_request_session()
|
session = get_request_session()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ def get_product_info_for_website(item_code):
|
|||||||
|
|
||||||
def set_product_info_for_website(item):
|
def set_product_info_for_website(item):
|
||||||
"""set product price uom for website"""
|
"""set product price uom for website"""
|
||||||
product_info = get_product_info_for_website(item.item_code)
|
product_info = get_product_info_for_website(item.item_code).get("product_info")
|
||||||
|
|
||||||
if product_info:
|
if product_info:
|
||||||
item.update(product_info)
|
item.update(product_info)
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ def get_item_details(items, sle, filters):
|
|||||||
`tabItem` item
|
`tabItem` item
|
||||||
{cf_join}
|
{cf_join}
|
||||||
where
|
where
|
||||||
item.name in ({item_codes}) and ifnull(item.disabled, 0) = 0
|
item.name in ({item_codes})
|
||||||
""".format(cf_field=cf_field, cf_join=cf_join, item_codes=item_codes), as_dict=1)
|
""".format(cf_field=cf_field, cf_join=cf_join, item_codes=item_codes), as_dict=1)
|
||||||
|
|
||||||
for item in res:
|
for item in res:
|
||||||
|
|||||||
Reference in New Issue
Block a user