Example #1
0
def get_party_details(party, party_type, args=None):
	out = {}
	billing_address, shipping_address = None, None
	if args:
		if args.get('billing_address'):
			billing_address = frappe.get_doc('Address', args.get('billing_address'))
		if args.get('shipping_address'):
			shipping_address = frappe.get_doc('Address', args.get('shipping_address'))
	else:
		billing_address_name = get_default_address(party_type, party)
		shipping_address_name = get_default_address(party_type, party, 'is_shipping_address')
		if billing_address_name:
			billing_address = frappe.get_doc('Address', billing_address_name)
		if shipping_address_name:
			shipping_address = frappe.get_doc('Address', shipping_address_name)

	if billing_address:
		out["billing_city"]= billing_address.city
		out["billing_county"]= billing_address.county
		out["billing_state"]= billing_address.state
		out["billing_country"]= billing_address.country

	if shipping_address:
		out["shipping_city"]= shipping_address.city
		out["shipping_county"]= shipping_address.county
		out["shipping_state"]= shipping_address.state
		out["shipping_country"]= shipping_address.country

	return out
Example #2
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))
Example #3
0
def get_party_details(party, party_type, args=None):
    out = {}
    billing_address, shipping_address = None, None
    if args:
        if args.get('billing_address'):
            billing_address = frappe.get_doc('Address',
                                             args.get('billing_address'))
        if args.get('shipping_address'):
            shipping_address = frappe.get_doc('Address',
                                              args.get('shipping_address'))
    else:
        billing_address_name = get_default_address(party_type, party)
        shipping_address_name = get_default_address(party_type, party,
                                                    'is_shipping_address')
        if billing_address_name:
            billing_address = frappe.get_doc('Address', billing_address_name)
        if shipping_address_name:
            shipping_address = frappe.get_doc('Address', shipping_address_name)

    if billing_address:
        out["billing_city"] = billing_address.city
        out["billing_county"] = billing_address.county
        out["billing_state"] = billing_address.state
        out["billing_zipcode"] = billing_address.pincode
        out["billing_country"] = billing_address.country

    if shipping_address:
        out["shipping_city"] = shipping_address.city
        out["shipping_county"] = shipping_address.county
        out["shipping_state"] = shipping_address.state
        out["shipping_zipcode"] = shipping_address.pincode
        out["shipping_country"] = shipping_address.country

    return out
Example #4
0
def get_addresses(company=None, party_type=None, party=None):
    if not (company and party_type and party):
        return {}

    company_addr = frappe.get_doc("Address",
                                  get_default_address("Company", company))
    party_addr = frappe.get_doc("Address",
                                get_default_address(party_type, party))

    return {"company": company_addr, "party": party_addr}
Example #5
0
def set_address_details(out, party, party_type):
	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)

	# 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"])
Example #6
0
def get_addresses(company=None, party_type=None, party=None):
    if not (company and party_type and party):
        return {}

    company_address, party_address = {}, {}
    default_company_address = get_default_address("Company", company)
    if default_company_address:
        company_address = frappe.get_doc("Address", default_company_address)

    default_party_address = get_default_address(party_type, party)
    if default_party_address:
        party_address = frappe.get_doc("Address", default_party_address)

    return {"company": company_address, "party": party_address}
Example #7
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))
Example #8
0
def get_customer_address(customer=None):
    '''Returns formatted address of Customer'''
    if not customer:
        return None
    address = frappe.get_value(
            'Address',
            get_default_address('Customer', customer),
            [
                'address_line1',
                'address_line2',
                'city',
                'county',
                'state',
                'pincode'
            ],
            as_dict=True
        ) or {}
    state = ' - '.join(filter(lambda x: not not x, [
            address.get('state'),
            address.get('pincode'),
        ]))
    return ', '.join(filter(lambda x: not not x, [
            address.get('address_line1'),
            address.get('address_line2'),
            address.get('city'),
            address.get('county'),
            state,
        ]))
