Esempio n. 1
0
def get_item_list(invoice):
	item_list = []

	for d in invoice.items:
		einvoice_item_schema = read_json('einv_item_template')
		item = frappe._dict({})
		item.update(d.as_dict())

		item.sr_no = d.idx
		item.description = sanitize_for_json(d.item_name)

		item.qty = abs(item.qty)
		item.discount_amount = 0
		item.unit_rate = abs(item.base_net_amount / item.qty)
		item.gross_amount = abs(item.base_net_amount)
		item.taxable_value = abs(item.base_net_amount)

		item.batch_expiry_date = frappe.db.get_value('Batch', d.batch_no, 'expiry_date') if d.batch_no else None
		item.batch_expiry_date = format_date(item.batch_expiry_date, 'dd/mm/yyyy') if item.batch_expiry_date else None
		item.is_service_item = 'N' if frappe.db.get_value('Item', d.item_code, 'is_stock_item') else 'Y'
		item.serial_no = ""

		item = update_item_taxes(invoice, item)

		item.total_value = abs(
			item.taxable_value + item.igst_amount + item.sgst_amount +
			item.cgst_amount + item.cess_amount + item.cess_nadv_amount + item.other_charges
		)
		einv_item = einvoice_item_schema.format(item=item)
		item_list.append(einv_item)

	return ', '.join(item_list)
Esempio n. 2
0
def get_return_doc_reference(invoice):
	if not invoice.return_against:
		frappe.throw(_('For generating IRN, reference to the original invoice is mandatory for a credit note. Please set {} field to generate e-invoice.')
			.format(frappe.bold('Return Against')), title=_('Missing Field'))

	invoice_date = frappe.db.get_value('Sales Invoice', invoice.return_against, 'posting_date')
	return frappe._dict(dict(
		invoice_name=invoice.return_against, invoice_date=format_date(invoice_date, 'dd/mm/yyyy')
	))
Esempio n. 3
0
def get_doc_details(invoice):
    invoice_type = 'CRN' if invoice.is_return else 'INV'

    invoice_name = invoice.name
    invoice_date = format_date(invoice.posting_date, 'dd/mm/yyyy')

    return frappe._dict(
        dict(invoice_type=invoice_type,
             invoice_name=invoice_name,
             invoice_date=invoice_date))
Esempio n. 4
0
def get_doc_details(invoice):
	if getdate(invoice.posting_date) < getdate('2021-01-01'):
		frappe.throw(_('IRN generation is not allowed for invoices dated before 1st Jan 2021'), title=_('Not Allowed'))

	invoice_type = 'CRN' if invoice.is_return else 'INV'

	invoice_name = invoice.name
	invoice_date = format_date(invoice.posting_date, 'dd/mm/yyyy')

	return frappe._dict(dict(
		invoice_type=invoice_type,
		invoice_name=invoice_name,
		invoice_date=invoice_date
	))
Esempio n. 5
0
def get_eway_bill_details(invoice):
	if invoice.is_return:
		frappe.throw(_('E-Way Bill cannot be generated for Credit Notes & Debit Notes'), title=_('E Invoice Validation Failed'))

	mode_of_transport = { '': '', 'Road': '1', 'Air': '2', 'Rail': '3', 'Ship': '4' }
	vehicle_type = { 'Regular': 'R', 'Over Dimensional Cargo (ODC)': 'O' }

	return frappe._dict(dict(
		gstin=invoice.gst_transporter_id,
		name=invoice.transporter_name,
		mode_of_transport=mode_of_transport[invoice.mode_of_transport],
		distance=invoice.distance or 0,
		document_name=invoice.lr_no,
		document_date=format_date(invoice.lr_date, 'dd/mm/yyyy'),
		vehicle_no=invoice.vehicle_no,
		vehicle_type=vehicle_type[invoice.gst_vehicle_type]
	))
Esempio n. 6
0
def get_return_doc_reference(invoice):
    invoice_date = frappe.db.get_value('Sales Invoice', invoice.return_against,
                                       'posting_date')
    return frappe._dict(
        dict(invoice_name=invoice.return_against,
             invoice_date=format_date(invoice_date, 'dd/mm/yyyy')))