You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.8 KiB
116 lines
3.8 KiB
from django.db import models
|
|
from datetime import datetime
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.conf import settings
|
|
|
|
|
|
class AsteriskCDR(models.Model):
|
|
DISPOSITION_CHOICES = (
|
|
('NO ANSWER', _('No answer')),
|
|
('FAILED', _('Failed')),
|
|
('BUSY', _('Busy')),
|
|
('ANSWERED', _('Answered')),
|
|
('UNKNOWN', _('Unknown'))
|
|
)
|
|
calldate = models.DateTimeField(default='0000-00-00 00:00:00', primary_key=True)
|
|
clid = models.CharField(max_length=80, default='')
|
|
src = models.CharField(max_length=80, default='')
|
|
dst = models.CharField(max_length=80, default='')
|
|
dcontext = models.CharField(max_length=80, default='')
|
|
channel = models.CharField(max_length=80, default='')
|
|
dstchannel = models.CharField(max_length=80, default='')
|
|
lastapp = models.CharField(max_length=80, default='')
|
|
lastdata = models.CharField(max_length=80, default='')
|
|
duration = models.IntegerField(default=0)
|
|
billsec = models.IntegerField(default=0)
|
|
start = models.DateTimeField(null=True, blank=True, default=None)
|
|
answer = models.DateTimeField(null=True, blank=True, default=None)
|
|
end = models.DateTimeField(null=True, blank=True, default=None)
|
|
disposition = models.CharField(max_length=45, choices=DISPOSITION_CHOICES, default='')
|
|
amaflags = models.IntegerField(default=0)
|
|
accountcode = models.CharField(max_length=20, default='')
|
|
userfield = models.CharField(max_length=255, default='')
|
|
uniqueid = models.CharField(max_length=32, default='')
|
|
|
|
def save(self, *args, **kwargs):
|
|
return
|
|
|
|
def delete(self, *args, **kwargs):
|
|
return
|
|
|
|
def locate_disposition(self):
|
|
dsp = self.disposition
|
|
if dsp == 'NO ANSWER':
|
|
return _('No answer')
|
|
elif dsp == 'FAILED':
|
|
return _('Failed')
|
|
elif dsp == 'BUSY':
|
|
return _('Busy')
|
|
elif dsp == 'ANSWERED':
|
|
return _('Answered')
|
|
elif dsp == 'UNKNOWN':
|
|
return _('Unknown')
|
|
return ''
|
|
|
|
def path_to_media(self):
|
|
path = getattr(settings, 'DIALING_MEDIA', '/media')
|
|
if self.userfield == 'request':
|
|
return "%s/recording/request" % path
|
|
elif self.userfield == 'report':
|
|
return "%s/recording/bug" % path
|
|
return "%s/monitor" % path
|
|
|
|
def url(self):
|
|
if type(self.calldate) is datetime:
|
|
return "%s/%s-%s-%s.wav" % (
|
|
self.path_to_media(), self.calldate.strftime('%Y/%m/%d/%H_%M'), self.src, self.dst
|
|
)
|
|
|
|
class Meta:
|
|
db_table = 'cdr'
|
|
managed = False
|
|
ordering = ('-calldate',)
|
|
|
|
|
|
class SMSModel(models.Model):
|
|
when = models.DateTimeField(auto_now_add=True)
|
|
who = models.CharField(max_length=32)
|
|
dev = models.CharField(max_length=20)
|
|
text = models.CharField(max_length=255)
|
|
|
|
class Meta:
|
|
db_table = 'sms'
|
|
permissions = (
|
|
('can_view_sms', _('Can view sms')),
|
|
)
|
|
verbose_name = _('SMS')
|
|
verbose_name_plural = _('SMS')
|
|
ordering = ('-when',)
|
|
|
|
def __str__(self):
|
|
return self.text
|
|
|
|
|
|
class SMSOut(models.Model):
|
|
when = models.DateTimeField(_('When'), auto_now_add=True)
|
|
dst = models.CharField(_('Telephone'), max_length=16)
|
|
text = models.CharField(_('Text'), max_length=255)
|
|
SMS_OUT_STATUS = (
|
|
('nw', _('New')),
|
|
('st', _('Sent')),
|
|
('fd', _('Failed'))
|
|
)
|
|
status = models.CharField(_('Status'), max_length=2, choices=SMS_OUT_STATUS, default='nw')
|
|
|
|
class Meta:
|
|
db_table = 'out_sms'
|
|
permissions = (
|
|
('can_view_sms', _('Can view sms')),
|
|
('can_send_sms', _('Can send sms'))
|
|
)
|
|
verbose_name = _('Out SMS')
|
|
verbose_name_plural = _('Out SMS')
|
|
ordering = ('-when',)
|
|
|
|
def __str__(self):
|
|
return self.text
|