Example #9
0
    def get_rows(self):
        self.data = []
        self.get_periodic_data()

        for entity, period_data in iteritems(self.entity_periodic_data):
            row = {
                "entity": entity,
                "entity_name": self.entity_names.get(entity)
            }

            if self.filters.tree_type == 'Customer':
                address = get_default_address("Customer", entity)

                row.update({
                    "city":
                    frappe.db.get_value("Address", address, "city"),
                    "sales_partner":
                    frappe.db.get_value("Customer", entity,
                                        "default_sales_partner")
                })

            total = 0
            for end_date in self.periodic_daterange:
                period = self.get_period(end_date)
                amount = flt(period_data.get(period, 0.0))
                row[scrub(period)] = amount
                total += amount

            row["total"] = total

            if self.filters.tree_type == "Item":
                row["stock_uom"] = period_data.get("stock_uom")

            self.data.append(row)
Example #10
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)
Example #11
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
Example #12
0
def get_primary_address(suppname):
    add = get_address_display(get_default_address('Supplier', suppname))

    if add is not None:
        return add.replace("<br>", '&nbsp;')
    else:
        return add
Example #13
0
def set_address_details(out, party, party_type):
	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)
	
	# address display
	out.address_display = get_address_display(out[billing_address_field])
    def update_address(self):
        # exit if one of the two fields are not present
        if not self.party_type or not self.party: return

        self.party_address = get_default_address(self.party_type, self.party)

        if self.party_address:
            self.display_address = get_address_display(self.party_address)
        else:
            self.display_address = None
Example #15
0
def make_transfer_dn(company, customer, source_name, project=None):
    try:
        current_dn = frappe.get_doc("Delivery Note", source_name)

        new_dn = frappe.copy_doc(current_dn, ignore_no_copy=True)

        new_dn.company = company
        new_dn.company_trn = frappe.db.get_value("Company", company, "tax_id")

        new_dn.customer = customer
        new_dn.project = project

        from erpnext.selling.doctype.customer.customer import get_customer_details
        from frappe.contacts.doctype.address.address import get_default_address, get_address_display

        customer_details = get_customer_details(customer)

        if customer_details:
            new_dn.tax_id = customer_details.tax_id
            new_dn.customer_name_in_arabic = customer_details.customer_name_in_arabic

        new_dn.shipping_address_name = get_default_address(
            'Customer', customer)
        new_dn.shipping_address = get_address_display(
            new_dn.shipping_address_name)
        new_dn.customer_address = get_default_address('Customer', customer)
        new_dn.address_display = get_address_display(new_dn.customer_address)

        if not new_dn.company == current_dn.company:
            from erpnext.stock.utils import get_default_warehouse

            default_warehouse = get_default_warehouse(
                company=new_dn.company).get("source_warehouse")

            for d in new_dn.get("items"):
                d.warehouse = default_warehouse

        new_dn.insert(ignore_permissions=True)

        return new_dn.name

    except:
        return False
Example #16
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))
Example #17
0
def _make_address_text(customer=None):
    """Returns formatted address of Customer"""
    if not customer:
        return None
    address = frappe.get_value(
        "Address",
        get_default_address("Customer", customer),
        ["address_line1", "city"],
        as_dict=True,
    )
    if not address:
        return None
    return join(", ")([address.get("address_line1"), address.get("city")])
def _make_address_text(customer=None):
    """Returns formatted address of Customer"""
    if not customer:
        return None
    address = frappe.get_value(
        'Address',
        get_default_address('Customer', customer),
        ['address_line1', 'city'],
        as_dict=True
    )
    if not address:
        return None
    return join(', ')([address.get('address_line1'), address.get('city')])
Example #19
0
def get_company_address(args):
    from frappe.contacts.doctype.address.address import get_default_address

    address_name = None
    if args.get('company_address'):
        address_name = args.get('company_address')
    else:
        company = args.get('company') or get_default_company()
        if company:
            address_name = get_default_address('Company', company)

    return frappe.get_cached_doc('Address',
                                 address_name) if address_name else None
