Exemple #1
0
def set_address_details(out, party, party_type, doctype=None, company=None):
    billing_address_field = "customer_address" if party_type == "Lead" \
     else party_type.lower() + "_address"
    out[billing_address_field] = get_default_address(party_type, party.name)
    out.update(
        get_fetch_values(doctype, billing_address_field,
                         out[billing_address_field]))

    # address display
    out.address_display = get_address_display(out[billing_address_field])

    # shipping address
    if party_type in ["Customer", "Lead"]:
        out.shipping_address_name = get_default_address(
            party_type, party.name, 'is_shipping_address')
        out.shipping_address = get_address_display(
            out["shipping_address_name"])
        out.update(
            get_fetch_values(doctype, 'shipping_address_name',
                             out.shipping_address_name))

    if doctype and doctype in ['Sales Invoice']:
        out.update(get_company_address(company))
        if out.company_address:
            out.update(
                get_fetch_values(doctype, 'company_address',
                                 out.company_address))
Exemple #2
0
def set_address_details(party_details, party, party_type, doctype=None, company=None, party_address=None, company_address=None, shipping_address=None):
	billing_address_field = "customer_address" if party_type == "Lead" \
		else party_type.lower() + "_address"
	party_details[billing_address_field] = party_address or get_default_address(party_type, party.name)
	if doctype:
		party_details.update(get_fetch_values(doctype, billing_address_field, party_details[billing_address_field]))
	# address display
	party_details.address_display = get_address_display(party_details[billing_address_field])
	# shipping address
	if party_type in ["Customer", "Lead"]:
		party_details.shipping_address_name = shipping_address or get_party_shipping_address(party_type, party.name)
		party_details.shipping_address = get_address_display(party_details["shipping_address_name"])
		if doctype:
			party_details.update(get_fetch_values(doctype, 'shipping_address_name', party_details.shipping_address_name))

	if company_address:
		party_details.update({'company_address': company_address})
	else:
		party_details.update(get_company_address(company))

	if doctype and doctype in ['Delivery Note', 'Sales Invoice', 'Sales Order']:
		if party_details.company_address:
			party_details.update(get_fetch_values(doctype, 'company_address', party_details.company_address))
		get_regional_address_details(party_details, doctype, company)

	elif doctype and doctype in ["Purchase Invoice", "Purchase Order", "Purchase Receipt"]:
		if party_details.company_address:
			party_details["shipping_address"] = shipping_address or party_details["company_address"]
			party_details.shipping_address_display = get_address_display(party_details["shipping_address"])
			party_details.update(get_fetch_values(doctype, 'shipping_address', party_details.shipping_address))
		get_regional_address_details(party_details, doctype, company)

	return party_details.get(billing_address_field), party_details.shipping_address_name
Exemple #3
0
def set_address_details(out, party, party_type, doctype=None, company=None, party_address=None, shipping_address=None):
	billing_address_field = "customer_address" if party_type == "Lead" \
		else party_type.lower() + "_address"
	out[billing_address_field] = party_address or get_default_address(party_type, party.name)
	if doctype:
		out.update(get_fetch_values(doctype, billing_address_field, out[billing_address_field]))
	# address display
	out.address_display = get_address_display(out[billing_address_field])
	# shipping address
	if party_type in ["Customer", "Lead"]:
		out.shipping_address_name = shipping_address or get_party_shipping_address(party_type, party.name)
		out.shipping_address = get_address_display(out["shipping_address_name"])
		if doctype:
			out.update(get_fetch_values(doctype, 'shipping_address_name', out.shipping_address_name))

	if doctype and doctype in ['Delivery Note', 'Sales Invoice']:
		out.update(get_company_address(company))
		if out.company_address:
			out.update(get_fetch_values(doctype, 'company_address', out.company_address))
		get_regional_address_details(out, doctype, company)

	elif doctype and doctype == "Purchase Invoice":
		out.update(get_company_address(company))
		if out.company_address:
			out["shipping_address"] = shipping_address or out["company_address"]
			out.shipping_address_display = get_address_display(out["shipping_address"])
			out.update(get_fetch_values(doctype, 'shipping_address', out.shipping_address))
		get_regional_address_details(out, doctype, company)
