Ejemplo n.º 1
0
def person_add(request, ):
    # new person contract add
    res = ""
    manager = request.user.get_full_name()
    ctypes = ContractType.objects.filter(is_active=True)
    payplan = PayPlan.objects.filter(is_active=True).exclude(plantype=2)
    try:
        cnumber = Contract.objects.latest()
        cnumber = cnumber.pk + 1 + settings.CNUMBERDELTA
    except Contract.DoesNotExist:
        cnumber = 1 + settings.CNUMBERDELTA

    if request.method == 'POST':
        post_values = request.POST.copy()
        post_values['manager'] = request.user.id
        contract = Contract()

        post_values['payment_date'] = datetime.now()
        born_date = strptime(post_values['born_date'], "%d.%m.%Y")
        post_values['born_date'] = datetime(born_date.tm_year,
                                            born_date.tm_mon,
                                            born_date.tm_mday)
        ctype = ContractType.objects.get(pk=post_values['contract_type'])
        post_values['date_start'] = datetime.now()
        post_values['date'] = datetime.now()
        post_values['date_end'] = datetime.now() + timedelta(
            days=ctype.period_days)

        if "custom" in request.POST.keys():
            pplan = PayPlan()
            pplan.name = 'contr#' + str(cnumber + time())
            pplan.plantype = 2
            pplan.amount = post_values['pp_amount']
            pplan.save()
            i = 1
            while "price" + str(i) in post_values.keys():
                ppsteps = PayPlanSteps()
                ppsteps.pay_plan = pplan
                ppsteps.amount = post_values['price' + str(i)]
                ppsteps.number = i
                ppsteps.save()
                i += 1
        else:
            if "pay_plan" in request.POST.keys():
                try:
                    pplan = PayPlan.objects.get(pk=post_values['pay_plan'])
                except PayPlan.DoesNotExist:
                    pplan = PayPlan()
            else:
                pplan = PayPlan()

        post_values['pay_plan'] = pplan.pk
        if not post_values['card']:
            post_values['card'] = '0'
        cform = form_Contract(post_values)

        form = form_client_add(post_values)
        if form.is_valid():
            res = "Form person OK"
            try:
                guest = Guest.objects.get(phone=post_values['phone'])
                guest.is_client = 1
                guest.save()
                manager = guest.manager
            except Guest.DoesNotExist:
                manager = request.user
            clnt = Client(
                first_name=post_values['first_name'],
                last_name=post_values['last_name'],
                patronymic=post_values['patronymic'],
                gender=post_values['gender'],
                phone=post_values['phone'],
                born_date=post_values['born_date'],
                address=post_values['address'],
                email=post_values['email'],
                passport=post_values['passport'],
                manager=manager,
            )
            clnt.save()
            payer = clnt  # payer always is Client fields in form
            if ctype.is_child:
                child_born_date = strptime(post_values['child_born_date'],
                                           "%d.%m.%Y")
                post_values['child_born_date'] = datetime(
                    child_born_date.tm_year,
                    child_born_date.tm_mon,
                    child_born_date.tm_mday,
                )
                clnt = Client(
                    first_name=post_values['child_first_name'],
                    last_name=post_values['child_last_name'],
                    patronymic=post_values['child_patronymic'],
                    born_date=post_values['child_born_date'],
                    manager=manager,
                )
                clnt.save()
            if request.POST["avatar64"]:
                imgName = settings.MEDIA_ROOT + "/avatar/user" + str(
                    time()) + ".png"
                clnt.avatar.save(imgName,
                                 ContentFile(
                                     post_values['avatar64'].decode('base64')),
                                 save=True)

            post_values['client'] = clnt.id
            post_values['payer'] = payer.id
            if "is_open_date" in request.POST.keys():
                post_values['is_open_date'] = True
            else:
                post_values['is_open_date'] = False

            # form.save()
            if cform.is_valid():
                res += " Form contract OK"
                # cform.save()
                try:
                    discount = Discount.objects.get(
                        pk=int(post_values['discount']))
                    credit_disc = float(discount.value) / 100
                except Discount.DoesNotExist:
                    credit_disc = 0
                    discount = Discount()
                contract = Contract(
                    number=post_values['number'],
                    manager=request.user,
                    date_start=post_values['date_start'],
                    date_end=post_values['date_end'],
                    contract_type=ctype,
                    card=post_values['card'],
                    discount=discount,
                    amount=post_values['amount'],
                    pay_plan=pplan,
                    payment_type=post_values['payment_type'],
                    is_open_date=post_values['is_open_date'],
                    payment_date=datetime.now(),
                    client=clnt,
                    payer=payer,
                    # wait for the activation
                    is_current=2,
                )
                contract.save()
                if pplan.pk:
                    for step in PayPlanSteps.objects.filter(pay_plan=pplan):
                        delta = (step.number - 1) * 30
                        if pplan.plantype == 1:
                            price = ctype.price - ctype.price * credit_disc
                            amount = price * step.amount / 100
                        else:
                            amount = step.amount
                        credit = Credits(
                            user=request.user,
                            amount=amount,
                            plan_date=datetime.now() + timedelta(days=delta),
                            contract=contract,
                            payment_type=int(contract.payment_type),
                        )
                        credit.save()
                else:
                    # write single credit
                    credit = Credits(
                        user=request.user,
                        amount=post_values['amount'],
                        plan_date=datetime.now(),
                        contract=contract,
                        payment_type=int(contract.payment_type),
                    )
                    credit.save()

                url = '/person/' + str(clnt.id) + '/' + str(contract.id)
                return HttpResponseRedirect(url)
            else:
                clnt.delete()
                context_dict = dict(
                    res=res,
                    form=form,
                    cform=cform,
                    request=request,
                )
                return render_to_response("person_add.html", context_dict)
        else:
            discounts = Discount.objects.filter(
                Q(date_start__lte=datetime.now()),
                Q(date_end__gte=datetime.now())
                | Q(date_end__isnull=True)).order_by('value')
    else:
        form = form_client_add()
        cform = form_Contract()
        contract = Contract()
        discounts = Discount.objects.filter(
            Q(date_start__lte=datetime.now()),
            Q(date_end__gte=datetime.now())
            | Q(date_end__isnull=True)).order_by('value')

    context_dict = dict(form=form,
                        cform=cform,
                        cnumber=cnumber,
                        contract=contract,
                        discounts=discounts,
                        request=request,
                        manager=manager,
                        ctypes=ctypes,
                        payplan=payplan,
                        res=res)
    context_dict.update(csrf(request))
    return render_to_response("person_add.html", context_dict)
