Esempio n. 1
0
def create_delivery_note(source_name, target_doc=None):
	pick_list = frappe.get_doc('Pick List', source_name)
	validate_item_locations(pick_list)

	sales_orders = [d.sales_order for d in pick_list.locations if d.sales_order]
	sales_orders = set(sales_orders)

	delivery_note = None
	for sales_order in sales_orders:
		delivery_note = create_delivery_note_from_sales_order(sales_order,
			delivery_note, skip_item_mapping=True)

	# map rows without sales orders as well
	if not delivery_note:
		delivery_note = frappe.new_doc("Delivery Note")

	item_table_mapper = {
		'doctype': 'Delivery Note Item',
		'field_map': {
			'rate': 'rate',
			'name': 'so_detail',
			'parent': 'against_sales_order',
		},
		'condition': lambda doc: abs(doc.delivered_qty) < abs(doc.qty) and doc.delivered_by_supplier!=1
	}

	item_table_mapper_without_so = {
		'doctype': 'Delivery Note Item',
		'field_map': {
			'rate': 'rate',
			'name': 'name',
			'parent': '',
		}
	}

	for location in pick_list.locations:
		if location.sales_order_item:
			sales_order_item = frappe.get_cached_doc('Sales Order Item', {'name':location.sales_order_item})
		else:
			sales_order_item = None

		source_doc, table_mapper = [sales_order_item, item_table_mapper] if sales_order_item \
			else [location, item_table_mapper_without_so]

		dn_item = map_child_doc(source_doc, delivery_note, table_mapper)

		if dn_item:
			dn_item.warehouse = location.warehouse
			dn_item.qty = location.picked_qty
			dn_item.batch_no = location.batch_no
			dn_item.serial_no = location.serial_no

			update_delivery_note_item(source_doc, dn_item, delivery_note)

	set_delivery_note_missing_values(delivery_note)

	delivery_note.pick_list = pick_list.name
	delivery_note.customer = pick_list.customer if pick_list.customer else None

	return delivery_note
Esempio n. 2
0
def create_dn_with_so(sales_dict, pick_list):
    delivery_note = None

    item_table_mapper = {
        "doctype":
        "Delivery Note Item",
        "field_map": {
            "rate": "rate",
            "name": "so_detail",
            "parent": "against_sales_order",
        },
        "condition":
        lambda doc: abs(doc.delivered_qty) < abs(doc.qty) and doc.
        delivered_by_supplier != 1,
    }

    for customer in sales_dict:
        for so in sales_dict[customer]:
            delivery_note = None
            delivery_note = create_delivery_note_from_sales_order(
                so, delivery_note, skip_item_mapping=True)
            break
        if delivery_note:
            # map all items of all sales orders of that customer
            for so in sales_dict[customer]:
                map_pl_locations(pick_list, item_table_mapper, delivery_note,
                                 so)
            delivery_note.flags.ignore_mandatory = True
            delivery_note.insert()
            update_packed_item_details(pick_list, delivery_note)
            delivery_note.save()

    return delivery_note
Esempio n. 3
0
def create_delivery_note(source_name, target_doc=None):
    pick_list = frappe.get_doc('Pick List', source_name)
    sales_orders = [d.sales_order for d in pick_list.locations]
    sales_orders = set(sales_orders)

    delivery_note = None
    for sales_order in sales_orders:
        delivery_note = create_delivery_note_from_sales_order(
            sales_order, delivery_note, skip_item_mapping=True)

    item_table_mapper = {
        'doctype':
        'Delivery Note Item',
        'field_map': {
            'rate': 'rate',
            'name': 'so_detail',
            'parent': 'against_sales_order',
        },
        'condition':
        lambda doc: abs(doc.delivered_qty) < abs(doc.qty) and doc.
        delivered_by_supplier != 1
    }

    for location in pick_list.locations:
        sales_order_item = frappe.get_cached_doc('Sales Order Item',
                                                 location.sales_order_item)
        dn_item = map_child_doc(sales_order_item, delivery_note,
                                item_table_mapper)

        if dn_item:
            dn_item.warehouse = location.warehouse
            dn_item.qty = location.picked_qty
            dn_item.batch_no = location.batch_no
            dn_item.serial_no = location.serial_no

            update_delivery_note_item(sales_order_item, dn_item, delivery_note)

    set_delivery_note_missing_values(delivery_note)

    delivery_note.pick_list = pick_list.name

    return delivery_note
Esempio n. 4
0
def on_submit(self, method):
	pick_list = frappe.get_doc('Pick List', self.name)
	validate_item_locations(pick_list)

	sales_orders = [d.sales_order for d in pick_list.locations if d.sales_order]
	sales_orders = set(sales_orders)

	delivery_note = None
	for sales_order in sales_orders:
		delivery_note = create_delivery_note_from_sales_order(sales_order,
			delivery_note, skip_item_mapping=True)
		delivery_note.update({
			'ignore_pricing_rule': frappe.db.get_value('Sales Order', sales_order, 'ignore_pricing_rule'),
			"disable_rounded_total": 1
		})
		#Add pick list submitted date in sales order
		sales_doc = frappe.get_doc("Sales Order", sales_order)
		sales_doc.update({"pick_list_submitted_date": datetime.datetime.now(timezone('US/Pacific')).strftime("%Y-%m-%d %H:%M:%S")})
		sales_doc.save()

	# map rows without sales orders as well
	if not delivery_note:
		delivery_note = frappe.new_doc("Delivery Note")

	item_table_mapper = {
		'doctype': 'Delivery Note Item',
		'field_map': {
			'rate': 'rate',
			'name': 'so_detail',
			'parent': 'against_sales_order',
		},
		'condition': lambda doc: abs(doc.delivered_qty) < abs(doc.qty) and doc.delivered_by_supplier!=1
	}

	item_table_mapper_without_so = {
		'doctype': 'Delivery Note Item',
		'field_map': {
			'rate': 'rate',
			'name': 'name',
			'parent': '',
		}
	}

	for location in pick_list.locations:
		if location.sales_order_item:
			sales_order_item = frappe.get_cached_doc('Sales Order Item', {'name':location.sales_order_item})
		else:
			sales_order_item = None

		source_doc, table_mapper = [sales_order_item, item_table_mapper] if sales_order_item \
			else [location, item_table_mapper_without_so]

		dn_item = map_child_doc(source_doc, delivery_note, table_mapper)

		if dn_item:
			dn_item.warehouse = location.warehouse
			dn_item.qty = location.picked_qty
			dn_item.batch_no = location.batch_no
			dn_item.serial_no = location.serial_no

			update_delivery_note_item(source_doc, dn_item, delivery_note)

	set_delivery_note_missing_values(delivery_note)

	delivery_note.pick_list = pick_list.name
	delivery_note.customer = pick_list.customer if pick_list.customer else None
	if pick_list.ais_source:
		delivery_note.source = pick_list.ais_source
	delivery_note.save()