def post(self, request, *arg, **kwargs): pk = self.kwargs.get('pk') instance = None profile = None coop_admin = None errors = dict() if pk: instance = User.objects.filter(pk=pk) if instance.exists(): instance = instance[0] profile = instance.profile if hasattr(instance, 'cooperative_admin'): coop_admin = instance.cooperative_admin user_form = UserForm(request.POST, instance=instance) profile_form = UserProfileForm(request.POST, instance=profile) if user_form.is_valid() and profile_form.is_valid(): try: with transaction.atomic(): if not errors: user = user_form.save(commit=False); if not instance: user.set_password(user.password) user.save() profile_form = UserProfileForm(request.POST, instance=user.profile) profile_form.save() return redirect('profile:user_list') except Exception as e: log_error() errors['errors'] = "Error %s" % e data = {'user_form': user_form, 'profile_form': profile_form, 'coop_form': coop_form} data.update(errors) return render(request, self.template_name, data)
def mobile_money_transation(self): try: transaction_reference = generate_alpanumeric('WC', 12) phone_number = self.phone_number amount = self.amount status = 'PENDING' request = '' mm_request = MobileMoneyRequest.objects.create( transaction_reference = transaction_reference, phone_number = phone_number, amount = amount, status = status, request = request ) reference = mm_request.transaction_reference res = payment_transction(phone_number, amount, reference) status = res['status'] if res['status'] == 'ERROR': status = 'FAILED' if res['status'] == 'OK': status = res['transactionStatus'] mm_request.status = status mm_request.response = res mm_request.response_date = datetime.datetime.now() mm_request.save() return {"status": mm_request.status} except Exception as e: log_error() return {"status": "FAILED"}
def post(self, request, *args, **kwargs): data = dict() form = LoginForm(request.POST) cooperative = False try: if form.is_valid(): # set_login_attempt(request) username = form.cleaned_data.get('username', '') password = form.cleaned_data.get('password', '') user = authenticate(username=username, password=password) if user: if user.is_active: login(request, user) return redirect('dashboard') else: data['errors'] = "Your account is inactive" else: data['errors'] = "Username or Password invalid" except Exception as e: data['errors'] = "Login Error. Contact Admin" print(e) log_error() return render(request, self.template_name, { 'form': form, 'errors': data, 'active': ['staff_login', 'setting'] })
def sendRequest(self, params): try: log_debug('Message Sent: %s' % params) url = self.getApiHost() r = requests.get(url, params=params) log_debug('Message Response: %s' % r.text) return json.loads(r.text) except Exception as e: log_error() return {"status": "failed", "response": "Error Message: %s" % e}
def get_item_price(request, pk): try: pp = Item.objects.get(pk=pk) return JsonResponse({ "id": pp.id, "name": pp.name, "price": pp.price }, safe=False) except Exception as e: log_error() return JsonResponse({"price": "error"})
def post(self, request, *args, **kwargs): initial = {'request': self.request} form = SupplyOrderForm(request.POST, request=request) data = dict() error = dict() log_debug('GGGG') try: if form.is_valid(): with transaction.atomic(): x = datetime.datetime.now() order_count = SupplyOrder.objects.all().count() cnt = "%04d" % order_count y = x.strftime("%y") m = x.strftime("%m") order_number = "%s/%s%s" % (cnt, m, y) order = form.save(commit=False) order.created_by = request.user order.order_reference = genetate_uuid4() order.order_number = order_number if not request.user.is_superuser: if request.user.profile.access_level.name == "SUPPLIER": order.supplier = request.user.supplier_user.supplier order.save() data = request.POST item_id = data.getlist('item_id') unit_price = data.getlist('unit_price') quantity = data.getlist('item_quantity') total_price = data.getlist('total_price') for i in range(len(item_id)): OrderItem.objects.create(order=order, item=get_object_or_404( Item, pk=item_id[i]), quantity=quantity[i], unit_price=unit_price[i], price=total_price[i], created_by=request.user) return redirect('order:list') except Exception as e: log_error() error['errors'] = "Error %s" % e data = { 'form': form, 'item_form': OrderItemForm, 'active': ['_order', '__order'] } data.update(error) return render(request, self.template_name, data)
def post(self, request, *args, **kwargs): form = CustomerOrderForm(request.POST) data = dict() error = dict() log_debug('GGGG') try: if form.is_valid(): with transaction.atomic(): x = datetime.datetime.now() order_count = CustomerOrder.objects.all().count() cnt = "%04d" % order_count y = x.strftime("%y") m = x.strftime("%m") order_number = "%s/%s%s" % (cnt, m, y) order = form.save(commit=False) order.created_by = request.user order.order_reference = genetate_uuid4() order.order_number = order_number order.order_date = x order.save() data = request.POST item_id = data.getlist('item_id') unit_price = data.getlist('unit_price') quantity = data.getlist('item_quantity') total_price = data.getlist('total_price') for i in range(len(item_id)): CustomerOrderItem.objects.create( order=order, item=get_object_or_404(AgroDealerItem, pk=item_id[i]), quantity=quantity[i], unit_price=unit_price[i], price=total_price[i], created_by=request.user, order_date=x) return redirect('order:order_list') except Exception as e: log_error() error['errors'] = "Error %s" % e data = { 'form': form, 'item_form': OrderItemForm, 'active': ['_order', '_agrodealer_order'] } data.update(error) return render(request, self.template_name, data)
def post(self, request, *arg, **kwargs): pk = self.kwargs.get('pk') agrodealer = self.kwargs.get('agrodealer') instance = None errors = dict() if pk: instance = User.objects.filter(pk=pk) if instance.exists(): instance = instance[0] profile = instance.profile if hasattr(instance, 'cooperative_admin'): coop_admin = instance.cooperative_admin user_form = UserForm(request.POST, instance=instance) profile_form = UserProfileForm(request.POST, instance=instance) if user_form.is_valid() and profile_form.is_valid(): try: with transaction.atomic(): if not errors: user = user_form.save(commit=False) if not instance: user.set_password(user.password) user.save() profile_form = UserProfileForm(request.POST, instance=user.profile) profile_form.save(commit=False) profile_form.access_level = get_object_or_404( AccessLevel, name='AGRODEALER') profile_form.save() inst_s = AgroDealer.objects.get(pk=agrodealer) AgroDealerUser.objects.create( agrodealer=inst_s, user=user, ) return redirect('agrodealer:agrodealer_user', agrodealer=agrodealer) except Exception as e: log_error() errors['errors'] = "Error %s" % e data = { 'user_form': user_form, 'profile_form': profile_form, 'active': ['_agrodealer'] } data.update(errors) return render(request, self.template_name, data)
def depr__sendSMS(msisdn, message, **kwargs): try: res = None account = kwargs.get('account', '') outgoing = OutgoingMessages() outgoing.msisdn = msisdn outgoing.message = message outgoing.account = account if account else None try: sm = MessagingTransaction('BkKda32wkdqUeMWUBYPY') res = sm.sendOneSMS(msisdn, message) log_debug("Sent Message... %s" % res) except Exception: log_debug("Sending Failed... %s" % traceback.format_exc()) outgoing.status = 'FAILED' outgoing.response = res outgoing.save() except Exception as e: #Die silently log_error()
def payment_transction(msisdn, amount, reference): # if True: # return {"status": "FAILED", "statusMessage": "Test Complete"} msisdn = msisdn timestamp = datetime.now().strftime('%Y%m%d%H%M%S') password = '******' accountid = 'andrew' token = base64.urlsafe_b64encode(accountid + password + timestamp) http_auth = base64.urlsafe_b64encode('andrew:hamwe') url = 'https://payments.hamwepay.com/endpoint/service/transaction/' try: data = { "reference": reference, "method": "COLLECTION", "amount": "%s" % amount, "timestamp": timestamp, "token": token, "phonenumber": msisdn, "accountid": accountid } log_debug("Sending Airtime: %s" % data) headers = { 'content-type': 'application/json', 'Authorization': 'Basic %s' % http_auth } req = requests.post(url, data=json.dumps(data), headers=headers) jr = json.loads(req.text) if 'transactionStatus' in jr: if jr['transactionStatus'] == 'SUCCESSFUL': log_debug(jr) log_debug("Response From Server %s" % req.text) return jr except Exception as err: log_error() return {"status": "ERROR", "statusMessage": "Server Error"}
def post(self, request, *args, **kwargs): form = UploadLocation(request.POST, request.FILES) if form.is_valid(): f = request.FILES['uploadfile'] path = f.temporary_file_path() index = int(form.cleaned_data['sheet']) - 1 startrow = int(form.cleaned_data['row']) - 1 district_col = int(form.cleaned_data['district_col']) county_col = int(form.cleaned_data['county_col']) sub_county_col = int(form.cleaned_data['sub_county_col']) parish_col = int(form.cleaned_data['parish_col']) clear_data = form.cleaned_data['clear_data'] book = xlrd.open_workbook(filename=path, logfile='/tmp/xls.log') sheet = book.sheet_by_index(index) rownum = 0 data = dict() locations = [] for i in range(startrow, sheet.nrows): try: row = sheet.row(i) rownum = i + 1 district = smart_str(row[district_col].value).strip() if not re.search('^[A-Z\s\(\)\-\.]+$', district, re.IGNORECASE): if (i + 1) == sheet.nrows: break data['errors'] = '"%s" is not a valid District (row %d)' % \ (district, i+1) return render(request, self.template_name, { 'active': 'system', 'form': form, 'error': data }) county = smart_str(row[county_col].value).strip() if not re.search('^[A-Z\s\(\)\-\.]+$', county, re.IGNORECASE): data['errors'] = '"%s" is not a valid County (row %d)' % \ (county, i+1) return render(request, self.template_name, { 'active': 'system', 'form': form, 'error': data }) sub_county = smart_str(row[sub_county_col].value).strip() if not re.search('^[A-Z\s\(\)\-\.]+$', sub_county, re.IGNORECASE): data['errors'] = '"%s" is not a valid Sub County (row %d)' % \ (sub_county, i+1) return render(request, self.template_name, { 'active': 'system', 'form': form, 'error': data }) parish = smart_str(row[parish_col].value).strip() if not re.search('^[A-Z\s\(\)\-\.]+$', parish, re.IGNORECASE): data['errors'] = '"%s" is not a valid Parish (row %d)' % \ (parish, i+1) return render(request, self.template_name, { 'active': 'system', 'form': form, 'error': data }) q = { 'district': district, 'county': county, 'sub_county': sub_county, 'parish': parish } locations.append(q) except Exception as err: log_error() return render(request, self.template_name, { 'active': 'setting', 'form': form, 'error': err }) try: with transaction.atomic(): if clear_data: District.objects.all().delete() County.objects.all().delete() SubCounty.objects.all().delete() dcount = 0 ccount = 0 sccount = 0 pcount = 0 for d in locations: district = d['district'].title() county = d['county'].title() sub_county = d['sub_county'].title() parish = d['parish'].title() di = None ci = None dq = District.objects.filter(name__iexact=district) if dq.exists(): di = dq[0] else: di = District(name=district) di.save() dcount += 1 cq = County.objects.filter(district=di, name__iexact=county) if not cq.exists(): ci = County(district=di, name=county) ci.save() ccount += 1 else: ci = cq[0] scq = SubCounty.objects.filter(county=ci, name__iexact=sub_county) if not scq.exists(): sci = SubCounty(county=ci, name=sub_county) sci.save() sccount += 1 else: sci = scq[0] parishq = Parish.objects.filter(sub_county=sci, name__iexact=parish) if not parishq.exists(): p = Parish(sub_county=sci, name=parish) p.save() pcount += 1 # messages.success(self.request, "%s District added, %s County's added, %s Sub-County's added" % (dcount, ccount, sccount)) return redirect('conf:district_list') except Exception as e: log_error() return render(request, self.template_name, { 'active': 'settings', 'form': form })
def download_csv(self, *args, **kwargs): _value = [] columns = [] msisdn = self.request.GET.get('phone_number') name = self.request.GET.get('name') coop = self.request.GET.get('cooperative') role = self.request.GET.get('role') district = self.request.GET.get('district') profile_choices = ['id', 'cooperative__name', 'member_id', 'surname', 'first_name', 'other_name', 'date_of_birth', 'id_number', 'gender', 'is_refugee', 'maritual_status', 'phone_number', 'email', 'district__name', 'sub_county__name', 'village', 'address', 'gps_coodinates', 'coop_role', 'shares', 'collection_amount', 'collection_quantity', 'paid_amount', 'create_by__first_name', 'create_by__last_name', 'create_date'] columns += [self.replaceMultiple(c, ['_', '__name'], ' ').title() for c in profile_choices] # Gather the Information Found # Create the HttpResponse object with Excel header.This tells browsers that # the document is a Excel file. response = HttpResponse(content_type='text/csv') # The response also has additional Content-Disposition header, which contains # the name of the Excel file. response['Content-Disposition'] = 'attachment; filename=CooperativeMembers_%s.csv' % datetime.now().strftime( '%Y%m%d%H%M%S') # Create object for the Workbook which is under xlwt library. # workbook = xlwt.Workbook() writer = csv.writer(response) # By using Workbook object, add the sheet with the name of your choice. # worksheet = workbook.add_sheet("Members") row_num = 0 # style_string = "font: bold on; borders: bottom dashed" # style = xlwt.easyxf(style_string) # for col_num in range(len(columns)): # # For each cell in your Excel Sheet, call write function by passing row number, # # column number and cell data. # writer.writerow(row_num, col_num, columns[col_num], style=style) writer.writerow(columns) un = self.request.GET.get('union') unions = Union.objects.all() if un: unions = Union.objects.filter(pk=un) _members = list() cooperative = 'all' for u in unions: queryset = CooperativeMember.objects.values(*profile_choices).using(u.name.lower()).all() if msisdn: queryset = queryset.filter(phone_number='%s' % msisdn) if name: queryset = queryset.filter(Q(surname__icontains=name) | Q(first_name__icontains=name) | Q(other_name=name)) if coop: queryset = queryset.filter(cooperative__id=coop) if role: queryset = queryset.filter(coop_role=role) if district: queryset = queryset.filter(district__id=district) if queryset: _members.extend(queryset) for m in _members: row_num += 1 row_ = [] for x in profile_choices: try: if m.get('%s' % x): if 'date_of_birth' in x: # row_.append(datetime.strpdate(str(m.get('%s' % x)), '%Y-%m-%d')) row_.append(str(m.get('%s' % x))) elif 'create_date' in x: # row_.append(datetime.strptime(str(m.get('%s' % x))[:19], '%Y-%m-%d %H:%M:%S')) row_.append(str(m.get('%s' % x))[:19]) elif 'union' in x: row_.append(u.name) else: row_.append('%s' % str(m.get('%s' % x)).decode('ascii', 'ignore')) # row_.append(m.get('%s' % x).decode('ascii', 'ignore')) else: row_.append("") except Exception as e: log_error() row_.append("-") writer.writerow(row_) return response