def HasilPemilihan(self): livetime = int(time.time()) get_time_data = GetTimeDataTask.delay() time_data = get_time_data.get() if livetime > time_data[1] and livetime > time_data[3]: try: get_pemenang_data = KandidatTerpilihTask.delay() pemenang_data = get_pemenang_data.get() if pemenang_data == "Gagal": raise SolidityError except SolidityError: return "Abort" else: kandidat_terpilih = KandidatDoc.objects( nomor_urut=pemenang_data).first() pemenang = { "nomor_urut": kandidat_terpilih.nomor_urut, "nama": kandidat_terpilih.nama, "visi": kandidat_terpilih.visi, "misi": kandidat_terpilih.misi, "image_url": kandidat_terpilih.image_url, } message_object = { "status": "Berhasil", "message": "Data kandidat Pemenang", "data": pemenang } return message_object elif livetime < time_data[3]: message_object = { "status": "Gagal", "message": "Waktu pemilihan belum berakhir", } return message_object
def GetAllKandidatData(self): try: list_data_kandidat = [] kandidat_data = KandidatDoc.objects().all() for kandidat in kandidat_data: list_data_kandidat.append({ "id": kandidat._id, "nomor_urut": kandidat.nomor_urut, "nama": kandidat.nama, "tanggal_lahir": kandidat.tgl_lahir, }) return list_data_kandidat except Exception: return "Abort"
def GetAdminDashboard(self): total_pemilih = PemilihDoc.objects().all().count() total_kandidat = KandidatDoc.objects().all().count() w3 = es.SetupW3() system_balance = w3.fromWei(w3.eth.get_balance(w3.eth.defaultAccount), 'ether') message_object = { "status": "Berhasil", "data": { "total_pemilih": total_pemilih, "total_kandidat": total_kandidat, "ethereum_balance": system_balance } } return message_object
def GetAllKandidatData(self): try: list_data_kandidat = [] kandidat_data = KandidatDoc.objects().all() for kandidat in kandidat_data: list_data_kandidat.append({ "nomor_urut": kandidat.nomor_urut, "nama": kandidat.nama, "visi": kandidat.visi, "misi": kandidat.misi, "image_url": kandidat.image_url, }) return list_data_kandidat except Exception: return "Abort"
def GetSingleKandidatData(self, kandidatId): data = KandidatDoc.objects(_id=str(kandidatId)).first() if data is not None: kandidat_data = { "kandidat_id": data._id, "nomor_urut": data.nomor_urut, "nama_kandidat": data.nama, "tanggal_lahir": data.tgl_lahir, "visi": data.visi, "misi": data.misi, "contact": data.contact, "alamat": data.alamat, "image_url": data.image_url, } return kandidat_data else: return "Abort"
def QuickCount(self): try: list_kandidat = [] get_total_kandidat = GetKandidatTotalDataTask.delay() total_kandidat = get_total_kandidat.get() for data in range(int(total_kandidat)): get_kandidat_data = GetKandidatData.delay(data) kandidat_data = get_kandidat_data.get() kandidat_from_db = KandidatDoc.objects( nomor_urut=kandidat_data[0]).first() list_kandidat.append({ "nama_kandidat": kandidat_from_db.nama, "total_suara": int(kandidat_data[1]), }) return list_kandidat except Exception: return "Abort"
def GetKandidatTerpilih(self, user_data): pemilih_data = PemilihDoc.objects(username=user_data).first() pemilih_address = pemilih_data.ethereum["ethereum_address"] data_from_contract = GetPemilihDataTask.delay(pemilih_address) kandidat_terpilih_data = data_from_contract.get() if kandidat_terpilih_data[1] == 0: tx_hash = PemilihTxDoc.objects(user_data=pemilih_data).first() message_object = { "status": "Gagal", "message": "Bukti pemilihan anda masih dalam proses", "ethereum_address": pemilih_address, "tx_hash": "https://ropsten.etherscan.io/tx/{}".format( str(tx_hash.tx_hash)) } return message_object else: kandidat_dipilih = KandidatDoc.objects( nomor_urut=kandidat_terpilih_data[1]).first() tx_hash = PemilihTxDoc.objects(user_data=pemilih_data).first() kandidat = { "nomor_urut": kandidat_dipilih.nomor_urut, "nama": kandidat_dipilih.nama, "visi": kandidat_dipilih.visi, "misi": kandidat_dipilih.misi, "image_url": kandidat_dipilih.image_url, } message_object = { "status": "Berhasil", "message": "Bukti Pemilihan", "ethereum_address": pemilih_address, "tx_hash": "https://ropsten.etherscan.io/tx/{}".format( str(tx_hash.tx_hash)), "data": kandidat } return message_object
def RegisterKandidat(self, json_data, admin_data): w3 = es.SetupW3() admin_address, admin_access = self.GetAdminEthereumData(admin_data) chechk_kandidat_data = KandidatDoc.objects( _id=str(json_data["kandidat_id"])).first() if chechk_kandidat_data is None: try: nonce = w3.eth.getTransactionCount(admin_address) kandidat_bytesName = (self.ConvertKandidatNameToBytes( json_data["nama_kandidat"])) msg = w3.soliditySha3( ["uint256", "bytes32", "uint256"], [ int(json_data["nomor_urut"]), kandidat_bytesName, nonce, ], ) message = encode_defunct(primitive=msg) sign_message = w3.eth.account.sign_message( message, admin_access) result = RegisterKandidatTask.delay( int(json_data["nomor_urut"]), kandidat_bytesName, nonce, sign_message.signature.hex(), ) if result.get() == "Gagal": raise SolidityError except SolidityError: message_object = { "status": "Error", "message": "Terjadi kesalahan pada server", } return message_object else: save_new_kandidat = KandidatDoc( _id=json_data["kandidat_id"], nomor_urut=json_data["nomor_urut"], nama=json_data["nama_kandidat"], nama_bytes=kandidat_bytesName, tgl_lahir=json_data["tanggal_lahir"], visi=json_data["visi"], misi=json_data["misi"], contact=json_data["contact"], alamat=json_data["alamat"], image_url=json_data["image_url"], ) save_new_kandidat.save() self.SaveAdminTx( admin_data, result.get(), 'Pendaftaran Kandiadt', sign_message.signature.hex(), ) message_object = { "status": "Berhasil", "message": "Kandidat berhasil ditambahkan kedalam sistem", } return message_object else: message_object = { "status": "Gagal", "message": "Kandidat telah terdaftar di dalam sistem", } return message_object