Ejemplo n.º 1
0
 /**
  * Returns combined filters values High/Medium Priority for Insights filters
  *
  * @param int $brand_id
  * @param int $category_id
  * @param array $get_filters this parameter contain total count of SKU's which need to calculate percent value
  * @return array
  * @author Pavel Klyagin <*****@*****.**>
  */
 protected function getPriorityFiltersValues($brand_id = 0, $category_id = 0, $get_filters = array())
 {
     $this->load->model('settings_model');
     $this->load->model('filters_values');
     $this->load->model('product_category_model');
     $this->load->model('filters_to_result');
     $user_id = $this->ion_auth->get_user_id();
     $selected_filters = json_decode($this->input->post('filters'));
     $total_count = 1;
     if (isset($get_filters) && isset($get_filters['filters_values'])) {
         foreach ($get_filters['filters_values'] as $value) {
             if (isset($value->filter_id) && in_array($value->filter_id, array(63, 1))) {
                 $total_count = $value->dec_value;
                 break;
             }
         }
     }
     $noAjax = false;
     if ($brand_id == 0 && $category_id == 0) {
         $noAjax = true;
     }
     $priority_filters = AssessHelper::getPrioityFiltersList($user_id, true);
     $results = [];
     foreach ($selected_filters as $filter_id) {
         if (isset($priority_filters[$filter_id])) {
             $enabled_filters = $priority_filters[$filter_id];
             // save POST filters
             $selected_filters = $_POST['filters'];
             $_POST['filters'] = [];
             // get all batch filters
             $filters_values = $this->GetFilters_post($brand_id, $category_id, $noAjax);
             // restore POST filters
             $_POST['filters'] = $selected_filters;
             $total = 0;
             // get total issues from combined VAD enabled filters
             foreach ($filters_values['filters_values'] as $filter) {
                 if (in_array($filter->filter_id, $enabled_filters)) {
                     $total += (int) $filter->dec_value;
                 }
             }
             /** Count traffic data for unique filters (Priority SKUs and Issues) **/
             $filter_id_prefix = substr($filter_id, 0, 4);
             $visits = $this->GetTrafficData_get($enabled_filters, $brand_id, $category_id);
             /** @var  $unique_sku_count - Priority Unique SKUs **/
             $unique_sku_count = $this->VadGetUniqueSkusTotal_post($enabled_filters, $brand_id, $category_id);
             if ($filter_id_prefix == 'skus') {
                 $dec_value = $unique_sku_count;
             } else {
                 $dec_value = $total;
             }
             $results[] = (object) ['filter_id' => $filter_id, 'filter_name' => $filter_id, 'dec_value' => $dec_value, 'combination_id' => '', 'sign' => '', 'value' => '', 'percent_value' => round($unique_sku_count / $total_count * 100), 'data' => '', 'visit_number' => $visits->traffic_data_avg ? $visits->traffic_data_avg : 0];
         }
     }
     return $results;
 }
