487 lines
30 KiB
HTML
Executable File
487 lines
30 KiB
HTML
Executable File
<!-- start: PAGE TITLE -->
|
|
<section id="page-title">
|
|
<div class="row">
|
|
<div class="col-sm-8">
|
|
<h1 class="mainTitle" translate="sidebar.nav.sendSMSPage.MAIN">{{ mainTitle }}</h1>
|
|
</div>
|
|
<div ncy-breadcrumb></div>
|
|
</div>
|
|
</section>
|
|
<!-- end: PAGE TITLE -->
|
|
<!-- start: SEND SMS -->
|
|
<div class="container-fluid container-fullw bg-white">
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<!-- /// controller: 'UserCtrl' - localtion: assets/js/controllers/sendSMSsuperadminCtrl.js /// -->
|
|
<div ng-controller="sendSMSsuperadminCtrl" ng-init="init()">
|
|
<!--<h1>D</h1>-->
|
|
<tabset class="tabbable">
|
|
<tab heading="Send Student Messages" id="viewDayBook">
|
|
<div class="row">
|
|
<!--<div class="col-md-3">
|
|
<label for="form-field-select-2">
|
|
Select Branch
|
|
</label>
|
|
|
|
<select class="form-control" tabindex="1" class="cs-select cs-skin-elastic" name="branch" required>
|
|
<option value="" disabled selected>Select Branch</option>
|
|
<option ng-repeat="bdata in branchList_data" value="{{bdata.BranchCode}}">{{bdata.BranchName}}</option>
|
|
</select>
|
|
</div>-->
|
|
<div class="col-md-3">
|
|
<label for="form-field-select-2">
|
|
University
|
|
</label>
|
|
|
|
<select class="form-control" tabindex="1" class="cs-select cs-skin-elastic" name="university" ng-model="myUniv" ng-change="getUniveId(myUniv)">
|
|
<option value="" disabled selected>Select University</option>
|
|
<option ng-repeat="item in universityData" value="{{item}}">{{item.UniversityName}}</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="form-field-select-2">
|
|
Batch
|
|
</label>
|
|
|
|
<select class="form-control" tabindex="3" class="cs-select cs-skin-elastic" name="batch" ng-model="searchData.Batch" ng-change="getValueChange()">
|
|
<option value="" selected>Select Batch</option>
|
|
<option ng-repeat="itemBatch in batchData" value="{{itemBatch.BatchCode}}">{{itemBatch.BatchName}}</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-md-3">
|
|
<label for="form-field-select-2">
|
|
Course
|
|
</label>
|
|
|
|
<select class="form-control" tabindex="2" class="cs-select cs-skin-elastic" name="course" ng-model="searchData.Course" ng-change="getValueChange()">
|
|
<option value="" selected>Select Course</option>
|
|
<option ng-repeat="itemCourse in courseData" value="{{itemCourse.CourseID}}">{{itemCourse.CourseName}}</option>
|
|
</select>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
<!--<pre>{{ branchList_data }}</pre>-->
|
|
<!--<pre>{{ studentListDetails | json }}</pre>-->
|
|
<!--<pre>{{ searchResultLength }}</pre>-->
|
|
|
|
<div>
|
|
<!--// student search result-->
|
|
<div ng-if="searchLoading === true">
|
|
<!--search loading start-->
|
|
<div style="padding: auto 0; color: #007AFF; font-weight: bold; text-align:center;
|
|
margin-top: 25px;">
|
|
<h4 style="color: inherit">fetching...</h4>
|
|
</div>
|
|
<!--search loading end-->
|
|
</div>
|
|
|
|
<div ng-if="searchLoading === false">
|
|
<div class="col-md-12" ng-if="searchResultStatus == false" style="min-height: 281px;">
|
|
<p style="color: red;" align="center"><strong><h4 class="text-center">No
|
|
records found... </h4></strong></p>
|
|
</div>
|
|
|
|
<div class="col-md-12" ng-if="searchResultStatus == true">
|
|
<div class="col-md-12" ng-if="searchResultLength === 0" style="min-height: 281px;">
|
|
<p style="color: red;" align="center"><strong><h4 class="text-center">No
|
|
records found... </h4></strong></p>
|
|
</div>
|
|
|
|
<div class="table-responsive" ng-if="searchResultLength > 0">
|
|
<!--// search-->
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<label for="form-field-select-2">
|
|
Mobile Number
|
|
</label>
|
|
<script>
|
|
$(function () {
|
|
$("#search").focus();
|
|
});
|
|
</script>
|
|
<style>
|
|
.sort-icon {
|
|
font-size: 9px;
|
|
margin-left: 5px;
|
|
}
|
|
|
|
th {
|
|
cursor: pointer;
|
|
}
|
|
</style>
|
|
<input class="form-control" type="text" ng-change="mySearchChangeFunc(search.MobileNumber)" ng-model="search" id="search"
|
|
autofocus tabindex="1" placeholder="Search Mobile" /><br><br>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<table class="table table-hover" ng-controller="studentModalDemoCtrl">
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
<input type="checkbox" ng-hide="allSelectedHide" ng-model="allSelected" ng-change="openUpdateWind()" ng-model-options="{getterSetter: true}"
|
|
ng-click="openScreenSen()" />
|
|
</th>
|
|
<th ng-click="sort('Firstname')">First Name
|
|
<span class="glyphicon sort-icon" ng-show="sortKey=='Firstname'" ng-class="{'glyphicon-chevron-up':reverse,'glyphicon-chevron-down':!reverse}"></span>
|
|
</th>
|
|
<th ng-click="sort('Lastname')">Last Name
|
|
<span class="glyphicon sort-icon" ng-show="sortKey=='Lastname'" ng-class="{'glyphicon-chevron-up':reverse,'glyphicon-chevron-down':!reverse}"></span>
|
|
</th>
|
|
<th ng-click="sort('MobileNumber')">MobileNumber
|
|
<span class="glyphicon sort-icon" ng-show="sortKey=='MobileNumber'" ng-class="{'glyphicon-chevron-up':reverse,'glyphicon-chevron-down':!reverse}"></span>
|
|
</th>
|
|
<th ng-click="sort('EmailID')">Email ID
|
|
<span class="glyphicon sort-icon" ng-show="sortKey=='EmailID'" ng-class="{'glyphicon-chevron-up':reverse,'glyphicon-chevron-down':!reverse}"></span>
|
|
</th>
|
|
<th ng-click="sort('CourseName')">Course
|
|
<span class="glyphicon sort-icon" ng-show="sortKey=='CourseName'" ng-class="{'glyphicon-chevron-up':reverse,'glyphicon-chevron-down':!reverse}"></span>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody dir-paginate="p in searchResultDetails|filter:search:strict|orderBy:sortKey:reverse|itemsPerPage:10">
|
|
<tr>
|
|
<td>
|
|
<label>
|
|
<input type="checkbox" ng-model="p.Selected" ng-bind="values = p.StudentID" ng-change="setOneSelect(p)"
|
|
ng-click="openScreenSen()" />
|
|
</label>
|
|
</td>
|
|
<td><a tooltip="View Student" class="text-dark" ng-click="open(p);">{{p.Firstname}}</a></td>
|
|
<td>{{p.Lastname}}</td>
|
|
<td><a tooltip="View Student" class="text-dark" ng-click="open(p);">{{p.MobileNumber}}</a></td>
|
|
<td>{{p.EmailID}}</td>
|
|
<td>{{p.CourseName}}</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<dir-pagination-controls max-size="10" direction-links="true" boundary-links="true">
|
|
</dir-pagination-controls>
|
|
</div>
|
|
</div>
|
|
|
|
<div ng-if="OpenWindowStatus">
|
|
<style>
|
|
#cancel_button {
|
|
/*line-height: 12px;
|
|
width: 18px;
|
|
font-size: 8pt;
|
|
font-family: tahoma;*/
|
|
margin-top: 1px;
|
|
margin-right: 2px;
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
}
|
|
|
|
.target>div:target {
|
|
display: block;
|
|
}
|
|
</style>
|
|
<div>
|
|
<form name="Form" id="form" novalidate ng-submit="statusUpdate.submit(Form, msg_details)" method="post">
|
|
<div id="bottom1" class="container">
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<fieldset style="background-color: #eaeaea;">
|
|
<legend>
|
|
SMS Details
|
|
</legend>
|
|
<!--<div>
|
|
<a id="cancel_button" ng-click="unSelect()" tooltip="Close">
|
|
<span class="glyphicon glyphicon-remove-circle"></span>
|
|
</a>
|
|
</div>-->
|
|
|
|
<div class="row">
|
|
<div class="col-md-2"></div>
|
|
<div class="col-md-8 form-group" ng-class="{'has-error':Form.Messagebody.$dirty && Form.Messagebody.$invalid, 'has-success':Form.Messagebody.$valid}">
|
|
<label>
|
|
Message body <span class="symbol required"></span>
|
|
</label>
|
|
|
|
<textarea type="text" placeholder="Enter Message body" tabindex="7" class="form-control" name="Messagebody" ng-model="msg_details.content"
|
|
required/>
|
|
<span class="error text-small block" ng-if="Form.Messagebody.$dirty && Form.Messagebody.$error.pattern">Invalid Message body</span>
|
|
</div>
|
|
<div class="col-md-2"></div>
|
|
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<div class="pull-right">
|
|
<button type="submit" ng-disabled="disableButton" tabindex="8" ladda="ldloading1.zoom_in" class="btn btn-sm btn-success"
|
|
data-style="zoom-in">
|
|
<i class="fa fa-circle-o-notch fa-spin" ng-if="disableButton" style="font-size:14px"></i>
|
|
Submit
|
|
</button>
|
|
<button type="reset" tabindex="9" class="btn btn-warning btn-sm" tabindex="9" ng-click="statusUpdate.reset(Form)">
|
|
Reset
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="col-md-3">
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!--studen search result end-->
|
|
</div>
|
|
</tab>
|
|
<tab heading="Send Promotional Messages">
|
|
<style>
|
|
.mobileNumberList {
|
|
margin: 6px;
|
|
width: 100%;
|
|
height: 180px;
|
|
border: 1px solid gray;
|
|
overflow-x: scroll;
|
|
}
|
|
|
|
.mobileNumberList ul {
|
|
list-style: none;
|
|
display: flex;
|
|
flex-direction: row;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.mobileNumberList ul li {
|
|
padding: 4px 2px;
|
|
margin: 1px 2px;
|
|
border: 1px solid gray;
|
|
border-radius: 4px;
|
|
background: #70a5d0;
|
|
color: #000;
|
|
}
|
|
|
|
.deletBtn {
|
|
margin: 0 2px;
|
|
padding: 2px;
|
|
background: #2ba3ca;
|
|
border-radius: 50%;
|
|
border: 2px solid #469cad;
|
|
cursor: pointer;
|
|
color: #063742;
|
|
}
|
|
|
|
.deletBtn:hover {
|
|
background: #2ac3ca;
|
|
}
|
|
|
|
.lableValue {
|
|
margin: 0 4px;
|
|
}
|
|
|
|
.addBtn {
|
|
margin: 1px 2px;
|
|
padding: 4px 6px;
|
|
text-transform: uppercase;
|
|
background: #de1072;
|
|
border: none;
|
|
color: #dadada;
|
|
border-radius: 4px;
|
|
clear: both;
|
|
}
|
|
|
|
.inputCls {
|
|
padding: 7px 4px;
|
|
}
|
|
</style>
|
|
<form name="Form" id="form" novalidate ng-submit="composeMsg.submit(Form)" method="post">
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-md-6" ng-class="{'has-error':Form.addMessage.$dirty && Form.addMessage.$invalid, 'has-success':Form.addMessage.$valid}">
|
|
<label>
|
|
Message :<span class="symbol required"></span>
|
|
</label>
|
|
|
|
<textarea type="text" placeholder="Enter Message Details" tabindex="3" class="form-control inputCls" name="addMessage" ng-model="mobileNumList.message"
|
|
required maxlength="300" />
|
|
<span class="text-small block" style="color: rgba(128, 128, 128, 0.64)">Max 300 Characters.</span>
|
|
<span class="error text-small block" ng-if="Form.addMessage.$dirty && Form.addMessage.$error.required">Message is Required </span>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
|
|
<label>
|
|
<input type="radio" ng-model="message" value="false" ng-click="string(message)">
|
|
Number
|
|
</label>
|
|
|
|
<label>
|
|
<input type="radio" ng-model="message" value="true" ng-click="string(message)">
|
|
Group
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-4" ng-if="radio==1">
|
|
|
|
<label>Multiple Mobile Numbers : <span class="symbol required"></span>
|
|
</label>
|
|
<div>
|
|
<textarea type="text" placeholder="Enter Multiple Mobile Numbers" tabindex="5" class="form-control inputCls" name="addMulipleNumbers"
|
|
ng-model="mobileNumList.multipleMobile" />
|
|
<span><b>Note:</b> Mobile Numbers Must Be Valid And Separate by commas(<b>eg : </b> 9876543210, 9786543210, ...)</span>
|
|
<span class="error text-small block" ng-if="addressForm.mobile.$error.pattern && addressForm.mobile.$error.minlength && addressForm.mobile.$error.maxlength">Valid Mobile is Required </span>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-2" ng-if="radio==1">
|
|
<i ng-click="composeMsgMultipleNumber()" class="addBtn">add</i>
|
|
</div>
|
|
<div class="col-md-6" ng-if="radio==1">
|
|
<div class="mobileNumberList">
|
|
<ul>
|
|
<li ng-repeat="num in listMobileNums track by $index"><span class="lableValue">{{num}}</span><span class="deletBtn" ng-click="deletMobileList(num)">X</span></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="row" ng-if="radio==1">
|
|
<div class="pull-left">
|
|
<button type="submit" ng-disabled="disableSendButton" tabindex="4" ladda="ldloading1.zoom_in" class="btn btn-sm btn-success"
|
|
data-style="zoom-in">
|
|
<i class='fa fa-spinner fa-spin' ng-if="disableSendButton"> </i>Send
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-12" ng-if="radio==2">
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<select class="form-control" tabindex="1" class="cs-select cs-skin-elastic" name="addType" ng-model="mobileNumList.grouptype"
|
|
ng-Change="getall_Numbers(mobileNumList.grouptype);" required>
|
|
<option value="" disabled selected>Select Group</option>
|
|
<option ng-repeat="p in statusInfo" ng-if="p.IsActive" value="{{p.ID}}">{{p.GroupName}}</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<textarea rows="4" col="3" class="form-control" name="content" ng-model="numbers"></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-12">
|
|
<br/>
|
|
<div class="pull-left">
|
|
<input type="button" class="btn btn-sm btn-success" tabindex="10" value="Send" ng-click="sendgroup(Form);">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</tab>
|
|
<tab heading="Manage Groups">
|
|
|
|
|
|
<form name="Form" id="Form" novalidate ng-submit="AddGroup.submit(Form,myModel)" method="post">
|
|
<fieldset>
|
|
<legend>Add New</legend>
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<div class="row">
|
|
<div class="col-md-4 form-group" ng-class="">
|
|
<label>
|
|
Group Name <span class="symbol required"></span>
|
|
</label>
|
|
<input type="text" placeholder="Enter Group Name" tabindex="1" class="form-control" name="GroupName" ng-model="myModel.GroupName"
|
|
ng-pattern="/^[a-zA-Z0-9.\s]*$/" capitalize required/>
|
|
<span class="error text-small block" ng-if="Form.GroupName.$dirty && Form.GroupName.$error.required">Group Name is required</span>
|
|
<span class="error text-small block" ng-if="Form.GroupName.$dirty && Form.GroupName.$error.pattern">Invalid Group Name </span>
|
|
</div>
|
|
<div class="col-md-2" style="padding-top: 2.3%;">
|
|
<div class="pull-right">
|
|
<button type="submit" ladda="ldloading1.zoom_in" tabindex="2" class="btn btn-wide btn-success" data-style="zoom-in">
|
|
Add
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</form>
|
|
|
|
|
|
|
|
<table class="table table-hover" ng-init="initgroup();">
|
|
<thead>
|
|
<tr>
|
|
|
|
<th ng-click="sort('ListName')">Group Name
|
|
<span class="glyphicon sort-icon" ng-show="sortKey=='ListName'" ng-class="{'glyphicon-chevron-up':reverse,'glyphicon-chevron-down':!reverse}"> </span>
|
|
</th>
|
|
<th>Status</th>
|
|
<th></th>
|
|
</tr>
|
|
</thead>
|
|
<!-- {{statusInfo}} -->
|
|
<tbody dir-paginate="p in statusInfo|orderBy:sortKey:reverse|filter:search:strict|itemsPerPage:10">
|
|
<tr>
|
|
|
|
<td>{{p.GroupName}}</td>
|
|
<td><span ng-if="p.IsActive == 1"> Active </span><span ng-if="p.IsActive == 0">In-Active</span></td>
|
|
<td>
|
|
<a class="text-azure" id="editRowBtn{{p.ID}}" ng-click="setEditId(p.ID);"><b class="fa fa-hover fa-plus" tooltip="Add Contact" aria-hidden="true"></b>
|
|
</a>
|
|
</td>
|
|
<td>
|
|
|
|
<div class="col-md-3">
|
|
<label>
|
|
Active/De-Active
|
|
</label>
|
|
<div ng-if="p.IsActive==true">
|
|
|
|
<switch ng-change="statusactive(p.ID,p.IsActive)" ng-model="p.IsActive" ng-init="p.IsActive = true" class="green"></switch>
|
|
|
|
</div>
|
|
<div ng-if="p.IsActive==false">
|
|
<switch ng-change="statusactive(p.ID,p.IsActive)" ng-model="p.IsActive" ng-init="p.IsActive = false" class="green"></switch>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</td>
|
|
|
|
|
|
</tr>
|
|
<tr ng-show="editId === p.ID" ng-if="editId === p.ID">
|
|
<td colspan="12" ng-include src="'assets/views/addcontact.html'"></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<dir-pagination-controls max-size="10" direction-links="true" boundary-links="true">
|
|
</dir-pagination-controls>
|
|
|
|
|
|
</tab>
|
|
</tabset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- end: SEND SMS -->
|
|
<section id="page-title">
|
|
<div class="row">
|
|
<!--<div class="col-sm-8">
|
|
<h1 class="mainTitle" translate="sidebar.nav.profile.MAIN">{{ mainTitle }}</h1>
|
|
</div>
|
|
<div ncy-breadcrumb></div>-->
|
|
</div>
|
|
</section> |