Example #1
0
def list(request):
    customer_list = Customer.objects.all()
    customer_filter = CustomerFilter(request.GET, queryset=customer_list)

    can_index = funcs.has_perm_or_is_owner(request.user, 'customer.index_customer')
    if not can_index:
        messages.error(request, 'No access to see list of customers')
        return redirect('errorpage')

    page = request.GET.get('page', 1)

    paginator = Paginator(customer_filter.qs, 50)
    try:
        customer_page = paginator.page(page)
    except PageNotAnInteger:
        customer_page = paginator.page(1)
    except EmptyPage:
        customer_page = paginator.page(paginator.num_pages)

    context = {
        'filter': customer_filter,
        'customers': customer_page,
        'title': 'مشتریان',
    }
    return render(request, 'customer/index.html', context)
Example #2
0
def pricedb_index(request):
    can_index = funcs.has_perm_or_is_owner(request.user,
                                           'pricedb.index_pricedb')
    if not can_index:
        messages.error(request, 'عدم دسترسی کافی!')
        return redirect('errorpage')

    price_set = PriceDb.objects.all()
    return render(request, 'pricedb/index.html', {'price_set': price_set})
Example #3
0
def pricedb_edit(request, pricedb_pk):

    can_index = funcs.has_perm_or_is_owner(request.user,
                                           'pricedb.edit_pricedb')
    if not can_index:
        messages.error(request, 'عدم دسترسی کافی!')
        return redirect('errorpage')
    price_set = PriceDb.objects.get(pk=pricedb_pk)
    pass
Example #4
0
def fund_details(request, fund_pk):
    fund = Fund.objects.get(pk=fund_pk)
    can_read = funcs.has_perm_or_is_owner(request.user, 'view_fund', fund)
    if not can_read:
        messages.error(request, 'عدم دسترسی کافی')
        return redirect('errorpage')
    expenses = fund.expense_set.all()
    sum = 0
    for e in expenses:
        sum += e.amount
    context = {'fund': fund, 'expenses': expenses, 'amount_sum': sum}
    return render(request, 'fund/details.html', context)
Example #5
0
def pricedb_form(request):

    can_index = funcs.has_perm_or_is_owner(request.user, 'pricedb.add_pricedb')
    if not can_index:
        messages.error(request, 'عدم دسترسی کافی!')
        return redirect('errorpage')
    price_set = PriceDb()
    price_set.title = request.POST['title']
    price_set.summary = request.POST['summary']
    price_set.save()
    db_kw = [
        5.5,
        7.5,
        11,
        15,
        18.5,
        22,
        30,
        37,
        45,
        55,
        75,
        90,
        110,
        132,
        160,
        200,
        220,
        250,
        315,
        355,
        400,
        450,
    ]
    db_speed = [1000, 1500, 3000]
    motor_pks = {}
    for kw in db_kw:
        pk_list = []
        for speed in db_speed:
            motor = MotorDB()
            motor.kw = kw
            motor.speed = speed
            motor.price_set = price_set
            motor.save()
            pk_list.append(motor.pk)
        motor_pks[kw] = pk_list
    return render(request, 'pricedb/form.html', {
        'motor_pks': motor_pks,
        'db_kw': db_kw,
        'db_speed': db_speed,
    })
Example #6
0
def pricedb_clean(request):

    can_index = funcs.has_perm_or_is_owner(request.user,
                                           'pricedb.delete_pricedb')
    if not can_index:
        messages.error(request, 'عدم دسترسی کافی!')
        return redirect('errorpage')

    motors = MotorDB.objects.all()
    for motor in motors:
        tf = motor.prime_cost or motor.base_price or motor.sale_price
        if not tf:
            motor.delete()
    return redirect('pricedb_index')
Example #7
0
def pricedb_details(request, pricedb_pk):

    can_index = funcs.has_perm_or_is_owner(request.user,
                                           'pricedb.index_pricedb')
    if not can_index:
        messages.error(request, 'عدم دسترسی کافی!')
        return redirect('errorpage')
    db_kw = [
        5.5,
        7.5,
        11,
        15,
        18.5,
        22,
        30,
        37,
        45,
        55,
        75,
        90,
        110,
        132,
        160,
        200,
        220,
        250,
        315,
        355,
        400,
        450,
    ]
    db_speed = [1000, 1500, 3000]
    priceset = PriceDb.objects.get(pk=pricedb_pk)
    prices = priceset.motordb_set.all().order_by('pk')
    list = []
    for pr in prices:
        list.append(pr.prime_cost)
    final = {}
    count = 0
    for kw in db_kw:
        price_list = []
        for speed in db_speed:
            price_list.append(list[count])
            count += 1
        final[kw] = price_list
    return render(request, 'pricedb/details.html', {
        'price_list': final,
        'price_set': priceset,
    })
Example #8
0
def fund_edit_form(request, fund_pk):
    fund_instance = Fund.objects.get(pk=fund_pk)
    can_edit = funcs.has_perm_or_is_owner(request.user, 'fund.edit_fund',
                                          fund_instance)
    if not can_edit:
        messages.error(request, 'عدم دسترسی کافی')
        return redirect('errorpage')
    fund_instance.date_fa = fund_instance.date_fa.togregorian()
    form = forms.FundForm(request.POST or None, instance=fund_instance)
    if form.is_valid():
        fund = form.save(commit=False)
        fund.save()
        return redirect('fund_index')

    context = {'form': form}
    return render(request, 'fund/fund_form.html', context)