Ejemplo n.º 2
0
 /**
  * Creating files for each brand/category and filter pair. Returning link to zip file
  */
 public function exportBrandsAndFilters()
 {
     $this->load->model('products_filters');
     $chronicle_str = $this->input->post('chronicle');
     $superFilter = $this->input->post('super_filter');
     $filters = $this->input->post('filters');
     sort($filters);
     $filters_str = implode(',', $filters);
     // If chronicle or filters are empty - returning failure
     if (empty($chronicle_str) || empty($filters)) {
         return $this->output->set_content_type('application/json')->set_output(json_encode(array('success' => FALSE, 'message' => 'Not initialized')));
     }
     $brands = $this->input->post('brands');
     // Brands should be only numeric
     foreach ($brands as $i => &$val) {
         if (!is_numeric($val)) {
             unset($brands[$i]);
         }
     }
     sort($brands);
     $categories = $this->input->post('categories');
     // Categories should be only numeric
     foreach ($categories as $i => &$val) {
         if (!is_numeric($val)) {
             unset($categories[$i]);
         }
     }
     sort($categories);
     // If we don't have category and brands - returning failure
     if (empty($brands) && empty($categories)) {
         $this->output->set_content_type('application/json')->set_output(json_encode(array('success' => FALSE, 'message' => 'Empty data')));
     }
     // Initial data
     $result = array('success' => FALSE);
     $prority_filters = array();
     if ($this->session->userdata['dateformat'] == 1) {
         $date = date('m-d-Y_H-i');
     } elseif ($this->session->userdata['dateformat'] == 2) {
         $date = date('d-m-Y_H-i');
     }
     $path = 'webroot/temp/';
     // Getting name for each filter_id. Instead of 'skus_fewer_50_product_content' we use 'skusFewer50ProductContent'
     $filter_names = array();
     $this->load->model('filters_values');
     foreach ($filters as $filter_key => &$filter_id) {
         if ($filter_id == 'medium_priority_filter' || $filter_id == 'high_priority_filter' || $filter_id == 'skus_medium_priority_filter' || $filter_id == 'skus_high_priority_filter') {
             unset($filters[$filter_key]);
             $prority_filters[$filter_id] = array();
             $filter_name = str_replace(array('skus_', '_filter'), '', $filter_id);
         } else {
             $filter_id = (int) $filter_id;
             $filter_name = $this->products_filters->get_filter_name_by_filter_id($filter_id);
         }
         $filter_names[$filter_id] = str_replace(' ', '', ucwords(str_replace('_', ' ', $filter_name)));
     }
     if (count($prority_filters)) {
         $prority_filters = array_intersect_key(AssessHelper::getPrioityFiltersList($this->ion_auth->get_user_id(), true), $prority_filters);
     }
     // Getting batch information
     $this->load->model('batches_model');
     $batch = $this->batches_model->getBatchByChronicle($chronicle_str);
     // Decoding chronicle if that was json string
     $chronicle = json_decode($chronicle_str);
     sort($chronicle);
     if (is_int($chronicle)) {
         $chronicle = (string) $chronicle;
     }
     // Checking if we have category or brands filters
     $result = array('success' => TRUE);
     $this->load->model('assess_results');
     $this->load->library('zip');
     $this->load->helper('csv');
     $this->load->helper('assess');
     if ($categories || $brands) {
         // Getting URLs for all pairs
         $data = $this->assess_results->getExportBrandsCategoriesFilters($chronicle, $brands, $categories, $filters, $superFilter, $prority_filters);
         // Loading helper with functions "toAscii" and "getUniqueFilename"
         // Creating in memory zip files for each pair
         foreach ($data as $brand => &$val) {
             $datas_for_csv = array();
             $columns_for_csv = array();
             $max_length = 0;
             // In zip russian symbols looks ok in CP866 encoding
             $name = str_replace(array(' ', '_', '-'), '_', iconv('UTF-8', 'CP866', $batch->title) . '_' . $brand . '.csv');
             foreach ($val as $filter_id => &$rows) {
                 array_unshift($rows, $filter_names[$filter_id]);
                 if (count($rows) > $max_length) {
                     $max_length = count($rows);
                 }
                 $columns_for_csv[] = $rows;
             }
             foreach ($columns_for_csv as $key => $value) {
                 for ($i = 0; $i < $max_length; ++$i) {
                     if (!isset($datas_for_csv[$i])) {
                         $datas_for_csv[$i] = array();
                     }
                     $v = isset($value[$i]) ? $value[$i] : '';
                     array_push($datas_for_csv[$i], $v);
                 }
             }
             $this->zip->add_data(iconv('UTF-8', 'CP866', $name), array_to_csv($datas_for_csv, '', false));
         }
     }
     /**
      *for bug 1661
      *@author Hermine Hakobyan
      **/
     $batch_all_data = $this->assess_results->getExportBrandsCategoriesFilters($chronicle, array(), array(), $filters, $superFilter, $prority_filters);
     foreach ($batch_all_data as $brand => &$val) {
         $datas_for_csv = array();
         $columns_for_csv = array();
         $max_length = 0;
         // In zip russian symbols looks ok in CP866 encoding
         $name = str_replace(array(' ', '_', '-'), '_', iconv('UTF-8', 'CP866', $batch->title) . '.csv');
         foreach ($val as $filter_id => &$rows) {
             array_unshift($rows, $filter_names[$filter_id]);
             if (count($rows) > $max_length) {
                 $max_length = count($rows);
             }
             $columns_for_csv[] = $rows;
         }
         foreach ($columns_for_csv as $key => $value) {
             for ($i = 0; $i < $max_length; ++$i) {
                 if (!isset($datas_for_csv[$i])) {
                     $datas_for_csv[$i] = array();
                 }
                 $v = isset($value[$i]) ? $value[$i] : '';
                 array_push($datas_for_csv[$i], $v);
             }
         }
         $this->zip->add_data(iconv('UTF-8', 'CP866', $name), array_to_csv($datas_for_csv, '', false));
     }
     //End of bug 1661
     $zip_file = $path . getUniqueFilename($path, $batch->title . '_' . $date, 'zip');
     // Saving zip on disk
     $this->zip->archive($zip_file);
     // Getting current user data
     $user = $this->ion_auth->get_user_data();
     // Sending email
     $this->load->library('email');
     $this->email->from('*****@*****.**', 'Administrator');
     $this->email->to($user['email']);
     $this->email->subject('Export completed');
     $this->email->message('Your export was completed succesfully. You can download it here ' . base_url($zip_file));
     $this->email->send();
     // Adding zip fullpath to result
     $result['link'] = base_url($zip_file);
     // Zipping files
     $this->output->set_content_type('application/json')->set_output(json_encode($result));
 }