Exemple #4
0
def get_address_country(out, party, party_type, doctype=None, company=None):
	billing_address_field = "customer_address" if party_type == "Lead" \
		else party_type.lower() + "_address"
	out[billing_address_field] = get_default_address(party_type, party.name)
	out.update(get_fetch_values(doctype, billing_address_field, out[billing_address_field]))

	# # address display
	# out.address_display = get_address_display(out[billing_address_field])

	# address country
	address_dict = frappe.db.get_value("Address", out[billing_address_field], "*", as_dict=True) or {}
	billing_country_field = "customer_country" if party_type == "Lead" \
		else party_type.lower() + "_country"
	out[billing_country_field] = address_dict.country
	out.update(get_fetch_values(doctype, billing_country_field, out[billing_country_field]))


	# # shipping address
	# if party_type in ["Customer", "Lead"]:
	# 	out.shipping_address_name = get_default_address(party_type, party.name, 'is_shipping_address')
	# 	out.shipping_address = get_address_display(out["shipping_address_name"])
	# 	out.update(get_fetch_values(doctype, 'shipping_address_name', out.shipping_address_name))

	# if doctype and doctype in ['Sales Invoice']:
	# 	out.company_address = get_default_address('Company', company)
	# 	out.update(get_fetch_values(doctype, 'company_address', out.company_address))
Exemple #5
0
def _set_item_pl_rate(effective_date, item_code, price_list, price_list_rate, uom=None, conversion_factor=None):
	from frappe.model.utils import get_fetch_values
	from erpnext.stock.get_item_details import get_item_price

	if not price_list_rate:
		frappe.msgprint(_("Rate for Item {0} is 0 in Price List {1}. Please confirm rate").format(item_code, price_list))

	effective_date = getdate(effective_date)
	item_price_args = {
		"item_code": item_code,
		"price_list": price_list,
		"uom": uom,
		"min_qty": 0,
		"transaction_date": effective_date,
	}
	current_effective_item_price = get_item_price(item_price_args, item_code)
	current_effective_item_price = current_effective_item_price[0] if current_effective_item_price else None

	existing_item_price = past_item_price = None
	if current_effective_item_price and getdate(current_effective_item_price[3]) == effective_date:
		existing_item_price = current_effective_item_price
	else:
		past_item_price = current_effective_item_price

	item_price_args['period'] = 'future'
	future_item_price = get_item_price(item_price_args, item_code)
	future_item_price = future_item_price[0] if future_item_price else None

	# Update or add item price
	if existing_item_price:
		doc = frappe.get_doc("Item Price", existing_item_price[0])
		doc.price_list_rate = convert_item_uom_for(price_list_rate, item_code, uom, doc.uom, conversion_factor)
	else:
		doc = frappe.new_doc("Item Price")
		doc.item_code = item_code
		doc.price_list = price_list
		doc.uom = uom
		doc.price_list_rate = flt(price_list_rate)
		doc.update(get_fetch_values("Item Price", 'item_code', item_code))
		doc.update(get_fetch_values("Item Price", 'price_list', price_list))

	doc.valid_from = effective_date
	if future_item_price:
		doc.valid_upto = frappe.utils.add_days(future_item_price[3], -1)
	doc.save()

	# Update previous item price
	before_effective_date = frappe.utils.add_days(effective_date, -1)
	if past_item_price and past_item_price[4] != before_effective_date:
		frappe.set_value("Item Price", past_item_price[0], 'valid_upto', before_effective_date)

	frappe.msgprint(_("Price updated for Item {0} in Price List {1}").format(item_code, price_list), alert=1)
Exemple #6
0
    def set_missing_values(source, target):
        if source.po_no:
            if target.po_no:
                target_po_no = target.po_no.split(", ")
                target_po_no.append(source.po_no)
                target.po_no = ", ".join(list(set(target_po_no))) if len(
                    target_po_no) > 1 else target_po_no[0]
            else:
                target.po_no = source.po_no

        # Since the credit limit check is bypassed at sales order level,
        # we need to check it at delivery note
        if cint(
                frappe.db.get_value(
                    "Customer", source.customer,
                    "bypass_credit_limit_check_at_sales_order")):
            check_credit_limit(source.customer, source.company)

        target.ignore_pricing_rule = 1
        target.run_method("set_missing_values")
        target.run_method("calculate_taxes_and_totals")

        # set company address
        target.update(get_company_address(target.company))
        if target.company_address:
            target.update(
                get_fetch_values("Delivery Note", 'company_address',
                                 target.company_address))
