Skip to content

Commit

Permalink
fix: reformatted
Browse files Browse the repository at this point in the history
  • Loading branch information
Vikas8600 committed May 12, 2023
1 parent 5fd6611 commit c284ac7
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 92 deletions.
162 changes: 84 additions & 78 deletions ecommerce_integrations/unicommerce/delivery_note.py
Original file line number Diff line number Diff line change
@@ -1,92 +1,98 @@
import frappe
from ecommerce_integrations.unicommerce.api_client import UnicommerceAPIClient
from ecommerce_integrations.unicommerce.constants import ORDER_CODE_FIELD,SETTINGS_DOCTYPE
from ecommerce_integrations.unicommerce.constants import ORDER_CODE_FIELD, SETTINGS_DOCTYPE
from ecommerce_integrations.unicommerce.utils import create_unicommerce_log


@frappe.whitelist()
def prepare_delivery_note():
try:
settings = frappe.get_cached_doc(SETTINGS_DOCTYPE)
if not settings.delivery_note:
return
try:
settings = frappe.get_cached_doc(SETTINGS_DOCTYPE)
if not settings.delivery_note:
return

client = UnicommerceAPIClient()
client = UnicommerceAPIClient()

days_to_sync = min(settings.get("order_status_days") or 2, 14)
minutes = days_to_sync * 24 * 60
days_to_sync = min(settings.get("order_status_days") or 2, 14)
minutes = days_to_sync * 24 * 60

# find all Facilities
enabled_facilities = list(settings.get_integration_to_erpnext_wh_mapping().keys())
enabled_channels = frappe.db.get_list(
"Unicommerce Channel", filters={"enabled": 1}, pluck="channel_id"
)
# find all Facilities
enabled_facilities = list(settings.get_integration_to_erpnext_wh_mapping().keys())
enabled_channels = frappe.db.get_list(
"Unicommerce Channel", filters={"enabled": 1}, pluck="channel_id"
)

for facility in enabled_facilities:
updated_packages = client.search_shipping_packages(updated_since=minutes, facility_code=facility)
valid_packages = [p for p in updated_packages if p.get("channel") in enabled_channels]
if not valid_packages:
continue
shipped_packages = [p for p in valid_packages if p["status"] in ["DISPATCHED"]]
for order in shipped_packages:
if not frappe.db.exists("Delivery Note", {"unicommerce_shipment_id": order["code"]}, "name") and frappe.db.exists("Sales Order", {ORDER_CODE_FIELD: order["saleOrderCode"]}):
sales_order = frappe.get_doc("Sales Order", {ORDER_CODE_FIELD: order["saleOrderCode"]})
if frappe.db.exists("Sales Invoice", {"unicommerce_order_code": sales_order.unicommerce_order_code}):
sales_invoice = frappe.get_doc(
"Sales Invoice", {"unicommerce_order_code": sales_order.unicommerce_order_code}
)
create_delivery_note(sales_order,sales_invoice)
except Exception as e:
create_unicommerce_log(status="Error", exception=e, rollback=True)
for facility in enabled_facilities:
updated_packages = client.search_shipping_packages(
updated_since=minutes, facility_code=facility
)
valid_packages = [p for p in updated_packages if p.get("channel") in enabled_channels]
if not valid_packages:
continue
shipped_packages = [p for p in valid_packages if p["status"] in ["DISPATCHED"]]
for order in shipped_packages:
if not frappe.db.exists(
"Delivery Note", {"unicommerce_shipment_id": order["code"]}, "name"
) and frappe.db.exists("Sales Order", {ORDER_CODE_FIELD: order["saleOrderCode"]}):
sales_order = frappe.get_doc("Sales Order", {ORDER_CODE_FIELD: order["saleOrderCode"]})
if frappe.db.exists(
"Sales Invoice", {"unicommerce_order_code": sales_order.unicommerce_order_code}
):
sales_invoice = frappe.get_doc(
"Sales Invoice", {"unicommerce_order_code": sales_order.unicommerce_order_code}
)
create_delivery_note(sales_order, sales_invoice)
except Exception as e:
create_unicommerce_log(status="Error", exception=e, rollback=True)


def create_delivery_note(so,sales_invoice):
try:
# Create the delivery note
from frappe.model.mapper import make_mapped_doc
def create_delivery_note(so, sales_invoice):
try:
# Create the delivery note
from frappe.model.mapper import make_mapped_doc

