15 changed files with 323 additions and 0 deletions
-
1djing/settings.py
-
1djing/urls.py
-
0new_customers/__init__.py
-
5new_customers/admin.py
-
5new_customers/apps.py
-
8new_customers/forms.py
-
98new_customers/locale/ru/LC_MESSAGES/django.po
-
38new_customers/migrations/0001_initial.py
-
0new_customers/migrations/__init__.py
-
57new_customers/models.py
-
17new_customers/templates/new_customers/potentialsubscriber_form.html
-
51new_customers/templates/new_customers/potentialsubscriber_list.html
-
12new_customers/urls.py
-
23new_customers/views.py
-
7templates/base.html
@ -0,0 +1,5 @@ |
|||||
|
from django.contrib import admin |
||||
|
from new_customers.models import PotentialSubscriber |
||||
|
|
||||
|
|
||||
|
admin.site.register(PotentialSubscriber) |
||||
@ -0,0 +1,5 @@ |
|||||
|
from django.apps import AppConfig |
||||
|
|
||||
|
|
||||
|
class NewCustomersConfig(AppConfig): |
||||
|
name = 'new_customers' |
||||
@ -0,0 +1,8 @@ |
|||||
|
from django import forms |
||||
|
from new_customers.models import PotentialSubscriber |
||||
|
|
||||
|
|
||||
|
class CustomerModelForm(forms.ModelForm): |
||||
|
class Meta: |
||||
|
model = PotentialSubscriber |
||||
|
exclude = ('make_data',) |
||||
@ -0,0 +1,98 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the PACKAGE package. |
||||
|
# Dmitry Novikov nerosketch@gmail.com, 2019. |
||||
|
# |
||||
|
#, fuzzy |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: PACKAGE VERSION\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-06-17 00:43+0300\n" |
||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
||||
|
"Last-Translator: Dmitry Novikov nerosketch@gmail.com\n" |
||||
|
"Language: ru\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" |
||||
|
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" |
||||
|
"%100>=11 && n%100<=14)? 2 : 3);\n" |
||||
|
|
||||
|
#: models.py:11 |
||||
|
msgid "fio" |
||||
|
msgstr "ФИО" |
||||
|
|
||||
|
#: models.py:14 |
||||
|
msgid "Telephone" |
||||
|
msgstr "Номер телефона" |
||||
|
|
||||
|
#: models.py:24 |
||||
|
msgid "User group" |
||||
|
msgstr "Группа нового абонента" |
||||
|
|
||||
|
#: models.py:27 |
||||
|
msgid "Town" |
||||
|
msgstr "Посёлок" |
||||
|
|
||||
|
#: models.py:28 |
||||
|
msgid "Town, if group does not already exist" |
||||
|
msgstr "Населённый пункт, если группа ещё не существует" |
||||
|
|
||||
|
#: models.py:31 |
||||
|
msgid "Street" |
||||
|
msgstr "Улица" |
||||
|
|
||||
|
#: models.py:33 |
||||
|
msgid "House" |
||||
|
msgstr "Дом" |
||||
|
|
||||
|
#: models.py:39 |
||||
|
msgid "Comment" |
||||
|
msgstr "Комментарий" |
||||
|
|
||||
|
#: models.py:43 |
||||
|
msgid "Create date" |
||||
|
msgstr "Дата создания" |
||||
|
|
||||
|
#: models.py:45 |
||||
|
msgid "Deadline connection" |
||||
|
msgstr "Планируемая дата подключения" |
||||
|
|
||||
|
#: models.py:46 |
||||
|
msgid "Date when connection must be finished" |
||||
|
msgstr "Дата, до которой подключение должно быть завершено" |
||||
|
|
||||
|
#: models.py:55 |
||||
|
msgid "Potential customer" |
||||
|
msgstr "Новый абонент" |
||||
|
|
||||
|
#: models.py:56 |
||||
|
msgid "Potential customers" |
||||
|
msgstr "Новые абоненты" |
||||
|
|
||||
|
#: templates/new_customers/potentialsubscriber_form.html:5 |
||||
|
msgid "Create potential client" |
||||
|
msgstr "Создать заявку на подключение" |
||||
|
|
||||
|
#: templates/new_customers/potentialsubscriber_form.html:13 |
||||
|
#: templates/new_customers/potentialsubscriber_list.html:45 |
||||
|
msgid "Add" |
||||
|
msgstr "Добавить" |
||||
|
|
||||
|
#: templates/new_customers/potentialsubscriber_list.html:8 |
||||
|
#: templates/new_customers/potentialsubscriber_list.html:14 |
||||
|
msgid "Potential subscribers" |
||||
|
msgstr "Заявки на подключение" |
||||
|
|
||||
|
#: templates/new_customers/potentialsubscriber_list.html:21 |
||||
|
msgid "New subscribers" |
||||
|
msgstr "Новые абоненты" |
||||
|
|
||||
|
#: templates/new_customers/potentialsubscriber_list.html:22 |
||||
|
msgid "People that may be clients" |
||||
|
msgstr "Подключки. Клиенты, которые должны стать абонентами" |
||||
|
|
||||
|
#: templates/new_customers/potentialsubscriber_list.html:38 |
||||
|
msgid "Not have new subscribers" |
||||
|
msgstr "Нет новых подключек" |
||||
@ -0,0 +1,38 @@ |
|||||
|
# Generated by Django 2.0 on 2019-06-17 00:17 |
||||
|
|
||||
|
import django.core.validators |
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
initial = True |
||||
|
|
||||
|
dependencies = [ |
||||
|
('group_app', '0003_auto_20180808_1236'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='PotentialSubscriber', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('fio', models.CharField(max_length=256, verbose_name='fio')), |
||||
|
('telephone', models.CharField(blank=True, max_length=16, validators=[django.core.validators.RegexValidator('^(\\+[7,8,9,3]\\d{10,11})?$')], verbose_name='Telephone')), |
||||
|
('town', models.CharField(blank=True, max_length=127, null=True, verbose_name='Town')), |
||||
|
('street', models.CharField(blank=True, max_length=127, null=True, verbose_name='Street')), |
||||
|
('house', models.CharField(blank=True, max_length=12, null=True, verbose_name='House')), |
||||
|
('description', models.TextField(blank=True, null=True, verbose_name='Comment')), |
||||
|
('make_data', models.DateTimeField(auto_now_add=True, verbose_name='Create date')), |
||||
|
('deadline', models.DateField(blank=True, null=True, verbose_name='Deadline connection')), |
||||
|
('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='group_app.Group', verbose_name='User group')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Potential customer', |
||||
|
'verbose_name_plural': 'Potential customers', |
||||
|
'db_table': 'new_customers', |
||||
|
'ordering': ('-id',), |
||||
|
}, |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,57 @@ |
|||||
|
from django.shortcuts import resolve_url |
||||
|
from django.utils.translation import gettext_lazy as _ |
||||
|
from django.db import models |
||||
|
from django.conf import settings |
||||
|
from django.core.validators import RegexValidator |
||||
|
|
||||
|
from group_app.models import Group |
||||
|
|
||||
|
|
||||
|
class PotentialSubscriber(models.Model): |
||||
|
fio = models.CharField(_('fio'), max_length=256) |
||||
|
telephone = models.CharField( |
||||
|
max_length=16, |
||||
|
verbose_name=_('Telephone'), |
||||
|
blank=True, |
||||
|
validators=(RegexValidator( |
||||
|
getattr(settings, 'TELEPHONE_REGEXP', r'^(\+[7893]\d{10,11})?$') |
||||
|
),) |
||||
|
) |
||||
|
group = models.ForeignKey( |
||||
|
Group, |
||||
|
on_delete=models.SET_NULL, |
||||
|
blank=True, null=True, |
||||
|
verbose_name=_('User group') |
||||
|
) |
||||
|
town = models.CharField( |
||||
|
_('Town'), |
||||
|
help_text=_('Town, if group does not already exist'), |
||||
|
max_length=127, blank=True, null=True |
||||
|
) |
||||
|
street = models.CharField(_('Street'), max_length=127, blank=True, null=True) |
||||
|
house = models.CharField( |
||||
|
_('House'), |
||||
|
max_length=12, |
||||
|
null=True, |
||||
|
blank=True |
||||
|
) |
||||
|
description = models.TextField( |
||||
|
_('Comment'), |
||||
|
null=True, |
||||
|
blank=True |
||||
|
) |
||||
|
make_data = models.DateTimeField(_('Create date'), auto_now_add=True) |
||||
|
deadline = models.DateField( |
||||
|
_('Deadline connection'), |
||||
|
help_text=_('Date when connection must be finished'), |
||||
|
blank=True, null=True |
||||
|
) |
||||
|
|
||||
|
def get_absolute_url(self): |
||||
|
return resolve_url('new_customers:user', uid=self.pk) |
||||
|
|
||||
|
class Meta: |
||||
|
db_table = 'new_customers' |
||||
|
verbose_name = _('Potential customer') |
||||
|
verbose_name_plural = _('Potential customers') |
||||
|
ordering = '-id', |
||||
@ -0,0 +1,17 @@ |
|||||
|
{% load i18n bootstrap3 %} |
||||
|
<form role="form" action="{% url 'new_customers:new_user' %}" method="post">{% csrf_token %} |
||||
|
<div class="modal-header primary"> |
||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> |
||||
|
<h4 class="modal-title"><span class="glyphicon glyphicon-question-sign"></span>{% trans 'Create potential client' %}</h4> |
||||
|
</div> |
||||
|
|
||||
|
<div class="modal-body"> |
||||
|
{% bootstrap_form form %} |
||||
|
|
||||
|
<div class="btn-group"> |
||||
|
<button type="submit" class="btn btn-primary"> |
||||
|
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add' %} |
||||
|
</button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</form> |
||||
@ -0,0 +1,51 @@ |
|||||
|
{% extends request.is_ajax|yesno:'bajax.html,base.html' %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
|
||||
|
{% block breadcrumb %} |
||||
|
<ol class="breadcrumb"> |
||||
|
<li><span class="glyphicon glyphicon-home"></span></li> |
||||
|
<li class="active">{% trans 'Potential subscribers' %}</li> |
||||
|
</ol> |
||||
|
{% endblock %} |
||||
|
|
||||
|
|
||||
|
{% block page_header %} |
||||
|
<h3>{% trans 'Potential subscribers' %}</h3> |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block main %} |
||||
|
|
||||
|
<div class="panel panel-default"> |
||||
|
<div class="panel-heading"> |
||||
|
<h3 class="panel-title">{% trans 'New subscribers' %}</h3> |
||||
|
<span>{% trans 'People that may be clients' %}</span> |
||||
|
</div> |
||||
|
<div class="list-group"> |
||||
|
{% for new_user in object_list %} |
||||
|
{% with user_group=new_user.group %} |
||||
|
<a href="{{ new_user.get_absolute_url }}" class="list-group-item"> |
||||
|
{% if user_group.deadline %} |
||||
|
<div class="pull-right"> |
||||
|
<small>{{ user_group.deadline|date:'d M, H:i:s' }}</small> |
||||
|
</div> |
||||
|
{% endif %} |
||||
|
<h4>{{ new_user.fio }}</h4> |
||||
|
</a> |
||||
|
{% endwith %} |
||||
|
{% empty %} |
||||
|
<a href="#" class="list-group-item"> |
||||
|
<p class="list-group-item-text">{% trans 'Not have new subscribers' %}</p> |
||||
|
</a> |
||||
|
{% endfor %} |
||||
|
</div> |
||||
|
<div class="panel-footer"> |
||||
|
<div class="btn-group"> |
||||
|
<a href="{% url 'new_customers:new_user' %}" class="btn btn-default btn-modal"> |
||||
|
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add' %} |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
{% endblock %} |
||||
@ -0,0 +1,12 @@ |
|||||
|
from django.urls import path |
||||
|
from new_customers import views |
||||
|
|
||||
|
|
||||
|
app_name = 'new_customers' |
||||
|
|
||||
|
|
||||
|
urlpatterns = [ |
||||
|
path('', views.CustomersList.as_view(), name='customers_list'), |
||||
|
path('new/', views.CustomerNew.as_view(), name='new_user'), |
||||
|
path('<int:uid>/', views.CustomerDetail.as_view(), name='user'), |
||||
|
] |
||||
@ -0,0 +1,23 @@ |
|||||
|
from django.contrib.auth.mixins import PermissionRequiredMixin |
||||
|
from django.views.generic import ListView, DetailView, CreateView |
||||
|
|
||||
|
from djing.global_base_views import OrderingMixin |
||||
|
from djing.lib.mixins import LoginAdminMixin, LoginAdminPermissionMixin |
||||
|
from new_customers.forms import CustomerModelForm |
||||
|
from new_customers.models import PotentialSubscriber |
||||
|
|
||||
|
|
||||
|
class CustomersList(LoginAdminMixin, OrderingMixin, ListView): |
||||
|
model = PotentialSubscriber |
||||
|
|
||||
|
|
||||
|
class CustomerDetail(LoginAdminPermissionMixin, DetailView): |
||||
|
model = PotentialSubscriber |
||||
|
pk_url_kwarg = 'uid' |
||||
|
permission_required = 'new_customers.view_potentialsubscriber' |
||||
|
|
||||
|
|
||||
|
class CustomerNew(LoginAdminMixin, PermissionRequiredMixin, CreateView): |
||||
|
model = PotentialSubscriber |
||||
|
form_class = CustomerModelForm |
||||
|
permission_required = 'new_customers.add_potentialsubscriber' |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue