def auto_dial_disable(request): """10/03/19: moved from view.py""" if dsh_django_request.deny_it(request): return views.please_log_in() response = views.page_header('disable auto-dial') dsh_db_config.set('auto_dial_disable', True) disabled = dsh_db_config.get('auto_dial_disable') if not disabled: message = 'views.auto_dial_disable: unexpected error.' response += dsh_utils.red_error_break_msg(message) dsh_django_utils.error_event(message, errorLevel='CRT') response += views.page_footer() return HttpResponse(response) response += spool_wipe_status_message() dsh_django_utils.auto_schedule_delete_all() response += dsh_utils.black_break_msg( 'now <font color=red><b>disabled</b></font>. ' +\ 'wanna <a href="/autodialenable">re-enable</a>?') response += views.page_footer() dsh_agi.report_event('auto-dial disabled.') return HttpResponse(response)
def schedule_one_callee(request, personDshUid): """triggerred by clicking the little clock icon on the Person page. for scheduling auto-dialed call for one person.""" if dsh_django_request.deny_it(request): return please_log_in() response = page_header('schedule auto-dialed call for one callee') response += '\n' disabled = dsh_db_config.get('auto_dial_disable') if disabled: response += dsh_utils.black_break_msg( 'auto-dial is currently <font color=red><b>disabled</b></font>.') response += page_footer() return HttpResponse(response) persons = dvoice.db.models.Person.objects.filter(dsh_uid=personDshUid) if not persons or len(persons) > 1: message = 'views.schedule_one_callee: bad DshUid: ' + personDshUid response += dsh_utils.red_error_break_msg(message) dsh_django_utils.error_event(message, errorLevel='CRT') response += page_footer() return HttpResponse(response) person = persons[0] dsh_django_utils.check_auto_timed_calls_for_person(person) response += dsh_utils.black_break_msg('done.') response += dsh_utils.black_break_msg( 'see the <a href=/scheduled>schedule</a>.') response += page_footer() return HttpResponse(response)
def spool_wipe_status_message(): """called by reschedule(), auto_dial_enable(), and auto_dial_disable(). displays the current status of spool directory wiping.""" response = '' disableWipe = dsh_db_config.get('reschedule_wipe_disable') if disableWipe: response += dsh_utils.black_break_msg( 'note: wiping of existing schedule is disabled.') return response
def chop_prefix_digits_for_local(callNum, callee): """ 10/02/02: chopping of the leading zero is moved from dsh_django_utils.generate_dot_call_file(). also adding code to remove 0522. """ dsh_common_db.init_log(quiet=True) #if callee.phone_std: # # 10/03/13: # dial as is. # #return callNum dsh_utils.db_print( 'chop_prefix_digits_for_local: enter: callNum: ' + callNum, 152) if len(callNum) > 1 and (not callee.phone_std) and \ (not callee.phone_landline) and callNum[0] == '0' and \ (callNum[1] == '9' or callNum[1] == '8'): # # it looks like Asterisk doesn't like the leading 0 # for cell phone numbers, chop it off. # 10/03/14: # now dealing with phone numbers that start with 8. # callNum = callNum[1:] dsh_utils.db_print( 'chop_prefix_digits_for_local: return1: callNum: ' + callNum, 152) return callNum localLandLinePrefix = dsh_db_config.get('local_land_line_prefix') if not localLandLinePrefix: message = 'chop_prefix_digits_for_local: no local land line prefix.' dsh_utils.give_bad_news(message, logging.warning) dsh_agi.report_event(message, reportLevel='WRN') # # try_remove_prefix() will deal with null prefix # so no need to worry about anything else than logging message. # # 10/03/14: # should look at the callee.phone_landline flag. # but I'm not: it's still legit to look for 0522 and kill it # even if it was not explicitly marked as a landline. # callNum = try_remove_prefix(callNum, localLandLinePrefix) dsh_utils.db_print( 'chop_prefix_digits_for_local: returned ' + callNum, 152) return callNum
def change_call_num_to_zoiper_test(callee, callNum): """ 10/04/09: called by dsh_django_utils.generate_dot_call_file(). if I'm doing testing on home laptops, change the call number to a fellow laptop's Zoiper number. normally, it's just callee.phone_number. in the Zoiper case, it'll be something like: 192.168.2.14:4569-753 see models.py 10/04/09. """ calleeNum = callee.phone_number physChannel = dsh_db_config.get('outgoing_channel') if not physChannel: return callNum if physChannel != dsh_config.lookup('FORWARD_OUTGOING_CHANNEL_IAX2'): return callNum zoiperNumber = dsh_db_config.get('zoiper_number') if not zoiperNumber: return callNum zoiperNumber = zoiperNumber.strip() return zoiperNumber
def schedule_one_callee(request, personDshUid): """triggerred by clicking the little clock icon on the Person page. for scheduling auto-dialed call for one person.""" if dsh_django_request.deny_it(request): return please_log_in() response = page_header('schedule auto-dialed call for one callee') response += '\n' disabled = dsh_db_config.get('auto_dial_disable') if disabled: response += dsh_utils.black_break_msg( 'auto-dial is currently <font color=red><b>disabled</b></font>.') #response += page_footer() #return HttpResponse(response) # # 10/03/18: # I'm going to schedule a call anyways. # for sending out doctor replies even though global auto-dial # has been turned off. # response += dsh_utils.black_break_msg( "but we are scheduling a call anyhow.") persons = dv2.db.models.Person.objects.filter(dsh_uid=personDshUid) if not persons or len(persons) > 1: message = 'views.schedule_one_callee: bad DshUid: ' + personDshUid response += dsh_utils.red_error_break_msg(message) dsh_django_utils.error_event(message, errorLevel='CRT') response += page_footer() return HttpResponse(response) person = persons[0] scheduled,respStr = dsh_django_utils.check_auto_timed_calls_for_person( person) response += dsh_utils.black_break_msg(respStr) if scheduled: response += dsh_utils.black_break_msg('scheduled.') else: response += dsh_utils.black_break_msg('not scheduled.') response += dsh_utils.black_break_msg('done.') response += dsh_utils.black_break_msg( 'see the <a href=/scheduled>schedule</a>.') response += page_footer() return HttpResponse(response)
def auto_schedule_delete_all(force=False, sessionID=None): """ moved from dsh_django_utils.py called by views.schedule_del_all(). force=True when initiated by views.schedule_delete_all(). """ disableWipe = dsh_db_config.get('reschedule_wipe_disable') if not force and disableWipe: message = 'dsh_common_agi.auto_schedule_delete_all: ' +\ 'note: wiping of existing schedule is disabled.' dsh_agi.report_event(message, sessionID=sessionID) return dsh_utils.black_break_msg(message) spoolDir = dsh_common_config.lookup('ASTERISK_DOT_CALL_DIR') if not dsh_utils.is_valid_dir(spoolDir, silence=True): message = 'dsh_common_agi.auto_schedule_delete_all: ' + \ 'spool directory invalid: ' + spoolDir dsh_agi.report_event(message, reportLevel = 'CRT', sessionID=sessionID) return dsh_utils.red_error_break_msg(message) message = 'dsh_common_agi.auto_schedule_delete_all: ' +\ 'listdir() failed: ' + spoolDir try: listing = os.listdir(spoolDir) listing = dsh_common_db.filter_listdir_with_dbname(listing) except: dsh_agi.report_event(message, reportLevel = 'CRT', sessionID=sessionID) return dsh_utils.red_error_break_msg(message) message = dsh_utils.black_break_msg('deleting...') for one in listing: full = os.path.join(spoolDir, one) if not one: continue if os.path.isdir(full): continue if not dsh_utils.is_valid_file(full): continue if not one.endswith('.call'): continue dsh_utils.cleanup_path( full, 'dsh_common_agi.auto_schedule_delete_all: ') message += dsh_utils.black_break_msg(full) message += dsh_utils.black_break_msg('done.') return message
def reschedule(request, personTable): """ 10/03/19: moved from views.py a combination of delete all and active.""" if dsh_django_request.deny_it(request): return views.please_log_in() response = views.page_header('reschedule auto-dialed calls') dsh_common_agi.auto_schedule_delete_all() response += spool_wipe_status_message() disabled = dsh_db_config.get('auto_dial_disable') if disabled: response += dsh_utils.black_break_msg( 'global auto-dial is currently ' +\ '<font color=red><b>disabled</b></font>.') response += dsh_utils.black_break_msg( 'processing people in the current dial set...') response += dsh_common_selection.reschedule_current_dial_set( personTable) else: response += dsh_utils.black_break_msg( 'global auto-dial is currently ' +\ '<font color=green><b>enabled</b></font>.') response += dsh_utils.black_break_msg( 'processing all people...') dsh_django_utils.check_auto_timed_calls_for_all_persons(noLogging=True) response += dsh_utils.black_break_msg('done.') response += dsh_utils.black_break_msg( 'see the <a href=/scheduled>schedule</a>.') response += views.page_footer() dsh_agi.report_event( 'reschedule triggered by web interface.', action='RESC') return HttpResponse(response)
def auto_dial_status(request): """ 10/03/19: moved from views.py""" response = views.page_header('auto-dial status') response += spool_wipe_status_message() disabled = dsh_db_config.get('auto_dial_disable') if disabled: response += dsh_utils.black_break_msg( 'auto-dial is currently <font color=red><b>disabled</b></font>.') response += dsh_utils.black_break_msg( '<a href="/autodialenable">enable</a>?') else: response += dsh_utils.black_break_msg( 'auto-dial is currently <font color=green><b>enabled</b></font>.') response += dsh_utils.black_break_msg( '<a href="/autodialdisable">disable</a>?') response += views.page_footer() return HttpResponse(response)
def reschedule_script_call(personTable): """ 10/03/22: called by dsh_reschedule.py which is in turn invoked by crontab """ sessionID = dsh_common_db.make_session_id() dsh_common_agi.auto_schedule_delete_all(sessionID=sessionID) disabled = dsh_db_config.get('auto_dial_disable') if disabled: count = reschedule_current_dial_set( personTable, tinyResponse=True, sessionID=sessionID) message = 'dsh_reschedule.py: processing current dial set: ' +\ str(count) dsh_utils.give_news(message, logging.info) else: dsh_django_utils.check_auto_timed_calls_for_all_persons(noLogging=True) message = 'triggered by dsh_reschedule.py. done' dsh_agi.report_event(message, action='RESC', sessionID=sessionID) dsh_utils.give_news(message, logging.info)