res = make_mapped_doc(
method="erpnext.selling.doctype.sales_order.sales_order.make_delivery_note", source_name=so.name
)
res.update({"items": []})
for item in sales_invoice.items:
res.append(
"items",
{
"item_code": item.item_code,
"item_name": item.item_name,
"description": item.description,
"qty": item.qty,
"uom": item.uom,
"rate": item.rate,
"amount": item.amount,
"warehouse": item.warehouse,
"against_sales_order": item.sales_order,
"batch_no": item.batch_no,
"so_detail": item.so_detail,
},
)
for item in sales_invoice.taxes:
res.append(
"taxes",
{
"charge_type": item.charge_type,
"account_head": item.account_head,
"tax_amount": item.tax_amount,
"description": item.description,
"item_wise_tax_detail": item.item_wise_tax_detail,
"dont_recompute_tax": item.dont_recompute_tax,
},
)
res.unicommerce_order_code = sales_invoice.unicommerce_order_code
res.unicommerce_shipment_id = sales_invoice.unicommerce_shipping_package_code
res.save()
res.submit()
log = create_unicommerce_log(method="create_delevery_note", make_new=True)
frappe.flags.request_id = log.name
except Exception as e:
create_unicommerce_log(status="Error", exception=e, rollback=True)
else:
create_unicommerce_log(status="Success")
frappe.flags.request_id = None
return res
res = make_mapped_doc(
method="erpnext.selling.doctype.sales_order.sales_order.make_delivery_note", source_name=so.name
)
res.update({"items": []})
for item in sales_invoice.items:
res.append(
"items",
{
"item_code": item.item_code,
"item_name": item.item_name,
"description": item.description,
"qty": item.qty,
"uom": item.uom,
"rate": item.rate,
"amount": item.amount,
"warehouse": item.warehouse,
"against_sales_order": item.sales_order,
"batch_no": item.batch_no,
"so_detail": item.so_detail,
},
)
for item in sales_invoice.taxes:
res.append(
"taxes",
{
"charge_type": item.charge_type,
"account_head": item.account_head,
"tax_amount": item.tax_amount,
"description": item.description,
"item_wise_tax_detail": item.item_wise_tax_detail,
"dont_recompute_tax": item.dont_recompute_tax,
},
)
res.unicommerce_order_code = sales_invoice.unicommerce_order_code
res.unicommerce_shipment_id = sales_invoice.unicommerce_shipping_package_code
res.save()
res.submit()
log = create_unicommerce_log(method="create_delevery_note", make_new=True)
frappe.flags.request_id = log.name
except Exception as e:
create_unicommerce_log(status="Error", exception=e, rollback=True)
else:
create_unicommerce_log(status="Success")
frappe.flags.request_id = None
return res
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ def setup_custom_fields(update=True):
insert_after="instructions",
collapsible=1,
),
]
],
}

custom_fields = {
Expand Down Expand Up @@ -443,16 +443,16 @@ def setup_custom_fields(update=True):
label="Unicommerce Order No",
fieldtype="Data",
insert_after="unicommerce_section",
read_only=1
read_only=1,
),
dict(
fieldname=SHIPPIND_ID,
label="Unicommerce Shipment Id",
fieldtype="Data",
insert_after=ORDER_CODE_FIELD,
read_only=1
read_only=1,
),
]
],
}

# create sections first for proper ordering
Expand Down
12 changes: 7 additions & 5 deletions ecommerce_integrations/unicommerce/order.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def _get_new_orders(
if order["channel"] not in configured_channels:
continue

#In case a sales invoice is not generated for some reason and is skipped, we need to create it manually. Therefore, I have commented out this line of code.
# In case a sales invoice is not generated for some reason and is skipped, we need to create it manually. Therefore, I have commented out this line of code.
order = client.get_sales_order(order_code=order["code"])
if order:
yield order
Expand All @@ -96,9 +96,11 @@ def _create_sales_invoices(unicommerce_order, sales_order, client: UnicommerceAP
for package in shipping_packages:
# This code was added because the log statement below was being executed every time.
invoice_data = client.get_sales_invoice(
shipping_package_code=package["code"], facility_code=facility_code
)
existing_si = frappe.db.get_value("Sales Invoice", {INVOICE_CODE_FIELD: invoice_data["invoice"]["code"]})
shipping_package_code=package["code"], facility_code=facility_code
)
existing_si = frappe.db.get_value(
"Sales Invoice", {INVOICE_CODE_FIELD: invoice_data["invoice"]["code"]}
)
if existing_si:
continue
try:
Expand Down Expand Up @@ -133,7 +135,7 @@ def create_order(payload: UnicommerceOrder, request_id: Optional[str] = None, cl
so = frappe.get_doc("Sales Order", existing_so)
return so

#If a sales order already exists, then every time it's executed
# If a sales order already exists, then every time it's executed
if request_id is None:
log = create_unicommerce_log(
method="ecommerce_integrations.unicommerce.order.create_order", request_data=payload
Expand Down
4 changes: 2 additions & 2 deletions ecommerce_integrations/unicommerce/product.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@
"width": ITEM_WIDTH_FIELD,
"height": ITEM_HEIGHT_FIELD,
"batchGroupCode": ITEM_BATCH_GROUP_FIELD,
"maxRetailPrice":"standard_rate",
"costPrice":"valuation_rate"
"maxRetailPrice": "standard_rate",
"costPrice": "valuation_rate",
}

ERPNEXT_TO_UNI_ITEM_MAPPING = {v: k for k, v in UNI_TO_ERPNEXT_ITEM_MAPPING.items()}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@
SHIPPING_PACKAGE_CODE_FIELD,
)
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
from ecommerce_integrations.unicommerce.invoice import create_sales_invoice,bulk_generate_invoices
from ecommerce_integrations.unicommerce.invoice import create_sales_invoice, bulk_generate_invoices
from ecommerce_integrations.unicommerce.order import create_order
from ecommerce_integrations.unicommerce.tests.test_client import TestCaseApiClient
from ecommerce_integrations.unicommerce.delivery_note import create_delivery_note


class TestDeliveryNote(TestCaseApiClient):
@classmethod
def setUpClass(cls):
super().setUpClass()


def test_create_invoice_and_delivery_note(self):
"""Use mocked invoice json to create and assert synced fields"""
from ecommerce_integrations.unicommerce import invoice
Expand Down Expand Up @@ -62,5 +62,5 @@ def test_create_invoice_and_delivery_note(self):
self.fail("Sales invoice not generated")

si = frappe.get_doc("Sales Invoice", sales_invoice_code)
dn = create_delivery_note(so,si)
dn = create_delivery_note(so, si)
self.assertEqual(dn.unicommerce_order_code, so.unicommerce_order_code)

0 comments on commit c284ac7

Please sign in to comment.