Example #9
0
def tenders_admin(request, key='', path_to_html_file=''):

    can_index = funcs.has_perm_or_is_owner(request.user,
                                           'request.index_requests')
    if not can_index:
        messages.error(request, 'عدم دسترسی کافی!')
        return redirect('errorpage')

    if 'key' in request.POST:
        key = request.POST['key']
    pars_tenders, aria_tenders = find_tenders(key)
    path_to_html_file = 'requests/admin_jemco/tenders/tenders.html'
    # render_tenders(pars_tenders, aria_tenders, key)
    return render(request, 'requests/admin_jemco/tenders/tenders.html', {
        'tenders_items': pars_tenders,
        'aria_tenders': aria_tenders,
        'key': key
    })
Example #10
0
def pricedb_insert(request):

    can_index = funcs.has_perm_or_is_owner(request.user, 'pricedb.add_pricedb')
    if not can_index:
        messages.error(request, 'عدم دسترسی کافی!')
        return redirect('errorpage')
    kv = {}
    for key in request.POST.keys():
        if key.startswith('pk_'):
            a = key.split('_')
            kv[a[1]] = request.POST[key]
    for pk in kv:
        motor = MotorDB.objects.get(pk=pk)
        if not kv[pk]:
            kv[pk] = 0
        motor.prime_cost = kv[pk]
        motor.save()
    return redirect('pricedb_index')
Example #11
0
    def perform_mutate(cls, form, info):
        # todo: probably i should remove all permform_updates.
        # todo: every perform_update override can lead to an update problem although it works on creation.
        owner = form.cleaned_data['owner']
        can_add = funcs.has_perm_or_is_owner(owner, 'incomes.add_incomerow')
        if not can_add:
            sys.tracebacklimit = -1
            raise GraphQLError('No permission to do that.')

        proforma = form.cleaned_data['proforma']
        income = form.cleaned_data['income']
        amount = form.cleaned_data['amount']

        if proforma.req_id.customer != income.customer:
            sys.tracebacklimit = -1
            raise GraphQLError("customer mismatch")
        # TODO: two checks should be done.
        # 1- sum of income rows shouldn't be more than income amount,
        # 2- proforma income rows sum should be less than proforma amount

        proforma_assigns = proforma.incomerow_set.aggregate(sum=Sum('amount'))
        if proforma_assigns['sum'] is None:
            proforma_assigns['sum'] = 0
        income_assings = income.incomerow_set.aggregate(sum=Sum('amount'))
        if income_assings['sum'] is None:
            income_assings['sum'] = 0
        remained_income = income.amount - income_assings['sum']
        proforma_remained = proforma.total_proforma_price_vat(
        )['price_vat'] - proforma_assigns['sum']

        if amount > remained_income:
            raise GraphQLError('مبلغ بزرگتر از مانده دریافتی')

        if (proforma_remained - amount) <= 0:
            raise GraphQLError('proforma amount not sufficient')

        return super().perform_mutate(form, info)
Example #12
0
def req_form_copy(request):
    # acl_obj = OrderProxy(request.user, 'request.add_requests')
    # is_allowed = AccessControl(acl_obj).allow()
    # is_allowed = funcs.has_perm_or_is_owner(request.user, 'request.add_requests', )
    # if not is_allowed:
    #     messages.error(request, 'عدم دسترسی کافی')
    #     return redirect('errorpage')

    if request.method == 'POST':
        form = RequestCopyForm(request.POST or None)
        if form.is_valid():
            req_no = form.cleaned_data['number']
            if form.cleaned_data['new_number']:
                has_parent = False
                new_numebr = form.cleaned_data['new_number']
            else:
                has_parent = True
            if not Requests.objects.filter(is_active=True).filter(
                    number=req_no):
                messages.error(request, 'درخواست مورد نظر یافت نشد.')
                return redirect('errorpage')

            master_req = Requests.objects.filter(is_active=True).get(
                number=req_no)
            can_add = funcs.has_perm_or_is_owner(request.user,
                                                 'request.add_requests',
                                                 instance=master_req)
            if not can_add:
                messages.error(request, 'عدم دسترسی کافی')
                return redirect('errorpage')

            reqspec_sets = master_req.reqspec_set.all()
            print(reqspec_sets.count())
            temp_number = master_req.number
            master_req.pk = None
            if has_parent:
                master_req.parent_number = temp_number
                # last_request = Requests.objects.filter(is_active=True).filter(parent_number__isnull=False).order_by('number').last()
                master_req.number = Requests.objects.order_by(
                    'number').last().number + 1
            else:
                if not Requests.objects.filter(number=new_numebr):
                    master_req.number = new_numebr
                else:
                    messages.error(request, 'درخواست با این شماره موجود است.')
                    return redirect('errorpage')

            master_req.save()

            if master_req.owner != request.user:
                master_req.colleagues.add(master_req.owner)
                master_req.owner = request.user
                master_req.save()

            for s in reqspec_sets:
                s.pk = None
                s.req_id = master_req
                s.save()
            messages.error(
                request,
                f"درخواست شماره {master_req.number} از درخواست شماره {temp_number} کپی گردید."
            )
            return redirect('order:insert_spec', pk=master_req.pk)

    if request.method == 'GET':
        form = RequestCopyForm()

    context = {
        'form': form,
    }
    return render(request, 'requests/admin_jemco/yrequest/req_form_copy.html',
                  context)