Esempio n. 1
0
 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)
Esempio n. 2
0
 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"}
Esempio n. 3
0
    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}
Esempio n. 5
0
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"})
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
0
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()
Esempio n. 10
0
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"}
Esempio n. 11
0
    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
        })
Esempio n. 12
0
    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