예제 #1
0
def processing_contract_statuses(contract):
    '''
    обработка предыдущих статусов контракта:
    если ОП активируется первого числа месяца - то удалим все закрытые статусы с 1 числа,
    если ОП активируетя после первого числа - то у последнего закрытого статуса проставим закрытия -1 от даты активации
    '''

    today = date.today()

    if today.day == 1:
        #убираем статусы об отключении при недостатке средств
        ContractStatus.objects.filter( \
            contract=contract, \
            status=settings.CONTRACT_STATUS['closed'], \
            start_date__gte=getFirstDay() \
        ).delete()
    else:
        contract_statuses = ContractStatus.objects.filter(contract=contract, start_date__gte=getFirstDay()).order_by('-start_date')
        if contract_statuses:
            if contract_statuses[0].status == settings.CONTRACT_STATUS['closed']:
                #последний статус который закрыт
                contract_status = contract_statuses[0]
                contract_status.end_date = today - timedelta(days=1)
                contract_status.save()
            else:
                #последний статус который НЕ закрыт
                contract_status = contract_statuses[0]
                if contract_status.end_date is None:
                    contract_status.end_date = today - timedelta(days=1)
                    contract_status.save()
예제 #2
0
    def get(self):
        if self.period_start and self.period_end:
            #получаем платежи за выбранные периоды
            payments = Payment.objects.filter(contract=self.contract, date__gte=self.getFirstDay(), date__lte=self.getLastDay()).order_by('date')
        else:
            #получаем платежи за последний период
            payments = Payment.objects.filter(contract=self.contract, date__gte=getFirstDay(), date__lte=getLastDay()).order_by('-date')

        data = []
        for payment in payments:
            data.append(payment.list())

        return data
예제 #3
0
    def not_used_trust_pay(self):
        #проверяем было ли понижение лимита в текущем месяце
        limit_down_count = ContractLimit.objects.filter(contract=self.contract, date__gte=getFirstDay(), date__lte=getLastDay()).count()

        if limit_down_count == 0:
            return True
        else:
            return False
예제 #4
0
    def test_enable_internet(self):      
        i = 0
        for contract in self.contracts:
            service = Service(contract=contract)

            if service.is_internet_activated():

                internet_contract = contract.get_service_contract(self.service)

                if internet_contract:
                    #выключаем интернет абоненту - имитируя блокировку интернет за неуплату
                    if internet_contract.status == settings.CONTRACT_STATUS['active']:
                        internet_contract.status = settings.CONTRACT_STATUS['closed']
                        internet_contract.save()

                    limit_down = LimitDown(contract=contract)
                    if limit_down.can_make():
                        self.client.post('/login', {'contract': contract.contract, 'password': contract.password})
                        response = self.client.get('/enable_internet')

                        self.assertEqual(json.loads(response.content)['success'], True)
                        self.assertEqual(json.loads(response.content)['title'],   u'Интернет включён на %s дня' % limit_down.get_trust_days_duration())
                        self.assertEqual(json.loads(response.content)['message'], u'Не забудьте внести оплату в течении указанного периода. Важно: для активации вашего тарифа, завершите текущее соединение с интернетом и через пять минут подключитесь заново.')

                        #проверяем ContractLimit
                        contract_limit = ContractLimit.objects.get(contract=internet_contract, date__gte=getFirstDay(), date__lte=getLastDay())
                        self.assertEqual(contract_limit.summa, settings.TRUST_PAY_LIMIT)
                        self.assertEqual(contract_limit.days, unicode(limit_down.get_trust_days_duration()))

                        #проверяем TaskLimitRestoration
                        task_limit_restoration = TaskLimitRestoration.objects.get( \
                            contract=internet_contract, \
                            date=datetime.now() + timedelta(days=limit_down.get_trust_days_duration()))
                        self.assertEqual(task_limit_restoration.summa, settings.TRUST_PAY_LIMIT)

                        #проверяем ContractStatusLog
                        contract_status_log = ContractStatusLog.objects.get(contract=internet_contract, start_date=date.today(), comment=u'Включение услуги при понижении лимита через личный кабинет')
                        self.assertEqual(contract_status_log.status, settings.CONTRACT_STATUS['active'])

                        #проверяем что статусы об отключении при недостатке средств убраны
                        #contract_statuses = ContractStatus.objects.filter(contract=contract, status=settings.CONTRACT_STATUS['closed'], start_date__gte=getFirstDay())
                        #self.assertEqual(len(contract_statuses), 0)

                        #проверяем что создана запись о том что услуга включена через обещанный платёж
                        contract_status = ContractStatus.objects.get(contract=internet_contract, status=settings.CONTRACT_STATUS['active'], start_date=date.today(), comment=u'Включение услуги при понижении лимита через личный кабинет')
                        self.assertEqual(contract_status.end_date, date.today() + timedelta(days=limit_down.get_trust_days_duration() - 1))

                        #проверяем что текущий лимит абонента понижен
                        internet_contract = Contract.objects.get(contract=internet_contract)
                        self.assertEqual(internet_contract.limit, settings.TRUST_PAY_LIMIT)

                        #logout
                        self.client.post('/logout')
                        i = i + 1

        print u"Test: <test_enable_internet>. Всего договоров: %i, Обработано: %i" % (len(self.contracts), i)