fix(einvoice): QRCode generation (#24412)

This commit is contained in:
Kaviya Periyasamy 2021-01-24 10:59:37 +05:30 committed by GitHub
parent 13df7a0ca6
commit c680547be3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 17 deletions

View File

@ -18,6 +18,9 @@ erpnext.setup_einvoice_actions = (doctype) => {
if (!irn && !__unsaved) { if (!irn && !__unsaved) {
const action = () => { const action = () => {
if (frm.doc.__unsaved) {
frappe.throw(__('Please save the document to generate IRN.'));
}
frappe.call({ frappe.call({
method: 'erpnext.regional.india.e_invoice.utils.get_einvoice', method: 'erpnext.regional.india.e_invoice.utils.get_einvoice',
args: { doctype, docname: name }, args: { doctype, docname: name },

View File

@ -11,6 +11,7 @@ import json
import base64 import base64
import frappe import frappe
import traceback import traceback
import io
from frappe import _, bold from frappe import _, bold
from pyqrcode import create as qrcreate from pyqrcode import create as qrcreate
from frappe.integrations.utils import make_post_request, make_get_request from frappe.integrations.utils import make_post_request, make_get_request
@ -436,7 +437,7 @@ class GSPConnector():
self.irn_details_url = self.base_url + '/enriched/ei/api/invoice/irn' self.irn_details_url = self.base_url + '/enriched/ei/api/invoice/irn'
self.generate_irn_url = self.base_url + '/enriched/ei/api/invoice' self.generate_irn_url = self.base_url + '/enriched/ei/api/invoice'
self.gstin_details_url = self.base_url + '/enriched/ei/api/master/gstin' self.gstin_details_url = self.base_url + '/enriched/ei/api/master/gstin'
self.cancel_ewaybill_url = self.base_url + '/enriched/ei/api/ewayapi' self.cancel_ewaybill_url = self.base_url + '/enriched/ewb/ewayapi?action=CANEWB'
self.generate_ewaybill_url = self.base_url + '/enriched/ei/api/ewaybill' self.generate_ewaybill_url = self.base_url + '/enriched/ei/api/ewaybill'
def get_credentials(self): def get_credentials(self):
@ -527,7 +528,7 @@ class GSPConnector():
except Exception: except Exception:
self.log_error() self.log_error()
self.raise_error(True) self.raise_error(True)
@staticmethod @staticmethod
def get_gstin_details(gstin): def get_gstin_details(gstin):
'''fetch and cache GSTIN details''' '''fetch and cache GSTIN details'''
@ -622,7 +623,7 @@ class GSPConnector():
except Exception: except Exception:
self.log_error(data) self.log_error(data)
self.raise_error(True) self.raise_error(True)
def generate_eway_bill(self, **kwargs): def generate_eway_bill(self, **kwargs):
args = frappe._dict(kwargs) args = frappe._dict(kwargs)
@ -671,7 +672,8 @@ class GSPConnector():
'cancelRsnCode': reason, 'cancelRsnCode': reason,
'cancelRmrk': remark 'cancelRmrk': remark
}, indent=4) }, indent=4)
headers["username"] = headers["user_name"]
del headers["user_name"]
try: try:
res = self.make_request('post', self.cancel_ewaybill_url, headers, data) res = self.make_request('post', self.cancel_ewaybill_url, headers, data)
if res.get('success'): if res.get('success'):
@ -769,21 +771,21 @@ class GSPConnector():
qrcode = self.invoice.signed_qr_code qrcode = self.invoice.signed_qr_code
doctype = self.invoice.doctype doctype = self.invoice.doctype
docname = self.invoice.name docname = self.invoice.name
filename = 'QRCode_{}.png'.format(docname).replace(os.path.sep, "__")
_file = frappe.new_doc('File') qr_image = io.BytesIO()
_file.update({
'file_name': 'QRCode_{}.png'.format(docname.replace('/', '-')),
'attached_to_doctype': doctype,
'attached_to_name': docname,
'content': str(base64.b64encode(os.urandom(64))),
'is_private': 1
})
_file.insert()
frappe.db.commit()
url = qrcreate(qrcode, error='L') url = qrcreate(qrcode, error='L')
abs_file_path = os.path.abspath(_file.get_full_path()) url.png(qr_image, scale=2, quiet_zone=1)
url.png(abs_file_path, scale=2, quiet_zone=1) _file = frappe.get_doc({
"doctype": "File",
"file_name": filename,
"attached_to_doctype": doctype,
"attached_to_name": docname,
"attached_to_field": "qrcode_image",
"is_private": 1,
"content": qr_image.getvalue()})
_file.save()
frappe.db.commit()
self.invoice.qrcode_image = _file.file_url self.invoice.qrcode_image = _file.file_url
def update_invoice(self): def update_invoice(self):