Exemple #7
0
def _set_item_pl_rate(effective_date, item_code, price_list, price_list_rate):
    from frappe.model.utils import get_fetch_values

    item_prices = frappe.db.sql("""
		select name, valid_from, valid_upto
		from `tabItem Price`
		where selling = 1 and item_code = %s and price_list = %s
		order by valid_from
	""", [item_code, price_list],
                                as_dict=1)

    existing_item_price = filter(lambda d: d.valid_from == effective_date,
                                 item_prices)
    existing_item_price = existing_item_price[
        0] if existing_item_price else None
    past_item_price = filter(
        lambda d: not d.valid_from or d.valid_from < effective_date,
        item_prices)
    past_item_price = past_item_price[-1] if past_item_price else None
    future_item_price = filter(
        lambda d: d.valid_from and d.valid_from > effective_date, item_prices)
    future_item_price = future_item_price[0] if future_item_price else None

    # Update or add item price
    if existing_item_price:
        doc = frappe.get_doc("Item Price", existing_item_price.name)
    else:
        doc = frappe.new_doc("Item Price")
        doc.item_code = item_code
        doc.price_list = price_list
        doc.update(get_fetch_values("Item Price", 'item_code', item_code))
        doc.update(get_fetch_values("Item Price", 'price_list', price_list))

    doc.price_list_rate = flt(price_list_rate)
    doc.valid_from = effective_date
    if future_item_price:
        doc.valid_upto = frappe.utils.add_days(future_item_price.valid_from,
                                               -1)
    doc.save()

    # Update previous item price
    before_effective_date = frappe.utils.add_days(effective_date, -1)
    if past_item_price and past_item_price.valid_upto != before_effective_date:
        frappe.set_value("Item Price", past_item_price.name, 'valid_upto',
                         before_effective_date)
Exemple #8
0
def update_party_details(party_details, doctype):
    for address_field in [
            'shipping_address', 'company_address', 'supplier_address',
            'shipping_address_name', 'customer_address'
    ]:
        if party_details.get(address_field):
            party_details.update(
                get_fetch_values(doctype, address_field,
                                 party_details.get(address_field)))
Exemple #9
0
	def set_missing_values(source, target):
		target.ignore_pricing_rule = 1
		target.run_method("set_missing_values")
		target.run_method("set_po_nos")
		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Delivery Note", 'company_address', target.company_address))
Exemple #10
0
	def set_missing_values(source, target):
		target.ignore_pricing_rule = 1
		target.run_method("set_missing_values")
		target.run_method("set_po_nos")
		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Delivery Note", 'company_address', target.company_address))
Exemple #11
0
def set_address_details(out, party, party_type, doctype=None, company=None):
	billing_address_field = "customer_address" if party_type == "Lead" \
		else party_type.lower() + "_address"
	out[billing_address_field] = get_default_address(party_type, party.name)
	out.update(get_fetch_values(doctype, billing_address_field, out[billing_address_field]))

	# address display
	out.address_display = get_address_display(out[billing_address_field])

	# shipping address
	if party_type in ["Customer", "Lead"]:
		out.shipping_address_name = get_default_address(party_type, party.name, 'is_shipping_address')
		out.shipping_address = get_address_display(out["shipping_address_name"])
		out.update(get_fetch_values(doctype, 'shipping_address_name', out.shipping_address_name))

	if doctype and doctype in ['Sales Invoice']:
		out.update(get_company_address(company))
		if out.company_address:
			out.update(get_fetch_values(doctype, 'company_address', out.company_address))
	def set_missing_values(source, target):
		target.is_pos = 0
		target.ignore_pricing_rule = 1
		target.flags.ignore_permissions = True
		target.run_method("set_missing_values")
		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Sales Invoice", 'company_address', target.company_address))