Example #20
0
def get_vat_code(customer):
    address = get_default_address('Customer', customer.name)
    if address:
        country = frappe.get_value('Address', address, 'country')
        if country not in {'United Kingdom', 'United States'
                           } and country in countries_in_europe:
            customer.default_currency = 'EUR' if not customer.default_currency else customer.default_currency
            return 'T4', customer.default_currency
        elif country == 'United Kingdom':
            return 'T1', 'GBP'
        elif country == 'United States':
            return 'T0', 'USD'
    if not customer.territory and not customer.vat_code_customer and not customer.default_currency:
        print('more information is required about ' + cust.name)
        return '', 'GBP'
    if customer.default_currency == 'USD':
        return 'T0', 'USD'
    elif customer.default_currency == 'EUR':
        return 'T4', 'EUR'
    elif customer.default_currency == 'GBP':
        return 'T1', 'GBP'
Example #21
0
def _create_invoice(customers, typ):
	customer_name = ""
	customer_address = ""
	item = ""
	rate = ""
	invoice_txt = ""
	invoices = []
	total_records = len(customers)
	created_records = 0
	
	if len(customers) > 0:
		for customer in customers:
			sales_invoice = frappe.new_doc("Sales Invoice")
			if typ == "Mitglied":
				customer_name = customer['name']
				customer_address = get_default_address(doctype="Customer", name=customer_name)
				if customer['status_mitgliedschaft'] == "Einzel":
					item = "Einzel-Mitglied Beitrag"
				if customer['status_mitgliedschaft'] == "Familie":
					item = "Familien-Mitglied Beitrag"
				if customer['status_mitgliedschaft'] == "Kollektiv":
					item = "Kollektiv-Mitglied Beitrag"
				sales_invoice.update({
					"customer": customer_name,
					"customer_address": customer_address,
					"shipping_address_name": customer_address,
					"delivery_date": utils.today(),
					"due_date": utils.add_days(utils.today(), 60),
					"items": [{
						"item_code": item,
						"qty": "1"
					}]
				})
				
			else:
				customer_name = customer['customer']
				customer_address = get_default_address(doctype="Customer", name=customer_name)
				item = "Soli-Beitrag"
				rate = customer['betrag']
				sales_invoice.update({
					"customer": customer_name,
					"customer_address": customer_address,
					"shipping_address_name": customer_address,
					"delivery_date": utils.today(),
					"due_date": utils.add_days(utils.today(), 60),
					"items": [{
						"item_code": item,
						"qty": "1",
						"rate": rate
					}]
				})
		
			sales_invoice.flags.ignore_mandatory = True
			sales_invoice.save(ignore_permissions=True)
			referencenumber = '2020' + sales_invoice.name.split("-")[2]
			sales_invoice.update({
				"esr_reference": esr.get_reference_number(referencenumber),
				"esr_code": esr.generateCodeline(sales_invoice.grand_total, referencenumber, "010154388")
			})
			sales_invoice.save(ignore_permissions=True)
			# only save as draft!
			#sales_invoice.submit()
			frappe.db.commit()
			invoices.append([sales_invoice.name, item, sales_invoice.grand_total])
			created_records += 1
			frappe.publish_realtime("invoice_progress", {"progress": str(int(created_records * 100/total_records))}, user=frappe.session.user)
			
		frappe.publish_realtime("invoices", {"invoices": invoices}, user=frappe.session.user)
	else:
		frappe.publish_realtime("invoices", {}, user=frappe.session.user)
