middleware('auth'); $this->_service = 'metric'; $this->_module = 'metric_view'; $this->_viewname = 'metricview'; $this->_title = 'Metric View'; $this->_base_url = '/metricview'; } public function list(Request $request) { $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all'); foreach($response->data->items as &$item) { $item->validity_start = date("m/d/Y", strtotime($item->validity_start)); $item->validity_end = date("m/d/Y", strtotime($item->validity_end)); } $fields = $this->get_list_fields(); return $this->view('list')->with([ 'title' => $this->_title, 'fields' => $fields, 'base_url' => $this->_base_url, 'items' => $response->data->items, 'buttons' => $this->get_list_buttons() ]); } protected function get_list_fields(){ return [ 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ], 'name' => ['title' => 'Name', 'type' => 'text'], 'type' => ['title' => 'Type', 'type' => 'text'], 'validity_start' => ['title' => 'Validity start', 'type' => 'text'], 'validity_end' => ['title' => 'Validity end', 'type' => 'text'], 'agg_type' => ['title' => 'Aggregation type', 'type' => 'text'], 'status' => ['title' => 'Status', 'type' => 'select'], ]; } protected function get_list_buttons() { return [ ['title' => 'Add A vs B', 'link' => $this->_base_url.'/addnew?type=verses' ], ['title' => 'Add Grouped', 'link' => $this->_base_url.'/addnew?type=grouped' ], ['title' => 'Add Simple', 'link' => $this->_base_url.'/addnew?type=simple' ] ]; } protected function get_form_fields($type, $values){ $metrics = $this->getlambda('get', 'metric', 'metric', 'get_all'); $metrics_dd = []; foreach($metrics->data->items as $metric){ $metrics_dd[$metric->id] = $metric->name; } // $domain = LambdaRequest::signedrequest('get', 'ums', 'domain/get_one'); // //echo '
'; print_r($domain); exit;
        // $designations_dd = [];
        // foreach($domain->data->item->designations as $designation){
        //     $designations_dd[$designation] = $designation;
        // }
        //echo '
'; print_r($values); exit;

        $roles = $this->getlambda('get', 'ums', 'roles', 'dropdown');
        $roles_dd = [];
        foreach($roles->data->items as $role){
            $roles_dd[$role->id] = $role->name;
        }

        $coattr = $this->getlambda('get', 'contact', 'contactattribute', 'get_all');
        $coattr_dd = [];
        foreach($coattr->data->items as $coatt){
            $coattr_dd[$coatt->code] = $coatt->attribute;
        }
        //echo '
'; print_r($coattr_dd); exit;
        $fields = [
            'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
            //'type' => ['title' => 'Type', 'type' => 'select', 'required' => true, 'values' => ['simple' => 'Simple', 'grouped' => 'Grouped', 'verses' => 'A vs B'] ],
            'validity_start' => ['title' => 'Validity start', 'type' => 'date', 'required' => true],
            'validity_end' => ['title' => 'Validity end', 'type' => 'date', 'required' => true],
            'designations' => ['title' => 'Publish to Roles', 'type' => 'multiselect', 'values' => $roles_dd, 'required' => true]
                ];

        if(($type == 'new' && $this->_request->input('type') == 'simple') || ($type == 'edit' && $values->type == 'simple' ) ) {
            $fields['metric'] = ['title' => 'Choose Metric', 'type' => 'select', 'required' => true, 'values' => $metrics_dd ];
            $fields['display_unit'] = ['title' => 'Display Unit', 'type' => 'text', 'required' => true];
            if($type == 'edit') {
                $values->metric = $values->metrics[0]->metric;
                $values->display_unit = $values->metrics[0]->display;
                unset($values->metrics);
            }
        } else if(($type == 'new' && $this->_request->input('type') == 'verses') || ($type == 'edit' && $values->type == 'verses' ) ) {
            $fields['metric[0]'] = ['title' => 'Choose Metric 1', 'type' => 'select', 'required' => true, 'values' => $metrics_dd ];
            $fields['display_unit[0]'] = ['title' => 'Metric 1 Display Unit', 'type' => 'text', 'required' => true];
            $fields['metric[1]'] = ['title' => 'Choose Metric 2', 'type' => 'select', 'required' => true, 'values' => array_merge($metrics_dd, ['fixed' => 'Fixed Value']) ];
            $fields['display_unit[1]'] = ['title' => 'Metric 2 Display Unit', 'type' => 'text', 'required' => true];
            $fields['fixed_metric'] = ['title' => 'Fixed Metric value if selected', 'type' => 'text', 'required' => true];
            if($type == 'edit') {
                $values->{'metric[0]'} = $values->metrics[0]->metric;
                $values->{'display_unit[0]'} = $values->metrics[0]->display;
                $values->{'metric[1]'} = $values->metrics[1]->metric;
                $values->{'display_unit[1]'} = $values->metrics[1]->display;
                unset($values->metrics);
            }

        } else {
            $fields['metrics'] = ['title' => 'Choose Metric', 'type' => 'mapping', 'required' => true, 'metrics' => $metrics_dd, 'types' => ['unit' => 'Units', 'count' => 'Count'] , 'fullwidth' => true ];
        }
        
        $fields = array_merge($fields,
            [   
            'operation' => ['title' => 'Operation', 'type' => 'select', 'required' => true, 'values' => ['sum' => 'Sum', 'avg' => 'Avg', 'value_count' => 'Count'] ],
            'agg_type' => ['title' => 'Aggregation Type', 'type' => 'select', 'required' => true, 'values' => ['individual' => 'Individual', 'team' => 'Team'] ],

            'graphical_views' => ['title' => 'Graphical views', 'type' => 'multiselect', 'values' => ['progress' => 'Progress', 'percentile' => 'Percentile', 'pie' => 'Pie chart', 'bar' => 'Bar chart', 'line' => 'Line chart'] ],
            'details_views' => ['title' => 'Details views', 'type' => 'multiselect', 'required' => true, 'values' => ['tabular' => 'Tabular', 'contacts' => 'Doctor View', 'incremental' => 'Incremental View'] ],
            'trend_views' => ['title' => 'Trend views', 'type' => 'multiselect', 'values' => ['bar' => 'Bar chart', 'line' => 'Line chart', 'tabular' => 'Tabular'] ],
            'leaderboard_views' => ['title' => 'Leaderboard views', 'type' => 'multiselect', 'values' => ['leaderboard' => 'Leaderboard View'] ],
            'contacts_views' => ['title' => 'Doctor views', 'type' => 'multiselect', 'values' => ['contacts' => 'Doctor View'] ],
            'doctor_view_name' => ['title' => 'Enter Doctor View Name', 'type' => 'text', 'required' => false ],
            
            'intervals' => ['title' => 'Intervals', 'type' => 'multiselect', 'required' => true, 'values' => ['yearlycy' => 'Calender Year', 'yearlyfy' => 'Financial Year', 'monthly' => 'Monthly', 'weekly' => 'Weekly', 'daily' => 'Daily'] ],

            'default_interval' => ['title' => 'Default Interval', 'type' => 'select', 'required' => true, 'values' => ['month-0' => 'This Month','month-1' => 'Last Month','month-3' => 'Last 3 Months','month-6' => 'Last 6 Months','month-12' => 'Last 12 Months','day-0' => 'Today','day-1' => 'Yesterday','day-7' => 'Last 7 Days','day-30' => 'Last 30 Days','week-0' => 'This week','week-1' => 'Last week','week-2' => '-2 week','week-3' => '-3 week','week-4' => '-4 week','yearfy-0' => 'This Financial Year','yearfy-1' => 'Last Financial Year','yearcy-0' => 'This Calender Year','yearcy-1' => 'Last Calender Year'] ],
            'widget_sort_order' => ['title' => 'Widget Sort Order', 'type' => 'number', 'required' => true],
            'doctor_type' => ['title' => 'Doctor Type', 'type' => 'text', 'required' => false],
            'combined_metrics' => ['title' => 'Combined Metrics (if any)', 'type' => 'combined_metrics', 'fullwidth' => true ],

            'report_roles' => ['title' => 'Data Report from Roles', 'type' => 'multiselect', 'values' => $roles_dd, 'required' => true],

            'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
            'show_positions' => ['title' => 'Show Position in Reports', 'type' => 'select', 'required' => true, 'values' => ['Yes' => 'Yes', 'No' => 'No'] ],
            
            'contact_attributes' => ['title' => 'Include Doctor Attributes', 'type' => 'multiselect', 'values' => $coattr_dd],
        ]);

        return $fields;
    }

    protected function _beforesave($type, $request) {
        $data = $request->except('_token');
        // echo '
'; print_r($data); exit;

        $mainSortOrder = isset($data['widget_sort_order']) && !is_array($data['widget_sort_order'])
        ? (int) $data['widget_sort_order']
        : 0;

        $data['metrics'] = [];
        if($request->input('type') == 'simple' || !is_array($data['metric']) ) {
            $data['metrics'][] = ['metric' => $data['metric'], 'display' => $data['display_unit'] ];

        } else {
            foreach($data['metric'] as $k => $metric) {
                $data['metrics'][] = [
                    'metric' => $metric, 
                    'display' => $data['display_unit'][$k], 
                    'sort_order' => isset($data['sort_order'][$k]) ? $data['sort_order'][$k] : 0, 
                    'list_view' => isset($data['list_view'][$k]) ? $data['list_view'][$k] : 'yes',
                    'weight' =>  isset($data['weight'][$k]) ? $data['weight'][$k] : 1,
                ];
            }
        }

        $combined_metrics = [];
        if(isset($data['combined_metrics']) && sizeof($data['combined_metrics']) > 0) {
            foreach($data['combined_metrics']['type'] as $i => $v) {
                $combined_metrics[] = ['type' => $v, 'title' => $data['combined_metrics']['title'][$i], 'fields' => isset($data['combined_metrics']['fields'][$i]) ? $data['combined_metrics']['fields'][$i] : '', 'list_view' => isset($data['combined_metrics']['list_view'][$i]) ? $data['combined_metrics']['list_view'][$i] : 'yes' ];
            }
        }
        $data['combined_metrics'] = json_encode($combined_metrics);
        $data['widget_sort_order'] = $mainSortOrder;
        unset($data['metric']);
        unset($data['display_unit']);
        unset($data['sort_order']);
        unset($data['weight']);
        //echo '
'; print_r($data); exit;
        return $data;
    }

    protected function _beforeform($type, $values) {
        if ($type == 'edit') {
            $values->designations = explode('#', $values->designations);
            if(isset($values->report_roles)) {
                $values->report_roles = explode('#', $values->report_roles);
            } else {
                $values->report_roles = [];
            }
            
            if(!isset($values->combined_metrics)) {
                $values->combined_metrics = '[]';
            }
            if(!isset($values->sort_order)) {
                $values->sort_order = 0;
            }

            $metrics = $values->metrics;
            usort($metrics, fn($a, $b) => ((isset($a->sort_order) && isset($b->sort_order)) &&  $a->sort_order > $b->sort_order) );
            $values->metrics = $metrics;

            //echo '
'; print_r($metrics); exit;

            $values->validity_start = date("m/d/Y", strtotime($values->validity_start) + 19800 );
            $values->validity_end = date('m/d/Y', strtotime($values->validity_end) + 19800);
        }
        //echo '
'; print_r($values); exit;
        return $values;
    }
}