add start of a phone call view
This commit is contained in:
parent
bda5855d0e
commit
ee70113a47
|
@ -9,6 +9,7 @@ recursive-include welco/sources/mail/static *.css *.js *.ico *.gif *.png *.jpg
|
|||
recursive-include welco/templates *.html
|
||||
recursive-include welco/kb/templates *.html
|
||||
recursive-include welco/contacts/templates *.html
|
||||
recursive-include welco/sources/phone/templates *.html
|
||||
recursive-include welco/sources/mail/templates *.html
|
||||
recursive-include welco/contrib/alfortville/templates *.html
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ INSTALLED_APPS = (
|
|||
'haystack',
|
||||
'reversion',
|
||||
'welco.sources.mail',
|
||||
'welco.sources.phone',
|
||||
'welco.qualif',
|
||||
'welco.kb',
|
||||
'welco.contacts',
|
||||
|
|
|
@ -50,6 +50,8 @@ class Feeder(TemplateView):
|
|||
feeder = csrf_exempt(Feeder.as_view())
|
||||
|
||||
class Home(object):
|
||||
source_key = 'mail'
|
||||
|
||||
def __init__(self, request):
|
||||
self.request = request
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
# welco - multichannel request processing
|
||||
# Copyright (C) 2015 Entr'ouvert
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Affero General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import subprocess
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db import models
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
class PhoneCall(models.Model):
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Phone Call')
|
||||
|
||||
number = models.CharField(_('Number'), max_length=20)
|
||||
|
||||
creation_timestamp = models.DateTimeField(auto_now_add=True)
|
||||
last_update_timestamp = models.DateTimeField(auto_now=True)
|
||||
|
||||
@classmethod
|
||||
def get_qualification_form_class(cls):
|
||||
return None
|
||||
|
||||
def get_qualification_form(self):
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def get_qualification_form_submit_url(cls):
|
||||
return reverse('qualif-phone-save')
|
||||
|
||||
def get_source_context(self, request):
|
||||
return {
|
||||
'channel': 'phone',
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
{% load i18n %}
|
||||
<h2>{% trans 'Phone Call' %}</h2>
|
||||
<div data-source-type="{{ source_type.id }}">
|
||||
|
||||
<h1>{% trans 'Current Call:' %} <strong>01 02 03 04 05</strong></h1>
|
||||
|
||||
<h3>{% trans 'Past Calls' %}</h3>
|
||||
<ul>
|
||||
<li>16 juillet 2015 11:23:21</li>
|
||||
<li>15 juillet 2015 16:36:42</li>
|
||||
</ul>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$('.cell.qualif').each(function(idx, zone) {
|
||||
var source_type = $('div.source div[data-source-type]').data('source-type');
|
||||
var source_pk = $('div.source .active[data-source-pk]').data('source-pk');
|
||||
$.ajax({url: $(zone).data('zone-url'),
|
||||
data: {source_type: source_type,
|
||||
source_pk: source_pk},
|
||||
async: true,
|
||||
dataType: 'html',
|
||||
success: function(data) {
|
||||
$(zone).find('> div').replaceWith(data);
|
||||
$(zone).find('select').select2();
|
||||
$(zone).removeClass('has-page-displayed');
|
||||
},
|
||||
error: function(error) { console.log(':(', error); }
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
</div>
|
|
@ -0,0 +1,33 @@
|
|||
# welco - multichannel request processing
|
||||
# Copyright (C) 2015 Entr'ouvert
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Affero General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django import template
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.template import RequestContext
|
||||
|
||||
from .models import PhoneCall
|
||||
|
||||
class Home(object):
|
||||
source_key = 'phone'
|
||||
|
||||
def __init__(self, request):
|
||||
self.request = request
|
||||
|
||||
def render(self):
|
||||
context = RequestContext(self.request)
|
||||
context['source_type'] = ContentType.objects.get_for_model(PhoneCall)
|
||||
tmpl = template.loader.get_template('welco/phone_home.html')
|
||||
return tmpl.render(context)
|
|
@ -40,6 +40,12 @@ body.welco-home div#content {
|
|||
position: relative;
|
||||
}
|
||||
|
||||
.source-phone .cell,
|
||||
.source-phone .cell.top {
|
||||
width: 50%;
|
||||
height: 50%;
|
||||
}
|
||||
|
||||
div#content .cell h2 {
|
||||
font-size: 100%;
|
||||
padding-left: 1ex;
|
||||
|
@ -54,7 +60,7 @@ div#content .cell.document iframe {
|
|||
border: none;
|
||||
}
|
||||
|
||||
div#content .cell.document > div {
|
||||
div#content .source-mail .cell.document > div {
|
||||
display: flex;
|
||||
height: calc(100% - 3em);
|
||||
}
|
||||
|
@ -157,6 +163,7 @@ form#kb-search {
|
|||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
.contacts div.search input,
|
||||
.kb div.search input {
|
||||
margin: 0 1ex;
|
||||
}
|
||||
|
@ -302,3 +309,12 @@ button#create-new-contact {
|
|||
.contacts.has-contact-displayed .search {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.source-phone .source h1 {
|
||||
font-weight: normal;
|
||||
padding-left: 1ex;
|
||||
}
|
||||
|
||||
.source-phone .source h3 {
|
||||
padding-left: 1ex;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
{% block bodyargs %}class="welco-home"{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="all">
|
||||
<div class="all source-{{ source.source_key }}">
|
||||
<div class="cell document source top">
|
||||
{{ source.render }}
|
||||
</div>
|
||||
|
|
|
@ -2,8 +2,10 @@
|
|||
<div>
|
||||
<form>
|
||||
<div class="qualif-source">
|
||||
{{source_form.as_p}}
|
||||
<button data-action-url="{{source_form_url}}" class="save">✓</button>
|
||||
{% if source_form %}
|
||||
{{source_form.as_p}}
|
||||
<button data-action-url="{{source_form_url}}" class="save">✓</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if association %}
|
||||
|
|
|
@ -22,6 +22,7 @@ from . import apps
|
|||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', 'welco.views.home', name='home'),
|
||||
url(r'^phone/$', 'welco.views.home_phone', name='home-phone'),
|
||||
url(r'^ajax/qualification$', 'welco.views.qualification', name='qualif-zone'),
|
||||
url(r'^ajax/qualification-done$', 'welco.views.qualification_done', name='qualif-done'),
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ except ImportError:
|
|||
get_idps = lambda: []
|
||||
|
||||
from sources.mail.views import Home as MailHome
|
||||
from sources.phone.views import Home as PhoneHome
|
||||
from .qualif.models import Association, FormdefReference
|
||||
from .kb.views import HomeZone as KbHomeZone
|
||||
from .contacts.views import HomeZone as ContactsHomeZone
|
||||
|
@ -65,15 +66,16 @@ class Qualification(TemplateView):
|
|||
context = super(Qualification, self).get_context_data(**kwargs)
|
||||
context['form'] = QualificationForm()
|
||||
source_type = ContentType.objects.get(id=self.request.GET['source_type'])
|
||||
source_object = source_type.model_class().objects.get(id=self.request.GET['source_pk'])
|
||||
context['source_form'] = source_object.get_qualification_form()
|
||||
context['source_form_url'] = source_type.model_class().get_qualification_form_submit_url()
|
||||
try:
|
||||
context['association'] = Association.objects.get(
|
||||
source_type=ContentType.objects.get(id=self.request.GET['source_type']),
|
||||
source_pk=self.request.GET['source_pk'])
|
||||
except Association.DoesNotExist:
|
||||
pass
|
||||
if source_type.model_class().get_qualification_form_class():
|
||||
source_object = source_type.model_class().objects.get(id=self.request.GET['source_pk'])
|
||||
context['source_form'] = source_object.get_qualification_form()
|
||||
context['source_form_url'] = source_type.model_class().get_qualification_form_submit_url()
|
||||
try:
|
||||
context['association'] = Association.objects.get(
|
||||
source_type=ContentType.objects.get(id=self.request.GET['source_type']),
|
||||
source_pk=self.request.GET['source_pk'])
|
||||
except Association.DoesNotExist:
|
||||
pass
|
||||
return context
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
|
@ -95,10 +97,11 @@ qualification = csrf_exempt(Qualification.as_view())
|
|||
|
||||
class Home(TemplateView):
|
||||
template_name = 'welco/home.html'
|
||||
source_klass = MailHome
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(Home, self).get_context_data(**kwargs)
|
||||
context['source'] = MailHome(self.request)
|
||||
context['source'] = self.source_klass(self.request)
|
||||
context['kb'] = KbHomeZone(self.request)
|
||||
context['contacts'] = ContactsHomeZone(self.request)
|
||||
return context
|
||||
|
@ -106,6 +109,12 @@ class Home(TemplateView):
|
|||
home = Home.as_view()
|
||||
|
||||
|
||||
class HomePhone(Home):
|
||||
source_klass = PhoneHome
|
||||
|
||||
home_phone = HomePhone.as_view()
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
def qualification_done(request):
|
||||
association = Association.objects.get(
|
||||
|
|
Loading…
Reference in New Issue