Example #22
0
    def get_sales_data(self):
        filters = {}
        filters['company'] = self.company

        filters['to_date'] = self.end_date
        filters['from_date'] = self.start_date
        filters['account'] = 'UAE VAT 5% - SLI'

        gl_entries = get_gl_entries(filters)
        amount_data = {}
        vat_states = [
            'Abu Dhabi', 'Dubai', 'Sharjah', 'Ajman', 'Umm Al Quwain',
            'Ras Al Khaimah', 'Fujairah'
        ]

        vat_types = [
            'reverse_charge_data', 'zero_rated_data', 'other_gcc_data',
            'exempt_data', 'import_customs_data', 'amendments_data'
        ]
        totals_data = {'amount': 0, 'vat_amount': 0, 'adjustment': 0}

        for type in vat_types:
            amount_data[type] = {'amount': 0, 'vat_amount': 0, 'adjustment': 0}

        for state in vat_states:
            amount_data[state] = {
                'amount': 0,
                'vat_amount': 0,
                'adjustment': 0
            }

        for entry in gl_entries:

            if entry.voucher_type == "Sales Invoice":
                details = frappe.db.sql(
                    """select name,posting_date,currency,customer,grand_total, base_total_taxes_and_charges,customer_address from `tabSales Invoice` where name = %s and company = %s""",
                    (entry.voucher_no, self.company),
                    as_dict=1)
                if len(details) > 0:
                    billing_address_name = get_default_address(
                        'Customer', details[0].customer)
                    if billing_address_name:
                        billing_address = frappe.get_doc(
                            'Address', billing_address_name)
                        if billing_address:
                            for state in vat_states:
                                if state == billing_address.state:
                                    amount_data[state][
                                        'amount'] = amount_data[state][
                                            'amount'] + details[0].grand_total
                                    amount_data[state][
                                        'vat_amount'] = amount_data[state][
                                            'vat_amount'] + entry.credit

        data = []
        letter = 97

        for state in vat_states:
            data.append(
                ("1" + chr(letter), "Standard rated supplies in " + str(state),
                 amount_data[state]['amount'],
                 amount_data[state]['vat_amount'],
                 amount_data[state]['adjustment']))
            letter = letter + 1

        section = 2
        for type in vat_types:
            totals_data["vat_amount"] = amount_data[type][
                "vat_amount"] + totals_data["vat_amount"]
            totals_data[
                "amount"] = amount_data[type]["amount"] + totals_data["amount"]
            totals_data["adjustment"] = amount_data[type][
                "adjustment"] + totals_data["adjustment"]

            section_txt = ''

            if type == "reverse_charge_data":
                section_txt = "Supplies subject to the reverse charge provisions"

                filters['account'] = 'UAE VAT 5% - SLI'
                gl_entries = get_gl_entries(filters)
                for entry in gl_entries:
                    if entry.voucher_type == "Sales Invoice":
                        details = frappe.db.sql(
                            """select name,posting_date,currency,customer,grand_total, base_total_taxes_and_charges,customer_address from `tabSales Invoice` where name = %s and company = %s""",
                            (entry.voucher_no, self.company),
                            as_dict=1)
                        if len(details) > 0:
                            amount_data[type]['amount'] = amount_data[state][
                                'amount'] + details[0].grand_total
                            amount_data[type]['vat_amount'] = amount_data[
                                state]['vat_amount'] + entry.credit

            elif type == "zero_rated_data":
                section_txt = "Zero rated supplies"

                filters['account'] = 'UAE VAT 5% - SLI'
                gl_entries = get_gl_entries(filters)
                for entry in gl_entries:
                    if entry.voucher_type == "Sales Invoice":
                        details = frappe.db.sql(
                            """select name,posting_date,currency,customer,grand_total, base_total_taxes_and_charges,customer_address from `tabSales Invoice` where name = %s and company = %s""",
                            (entry.voucher_no, self.company),
                            as_dict=1)
                        if len(details) > 0:
                            amount_data[type]['amount'] = amount_data[state][
                                'amount'] + details[0].grand_total
                            amount_data[type]['vat_amount'] = amount_data[
                                state]['vat_amount'] + entry.credit

            elif type == "other_gcc_data":
                section_txt = "Supplies of goods and services to registered customers in other GCC implementing states"

                filters['account'] = 'UAE VAT 5% - SLI'
                gl_entries = get_gl_entries(filters)
                for entry in gl_entries:
                    if entry.voucher_type == "Sales Invoice":
                        details = frappe.db.sql(
                            """select name,posting_date,currency,customer,grand_total, base_total_taxes_and_charges,customer_address from `tabSales Invoice` where name = %s and company = %s""",
                            (entry.voucher_no, self.company),
                            as_dict=1)
                        if len(details) > 0:
                            amount_data[type]['amount'] = amount_data[state][
                                'amount'] + details[0].grand_total
                            amount_data[type]['vat_amount'] = amount_data[
                                state]['vat_amount'] + entry.credit

            elif type == "exempt_data":
                section_txt = "Exempt supplies"

                filters['account'] = 'UAE VAT 5% - SLI'
                gl_entries = get_gl_entries(filters)
                for entry in gl_entries:
                    if entry.voucher_type == "Sales Invoice":
                        details = frappe.db.sql(
                            """select name,posting_date,currency,customer,grand_total, base_total_taxes_and_charges,customer_address from `tabSales Invoice` where name = %s and company = %s""",
                            (entry.voucher_no, self.company),
                            as_dict=1)
                        if len(details) > 0:
                            amount_data[type]['amount'] = amount_data[state][
                                'amount'] + details[0].grand_total
                            amount_data[type]['vat_amount'] = amount_data[
                                state]['vat_amount'] + entry.credit

            elif type == "import_customs_data":
                section_txt = "Import VAT accounted through UAE customs"

                filters['account'] = 'UAE VAT 5% - SLI'
                gl_entries = get_gl_entries(filters)
                for entry in gl_entries:
                    if entry.voucher_type == "Sales Invoice":
                        details = frappe.db.sql(
                            """select name,posting_date,currency,customer,grand_total, base_total_taxes_and_charges,customer_address from `tabSales Invoice` where name = %s and company = %s""",
                            (entry.voucher_no, self.company),
                            as_dict=1)
                        if len(details) > 0:
                            amount_data[type]['amount'] = amount_data[state][
                                'amount'] + details[0].grand_total
                            amount_data[type]['vat_amount'] = amount_data[
                                state]['vat_amount'] + entry.credit

            elif type == "amendments_data":
                section_txt = "Amendments or corrections to Output figures"

                filters['account'] = 'UAE VAT 5% - SLI'
                gl_entries = get_gl_entries(filters)
                for entry in gl_entries:
                    if entry.voucher_type == "Sales Invoice":
                        details = frappe.db.sql(
                            """select name,posting_date,currency,customer,grand_total, base_total_taxes_and_charges,customer_address from `tabSales Invoice` where name = %s and company = %s""",
                            (entry.voucher_no, self.company),
                            as_dict=1)
                        if len(details) > 0:
                            amount_data[type]['amount'] = amount_data[state][
                                'amount'] + details[0].grand_total
                            amount_data[type]['vat_amount'] = amount_data[
                                state]['vat_amount'] + entry.credit

            data.append(
                (str(section), str(section_txt), amount_data[type]["amount"],
                 amount_data[type]["vat_amount"],
                 amount_data[type]["adjustment"]))

            section = section + 1

        data.append((str(section), "Totals", totals_data["amount"],
                     totals_data["vat_amount"], totals_data["adjustment"]))

        return data, totals_data