Ejemplo n.º 2
0
    cndata = {
        'number': data[1],
        'date': data[2],
        'manager': data[3],
        'date_start': data[4],
        'date_end': data[5],
        'contract_type': data[6],
        'card': data[7],
        'amount': data[8],
        'pay_plan': '',
        'payment_date': data[10],
        'client': cl.pk,
        'payer': cl.pk,
        'discount': data[13],
        'is_open_date': opendate,
        'is_current': 2,
        'payment_type': data[12]
    }
    fc = form_Contract(cndata)
    if fc.is_valid():
        fc.save()
    # print data
    # csv.write(','.join(str(v) for v in data) + "\n")
    cnt += 1

f.close()
l.write('total read lines: %d\r\n' % total)
l.write('success load lines: %d\r\n' % cnt)
l.write('finish\r\n')
l.close()
csv.close()
Ejemplo n.º 3
0
def prolongation(request, clnt_id=0, act=None):
    if act == 'guest':
        try:
            clnt = rGuest.objects.get(pk=clnt_id)
        except rGuest.DoesNotExist:
            return render_to_response("clienterr.html")
    else:
        try:
            clnt = Client.objects.get(pk=clnt_id)
        except Client.DoesNotExist:
            return render_to_response("clienterr.html")
    try:
        cnumber = Contract.objects.latest()
        cnumber = cnumber.pk + 1 + settings.CNUMBERDELTA
    except Contract.DoesNotExist:
        cnumber = 1 + settings.CNUMBERDELTA
    try:
        contract = Contract.objects.get(client=clnt, is_current=1)
        card = contract.card
        curr_string = contract.contract_type.name + u' '
        curr_string += u' по цене: ' + str(contract.amount)
        if contract.discount:
            curr_string += u' со скидкой: ' + str(
                contract.discount.value) + '%'
        else:
            curr_string += u' без скидки. '
    except Contract.DoesNotExist:
        contract = Contract()
        card = ""
        curr_string = ''

    if request.method == 'POST':
        post_values = request.POST.copy()
        if act == 'guest':
            try:
                guest = Guest.objects.get(phone=post_values['phone'])
                guest.is_client = 1
                guest.save()
                post_values['manager'] = guest.manager.pk
            except Guest.DoesNotExist:
                post_values['manager'] = request.user.pk
        else:
            post_values['manager'] = clnt.manager.id

        born = strptime(post_values['born_date'], "%d.%m.%Y")
        post_values['born_date'] = date(born.tm_year, born.tm_mon,
                                        born.tm_mday)
        ctype = ContractType.objects.get(pk=post_values['contract_type'])

        if clnt.age() >= 14 and not ctype.is_child:
            if act == 'guest':
                form = form_client_add(post_values)
            else:
                form = form_client_add(post_values, instance=clnt)
            if form.is_valid():
                clnt = form.save()
                payer = clnt
            else:
                return HttpResponse(form.errors, mimetype="text/html")
        else:
            try:
                payer = Client.objects.get(
                    first_name=post_values['first_name'].upper(),
                    last_name=post_values['last_name'].upper(),
                    patronymic=post_values['patronymic'].upper(),
                    born_date=post_values['born_date'])
                formp = form_client_add(post_values, instance=payer)
            except Client.DoesNotExist:
                formp = form_client_add(post_values)
            if formp.is_valid():
                payer = formp.save()
            else:
                return HttpResponse(formp.errors, mimetype="text/html")

            # replace values for chilrd
            c_born = strptime(post_values['child_born_date'], "%d.%m.%Y")
            post_values['born_date'] = date(
                c_born.tm_year,
                c_born.tm_mon,
                c_born.tm_mday,
            )
            post_values['first_name'] = post_values['child_first_name']
            post_values['last_name'] = post_values['child_last_name']
            post_values['patronymic'] = post_values['child_patronymic']
            try:
                clnt = Client.objects.get(
                    first_name=post_values['first_name'].upper(),
                    last_name=post_values['last_name'].upper(),
                    patronymic=post_values['patronymic'].upper(),
                    born_date=post_values['born_date'])
                formc = form_client_add(post_values, instance=clnt)
            except Client.DoesNotExist:
                formc = form_client_add(post_values)
            if formc.is_valid():
                clnt = formc.save()

        if act == 'guest':
            g = rGuest.objects.get(pk=clnt_id)
            g.is_client = 1
            g.save()

        if 'discount' in post_values.keys():
            try:
                discount = Discount.objects.get(
                    pk=int(post_values['discount']))
                credit_disc = float(discount.value) / 100
            except Discount.DoesNotExist:
                credit_disc = 0
                discount = Discount()

        if "custom" in post_values.keys():
            pplan = PayPlan(
                name='conter#' + str(time()),
                plantype=2,
                amount=post_values['pp_amount'],
            )
            pplan.save()
            i = 1
            while "price" + str(i) in post_values.keys():
                ppsteps = PayPlanSteps()
                ppsteps.pay_plan = pplan
                ppsteps.amount = post_values['price' + str(i)]
                ppsteps.number = i
                ppsteps.save()
                i += 1
        else:
            if "pay_plan" in post_values.keys():
                try:
                    pplan = PayPlan.objects.get(pk=post_values['pay_plan'])
                except PayPlan.DoesNotExist:
                    pplan = PayPlan()
            else:
                pplan = PayPlan()

        date_start = datetime.now()
        date_end = date_start + timedelta(days=ctype.period_days)

        if "is_open_date" in post_values.keys():
            post_values['is_open_date'] = True
        else:
            post_values['is_open_date'] = False
        post_values['number'] = cnumber
        post_values['date'] = datetime.now()
        post_values['date_start'] = datetime.now()
        post_values['date_end'] = date_end
        post_values['payment_date'] = datetime.now()
        post_values['pay_plan'] = pplan.pk
        post_values['client'] = clnt.pk
        post_values['payer'] = payer.pk
        post_values['is_current'] = 2

        # for contract manager allways is current
        post_values['manager'] = request.user.pk
        cform = form_Contract(post_values)
        if cform.is_valid():
            contract = cform.save()
            if credit_disc > 0:
                contract.discount = discount
                contract.save()
        else:
            res = cform.errors
            return HttpResponseRedirect(res)
        if pplan.pk:
            for step in PayPlanSteps.objects.filter(pay_plan=pplan):
                delta = (step.number - 1) * 30
                if pplan.plantype == 1:
                    amount = (ctype.price -
                              ctype.price * credit_disc) * step.amount / 100
                else:
                    amount = step.amount
                credit = Credits(
                    user=request.user,
                    amount=amount,
                    plan_date=datetime.now() + timedelta(days=delta),
                    contract=contract,
                    payment_type=int(contract.payment_type),
                )
                credit.save()
        else:
            # write single credit
            credit = Credits(user=request.user,
                             amount=post_values['amount'],
                             plan_date=datetime.now(),
                             contract=contract,
                             payment_type=int(contract.payment_type))
            credit.save()
        url = reverse('pers_cont', args=(clnt.pk, contract.pk))
        return HttpResponseRedirect(url)

    if clnt.age() >= 14:
        ctypes = ContractType.objects.filter(is_active=True)
        payer = clnt
    else:
        ctypes = ContractType.objects.filter(is_active=True, is_child=True)
        payer = Client()

    payplan = PayPlan.objects.filter(is_active=True).exclude(plantype=2)
    discounts = Discount.objects.filter(
        Q(date_start__lte=datetime.now()),
        Q(date_end__gte=datetime.now())
        | Q(date_end__isnull=True)).order_by('value')
    context_dict = dict(
        child=clnt,
        request=request,
        ctypes=ctypes,
        payplan=payplan,
        cnumber=cnumber,
        manager=clnt.manager,
        card=card,
        discounts=discounts,
        payer=payer,
        age=clnt.age(),
        curr_string=curr_string,
    )
    context_dict.update(csrf(request))
    return render_to_response("person_prolongation.html", context_dict)