def test_returning_full_bundles(self): from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_return item_list = [ { "item_code": self.bundle, "warehouse": self.warehouse, "qty": 1, "rate": 100, }, { "item_code": self.bundle2, "warehouse": self.warehouse, "qty": 1, "rate": 100, }, ] so = make_sales_order(item_list=item_list, warehouse=self.warehouse) dn = make_delivery_note(so.name) dn.save() dn.submit() # create return dn_ret = make_sales_return(dn.name) dn_ret.save() dn_ret.submit() self.assertReturns(dn.packed_items, dn_ret.packed_items)
def make_sales_return_records(): for data in frappe.get_all('Delivery Note', fields=["name"], filters={"docstatus": 1}): if random.random() < 0.2: try: dn = make_sales_return(data.name) dn.insert() dn.submit() frappe.db.commit() except Exception: frappe.db.rollback()
def make_sales_return_records(): if random.random() < 0.1: for data in frappe.get_all('Delivery Note', fields=["name"], filters={"docstatus": 1}): if random.random() < 0.1: try: dn = make_sales_return(data.name) dn.insert() dn.submit() frappe.db.commit() except Exception: frappe.db.rollback()
def make_return_delivery(delivery_note, returned_items): """ If all the ordered items are not delivered, create a return Delivery Note against the returned items. Args: delivery_note (str): The reference Delivery Note that contains order info. returned_items (str): Any delivered items that have been returned. Example: '[ { "reason": "Reason for rejection", "item_code": "VC-CB-SSB-0001", "qty": 1.0 }, ... ]' Returns: str: The generated draft return Delivery Note ID """ if isinstance(returned_items, str): returned_items = json.loads(returned_items) if isinstance(returned_items, list): return_delivery = make_sales_return(delivery_note) items_returned = [] for item in return_delivery.items: returned_item = next((_item for _item in returned_items if _item.get("item_code") == item.item_code), None) if not returned_item: item.qty = 0 else: item.qty = -(returned_item.get("qty") or item.qty) or 0 item.reason_for_return = returned_item.get("reason") items_returned.append(item) return_delivery.items = items_returned return_delivery.save() return_delivery_id = return_delivery.name return return_delivery_id frappe.throw(_("Invalid format for returned items"), frappe.CSRFTokenError)
def test_returning_partial_bundle_qty(self): from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_return so = make_sales_order(item_code=self.bundle, warehouse=self.warehouse, qty=2) dn = make_delivery_note(so.name) dn.save() dn.submit() # create return dn_ret = make_sales_return(dn.name) # halve the qty dn_ret.items[0].qty = -1 dn_ret.save() dn_ret.submit() expected_returns = dn.packed_items for d in expected_returns: d.qty /= 2 self.assertReturns(expected_returns, dn_ret.packed_items)
def test_returning_partial_bundles(self): from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_return item_list = [ { "item_code": self.bundle, "warehouse": self.warehouse, "qty": 1, "rate": 100, }, { "item_code": self.bundle2, "warehouse": self.warehouse, "qty": 1, "rate": 100, }, ] so = make_sales_order(item_list=item_list, warehouse=self.warehouse) dn = make_delivery_note(so.name) dn.save() dn.submit() # create return dn_ret = make_sales_return(dn.name) # remove bundle 2 dn_ret.items.pop() dn_ret.save() dn_ret.submit() dn_ret.reload() self.assertTrue( all(d.parent_item == self.bundle for d in dn_ret.packed_items)) expected_returns = [ d for d in dn.packed_items if d.parent_item == self.bundle ] self.assertReturns(expected_returns, dn_ret.packed_items)