Exemple #13
0
	def set_missing_values(source, target):
		target.is_pos = 0
		target.ignore_pricing_rule = 1
		target.flags.ignore_permissions = True
		target.run_method("set_missing_values")
		target.run_method("set_po_nos")
		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Sales Invoice", 'company_address', target.company_address))
Exemple #14
0
	def set_missing_values(source, target):
		target.run_method("set_missing_values")
		target.run_method("set_po_nos")
		target.run_method("calculate_taxes_and_totals")

		if source.company_address:
			target.update({"company_address": source.company_address})
		else:
			# set company address
			target.update(get_company_address(target.company))

		if target.company_address:
			target.update(get_fetch_values("Delivery Note", "company_address", target.company_address))
Exemple #15
0
	def set_missing_values(source, target):
		target.is_pos = 0
		target.ignore_pricing_rule = 1
		target.run_method("set_missing_values")

		if len(target.get("items")) == 0:
			frappe.throw(_("All these items have already been invoiced"))

		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Sales Invoice", 'company_address', target.company_address))	
Exemple #16
0
	def set_missing_values(source, target):
		target.is_pos = 0
		target.ignore_pricing_rule = 1
		target.run_method("set_missing_values")

		if len(target.get("items")) == 0:
			frappe.throw(_("All these items have already been invoiced"))

		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Sales Invoice", 'company_address', target.company_address))	
Exemple #17
0
	def set_missing_values(source, target):
		target.is_pos = 0
		target.ignore_pricing_rule = 1
		target.flags.ignore_permissions = True
		target.run_method("set_missing_values")
		target.run_method("calculate_taxes_and_totals")

		# Since the credit limit check is bypassed at sales order level, we need to check it at sales invoice
		if cint(frappe.db.get_value("Customer", source.customer, "bypass_credit_limit_check_at_sales_order")):
			check_credit_limit(source.customer, source.company)

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Sales Invoice", 'company_address', target.company_address))
Exemple #18
0
	def set_missing_values(source, target):
		target.is_pos = 0
		target.ignore_pricing_rule = 1
		target.flags.ignore_permissions = True
		target.run_method("set_missing_values")
		target.run_method("set_po_nos")
		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Sales Invoice", 'company_address', target.company_address))

		# set the redeem loyalty points if provided via shopping cart
		if source.loyalty_points and source.order_type == "Shopping Cart":
			target.redeem_loyalty_points = 1
Exemple #19
0
    def set_missing_values(source, target):
        if (not source.allow_delivery
                and source.advance_paid < source.rounded_total):
            frappe.throw(
                _('Not allowed to create the Delivery Note before Payment'))
        target.ignore_pricing_rule = 1
        target.run_method("set_missing_values")
        target.run_method("set_po_nos")
        target.run_method("calculate_taxes_and_totals")

        # set company address
        target.update(get_company_address(target.company))
        if target.company_address:
            target.update(
                get_fetch_values("Delivery Note", 'company_address',
                                 target.company_address))
Exemple #20
0
	def set_missing_values(source, target):
		target.is_pos = 0
		target.ignore_pricing_rule = 1
		target.flags.ignore_permissions = True
		target.run_method("set_missing_values")
		target.run_method("set_po_nos")
		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Sales Invoice", 'company_address', target.company_address))

		# set the redeem loyalty points if provided via shopping cart
		if source.loyalty_points and source.order_type == "Shopping Cart":
			target.redeem_loyalty_points = 1
	def set_missing_values(source, target):
		if source.po_no:
			if target.po_no:
				target_po_no = target.po_no.split(", ")
				target_po_no.append(source.po_no)
				target.po_no = ", ".join(list(set(target_po_no))) if len(target_po_no) > 1 else target_po_no[0]
			else:
				target.po_no = source.po_no

		target.ignore_pricing_rule = 1
		target.run_method("set_missing_values")
		target.run_method("calculate_taxes_and_totals")
		
		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Delivery Note", 'company_address', target.company_address))
Exemple #22
0
    def set_missing_values(source, target):
        so = [d.against_sales_order for d in target.items]
        if so:
            po_no_list = frappe.get_all('Sales Order',
                                        'po_no',
                                        filters={'name': ('in', so)})
            target.po_no = ', '.join(d.po_no for d in po_no_list if d.po_no)

        target.ignore_pricing_rule = 1
        target.run_method("set_missing_values")
        target.run_method("calculate_taxes_and_totals")

        # set company address
        target.update(get_company_address(target.company))
        if target.company_address:
            target.update(
                get_fetch_values("Delivery Note", 'company_address',
                                 target.company_address))
Exemple #23
0
    def set_missing_values(source, target):
        target.ignore_pricing_rule = 1
        target.flags.ignore_permissions = True
        target.run_method("set_missing_values")
        target.run_method("set_po_nos")
        target.run_method("calculate_taxes_and_totals")

        if source.company_address:
            target.update({'company_address': source.company_address})
        else:
            # set company address
            target.update(get_company_address(target.company))

        if target.company_address:
            target.update(
                get_fetch_values("Sales Invoice", 'company_address',
                                 target.company_address))

        # set print heading
        target.select_print_heading = frappe.db.get_single_value(
            'ERPNext France Settings', 'deposit_print_heading')
Exemple #24
0
    def set_missing_values(source, target):
        target.run_method("set_missing_values")
        target.run_method("set_po_nos")

        if len(target.get("items")) == 0:
            frappe.throw(
                _("All these items have already been Invoiced/Returned"))

        target.run_method("calculate_taxes_and_totals")

        # set company address
        if source.company_address:
            target.update({"company_address": source.company_address})
        else:
            # set company address
            target.update(get_company_address(target.company))

        if target.company_address:
            target.update(
                get_fetch_values("Sales Invoice", "company_address",
                                 target.company_address))
Exemple #25
0
	def set_missing_values(source, target):
		if source.po_no:
			if target.po_no:
				target_po_no = target.po_no.split(", ")
				target_po_no.append(source.po_no)
				target.po_no = ", ".join(list(set(target_po_no))) if len(target_po_no) > 1 else target_po_no[0]
			else:
				target.po_no = source.po_no

		# Since the credit limit check is bypassed at sales order level,
		# we need to check it at delivery note
		if cint(frappe.db.get_value("Customer", source.customer, "bypass_credit_limit_check_at_sales_order")):
			check_credit_limit(source.customer, source.company)

		target.ignore_pricing_rule = 1
		target.run_method("set_missing_values")
		target.run_method("calculate_taxes_and_totals")

		# set company address
		target.update(get_company_address(target.company))
		if target.company_address:
			target.update(get_fetch_values("Delivery Note", 'company_address', target.company_address))
def make_against_project(project_name, dt):
	from frappe.model.utils import get_fetch_values

	project = frappe.get_doc("Project", project_name)
	doc = frappe.new_doc(dt)

	if doc.meta.has_field('company'):
		doc.company = project.company
	if doc.meta.has_field('project'):
		doc.project = project_name
	if doc.meta.has_field('set_project'):
		doc.set_project = project_name

	# Set customer
	if project.customer:
		if doc.meta.has_field('customer'):
			doc.customer = project.customer
			doc.update(get_fetch_values(doc.doctype, 'customer', project.customer))
		elif dt == 'Quotation':
			doc.quotation_to = 'Customer'
			doc.party_name = project.customer
			doc.update(get_fetch_values(doc.doctype, 'party_name', project.customer))

	if project.item_code:
		if doc.meta.has_field('item_code'):
			doc.item_code = project.item_code
			doc.update(get_fetch_values(doc.doctype, 'item_code', project.item_code))

			if doc.meta.has_field('serial_no'):
				doc.serial_no = project.serial_no
				doc.update(get_fetch_values(doc.doctype, 'serial_no', project.serial_no))
		else:
			child = doc.append("purposes" if dt == "Maintenance Visit" else "items", {
				"item_code": project.item_code,
				"serial_no": project.serial_no
			})
			child.update(get_fetch_values(child.doctype, 'item_code', project.item_code))
			if child.meta.has_field('serial_no'):
				child.update(get_fetch_values(child.doctype, 'serial_no', project.serial_no))

	doc.run_method("set_missing_values")
	doc.run_method("calculate_taxes_and_totals")
	return doc