Rapport-Laravel/app/Http/Controllers/ComcampaignController.php

141 lines
6.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\LambdaRequest;
use DB;
use \stdClass;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\InvoicesExport;
class ComcampaignController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->_service = 'communication';
$this->_module = 'comcampaign';
$this->_viewname = 'comcampaign';
$this->_title = 'Campaign';
$this->_base_url = '/comcampaign';
}
protected function get_list_fields()
{
return [
'actions' => ['title' => 'Actions', 'buttons' => ['edit', 'delete', 'messages' => ['icon' => 'chart-box', 'querystring' => 'id={ID}']]],
'name' => ['title' => 'Name', 'type' => 'text'],
'type' => ['title' => 'Type', 'type' => 'text'],
'message_count' => ['title' => 'Message Count', 'type' => 'text'],
'message_sent' => ['title' => 'Message Sent', 'type' => 'text'],
'message_read' => ['title' => 'Message Read', 'type' => 'text'],
'status' => ['title' => 'Status', 'type' => 'select']
];
}
protected function get_form_fields($type, $values)
{
$teams = $this->getlambda('get', 'communication', 'template', 'dropdown');
// echo '<pre>'; print_r($teams); exit;
$templates = [];
foreach ($teams->data->items as $team) {
$templates[$team->template_code] = $team->name;
}
$chans = $this->getlambda('get', 'communication', 'channel', 'dropdown');
// echo '<pre>'; print_r($teams); exit;
$channels = [];
foreach ($chans->data->items as $chan) {
$channels[$chan->id] = $chan->name;
}
$conlists = $this->getlambda('get', 'contact', 'contact_list', 'dropdown');
$contactlists = [];
foreach ($conlists->data->items as $conlist) {
$contactlists[$conlist->id] = $conlist->name;
}
$metrics = $this->getlambda('get', 'metric', 'metric', 'get_all');
$metric_dd = [];
foreach($metrics->data->items as $metric){
$metric_dd[$metric->id] = $metric->name;
}
return [
'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
'template_code' => ['title' => 'Template', 'type' => 'select', 'values' => $templates, 'required' => true],
'channel' => ['title' => 'Channel', 'type' => 'select', 'values' => $channels, 'required' => true],
'contacts' => ['title' => 'Contact Lists', 'type' => 'multiselect', 'values' => $contactlists, 'required' => true],
'type' => ['title' => 'Type', 'type' => 'select', 'required' => true, 'values' => ['whatsapp' => 'Whatsapp', 'sms' => 'SMS', 'email' => 'Email']],
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled']],
'is_scheduled' => ['title' => 'Is Scheduled', 'type' => 'yesno', 'required' => true],
'scheduled_time' => ['title' => 'Schedule date & time', 'type' => 'datetime', 'required' => true,],
'sent_metric' => ['title' => 'Sent Metric', 'type' => 'select', 'values' => $metric_dd, 'required' => true],
'read_metric' => ['title' => 'Read Metric', 'type' => 'select', 'values' => $metric_dd, 'required' => true],
'followup_message' => ['title' => 'Follow Up Message', 'type' => 'textarea'],
];
}
protected function _beforesave($type, $request)
{
$data = $request->except('_token');
if ($request->file('image')) {
$data['image'] = $this->_uploadMedia($request, 'image', 'template');
}
return $data;
}
public function messages($request) {
$id = $request->input('id');
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all_messages', ['id' => $id]);
return $this->view('list')->with([
'title' => 'Messages',
'fields' => [
'name' => ['title' => 'Name', 'type' => 'text'],
'phone' => ['title' => 'Phone', 'type' => 'text'],
'email' => ['title' => 'Email', 'type' => 'text'],
'type' => ['title' => 'Type', 'type' => 'text'],
'is_sent' => ['title' => 'Is Sent', 'type' => 'text'],
'sent_time' => ['title' => 'Sent Time', 'type' => 'datetime'],
'is_read' => ['title' => 'Is Read', 'type' => 'text'],
'read_time' => ['title' => 'Read Time', 'type' => 'datetime'],
],
'base_url' => $this->_base_url,
'items' => $response->data->messages,
'buttons' => [['title' => 'Export Excel', 'link' => $this->_base_url . '/exportmessages?id='.$id]]
]);
//echo '<pre>'; print_r($response); exit;
//echo '<pre>'; print_r($response); exit;
}
public function exportmessages($request) {
$id = $request->input('id');
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all_messages', ['id' => $id]);
$headers = ['Name', 'Phone', 'Email', 'Type', 'Is Sent', 'Sent Time', 'Is Read', 'Read Time'];
$exceldata[] = $headers;
foreach($response->data->messages as $message) {
$row = [];
$row[] = isset($message->name) ? $message->name : '-';
$row[] = isset($message->phone) ? $message->phone : '-';
$row[] = isset($message->email) ? $message->email : '-';
$row[] = isset($message->type) ? $message->type : '-';
$row[] = isset($message->is_sent) ? $message->is_sent : '-';
$row[] = isset($message->sent_time) ? $message->sent_time : '-';
$row[] = isset($message->is_read) ? $message->is_read : '-';
$row[] = isset($message->read_time) ? $message->read_time : '-';
$exceldata[] = $row;
}
return Excel::download(new InvoicesExport($exceldata), 'message.xlsx');
}
}