def send_eirsaliye(delivery_note_name):
    import urllib3

    strResult = ""

    urllib3.disable_warnings()  #Remove TLS warning

    doc = frappe.get_doc("Delivery Note", delivery_note_name)

    if not doc.eirsaliye_uuid:
        doc.eirsaliye_uuid = str(uuid.uuid1())
        doc.db_update()
        frappe.db.commit()
        doc.reload()
    if doc.yerelbelgeoid:
        data = validate_eirsaliye(delivery_note_name)
        if data.get("belgeNo"):
            return data

    #Validate the DN fields.
    validate_delivery_note(doc)

    if doc.belgeno:  #If belgeno field is not empty
        dctResponse = validate_eirsaliye(doc.name)
        if dctResponse.get(
                'durum'
        ) != 2:  #If durum is not xml error return it back so we should send the DN only if we hasn't sent it or if we had an XML error before.
            return

    eirsaliye_settings = frappe.get_all("E Irsaliye Ayarlar",
                                        filters={"company": doc.company})[0]
    settings_doc = frappe.get_doc("E Irsaliye Ayarlar", eirsaliye_settings)
    validate_settings_doc(settings_doc)

    set_warehouse_address_doc = frappe.get_doc(
        "Address", get_default_address("Warehouse", doc.set_warehouse))
    set_warehouse_address_doc = set_missing_address_values(
        set_warehouse_address_doc)
    validate_address(set_warehouse_address_doc)

    customer_doc = frappe.get_doc("Customer", doc.customer)
    validate_customer(customer_doc)
    customer_address_doc = frappe.get_doc("Address", doc.shipping_address_name)
    customer_address_doc = set_missing_address_values(customer_address_doc)
    validate_address(customer_address_doc)

    doc = set_driver_name(doc)
    doc.posting_time = format_datetime(str(doc.posting_time), "HH:mm:ss")

    user = {}
    user["full_name"] = frappe.get_value("User", frappe.session.user,
                                         "full_name")

    for item in doc.items:
        eirsaliye_birimi_list = frappe.get_list(
            "TD EIrsaliye Birim Eslestirme",
            filters={
                "parent": settings_doc.name,
                "td_birim": item.uom,
            },
            fields=["td_eirsaliye_birimi"])
        if len(eirsaliye_birimi_list) == 0:
            frappe.throw(
                _("Please set {0} uom in e-Receipt settings for company {1}.").
                format(item.uom, eirsaliye_settings))
        td_eirsaliye_birimi = eirsaliye_birimi_list[0]["td_eirsaliye_birimi"]
        item.td_eirsaliye_birimi = td_eirsaliye_birimi

    data_context = {
        "delivery_note_doc": doc,
        "settings_doc": settings_doc,
        "set_warehouse_address_doc": set_warehouse_address_doc,
        "customer_doc": customer_doc,
        "customer_address_doc": customer_address_doc,
        "user": user,
    }

    outputText = render_template(
        data_context, file=settings_doc.xml_data
    )  # this is where to put args to the template renderer
    settings_doc.veri = to_base64(outputText)
    settings_doc.belgeHash = get_hash_md5(outputText)

    endpoint = settings_doc.test_eirsaliye_url if settings_doc.test_modu else settings_doc.eirsaliye_url
    settings_doc.password_uncoded = settings_doc.get_password('password')

    body_context = {
        "delivery_note_doc": doc,
        "settings_doc": settings_doc,
    }

    body = render_template(body_context, file=settings_doc.xml_body)
    body = body.encode('utf-8')
    session = requests.session()
    session.headers = {"Content-Type": "text/xml; charset=utf-8"}
    session.headers.update({"Content-Length": str(len(body))})
    response = session.post(url=endpoint, data=body, verify=False)
    xml = response.content
    #frappe.msgprint(xml)
    #print("XML CONTENT IS")
    #print(xml)
    add_comment(doc.doctype, doc.name, str(xml), doc.modified_by)
    soup = BeautifulSoup(xml, 'xml')
    error = soup.find_all('Fault')
    belgeOid = soup.find_all('belgeOid')

    if error:
        faultcode = soup.find('faultcode').getText()
        faultstring = soup.find('faultstring').getText()
        #frappe.msgprint(str(faultcode) + " " + str(faultstring))

        #strResult = str(faultcode) + " " + str(faultstring)
        dctResult = {
            'result':
            False,
            'description':
            _("Error Code:{0}. Error Description:{1}").format(
                faultcode, faultstring)
        }

    if belgeOid:
        msg = soup.find('belgeOid').getText()
        doc.yerelbelgeoid = msg
        doc.db_update()
        frappe.db.commit()
        doc.reload()
        #frappe.msgprint(str(msg))

        #strResult = str(msg)
        dctResult = {'result': True, 'description': msg}

    return dctResult  #strResult
Example #24
0
def get_primary_billing_address(party, party_type):
    from frappe.contacts.doctype.address.address import get_default_address
    return get_default_address(party_type.lower(), party)