示例#1
0
 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
示例#4
0
 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"
示例#6
0
 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"
示例#7
0
 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