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 '
'; 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 '
'; 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 '
'; print_r($response); exit;

        //echo '
'; 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');
    }
}