1
Changeset 985 – MultiMag

Changeset 985


Ignore:
Timestamp:
Sep 13, 2018, 3:43:36 AM (2 weeks ago)
Author:
blacklight
Message:
  • Добавлены настройки отображения колонок в прайс-листах (пока только xls формат)
  • Добавлен предварительный просмотр прайса в рассылках прайс-листов
Location:
trunk
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/common/core.common.php

    r982 r985  
    1818//
    1919
    20 define("MULTIMAG_REV", "982");
     20define("MULTIMAG_REV", "985");
    2121define("MULTIMAG_VERSION", "0.2.".MULTIMAG_REV);
    2222
  • trunk/common/pricesendaction.php

    r963 r985  
    4343                throw new Exception('Недопустимый интервал запуска задачи!');
    4444        }
    45         $res = $db->query("SELECT `id`, `name`, `period`, `format`, `use_zip`, `price_id`, `filters`, `lettertext`"
     45        $res = $db->query("SELECT `id`, `name`, `period`, `format`, `use_zip`, `price_id`, `options`, `lettertext`"
    4646            . " FROM `prices_delivery` WHERE `period`='$period'");
    4747        while($line=$res->fetch_assoc()) {
    48             $line['filters'] = json_decode($line['filters'], true);
     48            $line['options'] = json_decode($line['options'], true);
    4949            $line['subscribers'] = array();
    5050            $cr = $db->query("SELECT `agent_contacts`.`id`, `agents`.`name`, `agent_contacts`.`value` AS `email`"
     
    6868            $psender->setPriceId($line['price_id']);
    6969            $psender->setText($line['lettertext']);
    70             $psender->setFilters($line['filters']);
     70            $psender->setOptions($line['options']);
    7171            $psender->setContactList($line['subscribers']);
    7272            $psender->run();
  • trunk/common/pricesender.php

    r963 r985  
    2222/// Модуль рассылки прайс-листов
    2323class priceSender {
    24 
    25     protected $filters;
     24    protected $options;
    2625    protected $text;
    2726    protected $format;
     
    3837    }
    3938
    40     public function setFilters($filters) {
    41         $this->filters = $filters;
     39    public function setOptions($options) {
     40        $this->options = $options;
    4241    }
    4342   
     
    6665        $this->prepareEmail();
    6766        $this->sendEmails();
     67    }
     68   
     69    public function out() {
     70        $this->preparePriceList();
     71        if($this->zip) {
     72            header("Content-type: application/zip");
     73            header("Content-Disposition: attachment; filename=\"price.zip\"");
     74        }
     75        else {
     76            header("Content-type: application/vnd.ms-excel");
     77            header("Content-Disposition: attachment; filename=\"price.xls\"");
     78        }
     79        header("Expires: 0");
     80        header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
     81        header("Pragma: public");
     82        echo $this->price_content;
    6883    }
    6984   
     
    8196        }
    8297       
    83         $pricewriter->setCost($this->price_id);
    84         if( is_array($this->filters)) {
    85             if( isset($this->filters['groups_only'])
    86                 && $this->filters['groups_only'] && is_array($this->filters['groups_list']))    {
    87                     $pricewriter->setViewGroups($this->filters['groups_list']);
    88             }
    89             if( isset($this->filters['count']) ) {
    90                 $pricewriter->setCountFilter($this->filters['count']);
    91             }
    92             if( isset($this->filters['vendor']) ) {
    93                 $pricewriter->setVendorFilter($this->filters['vendor']);
    94             }
    95             if( isset($this->filters['view_pgroup']) ) {
    96                 $pricewriter->showGroupName($this->filters['view_pgroup']);
    97             }
    98             if( isset($this->filters['view_vendor']) ) {
    99                 $pricewriter->showProizv($this->filters['view_vendor']);
     98        $pricewriter->setPriceId($this->price_id);
     99        if( is_array($this->options)) {
     100            if(is_array($this->options['filter'])) {
     101                $f = $this->options['filter'];
     102                if( isset($f['groups_only']) && $f['groups_only'] && is_array($f['groups_list'])) {
     103                    $pricewriter->setGroupsFilter($f['groups_list']);
     104                }
     105                if( isset($f['count']) ) {
     106                    $pricewriter->setCountFilter($f['count']);
     107                }
     108                if( isset($f['vendor']) ) {
     109                    $pricewriter->setVendorFilter($f['vendor']);
     110                }
     111            }
     112            if(is_array($this->options['modname'])) {
     113                $mn = $this->options['modname'];
     114                if( isset($mn['pgroup']) ) {
     115                    $pricewriter->showGroupName($mn['pgroup']);
     116                }
     117                else {
     118                    $pricewriter->showGroupName(false);
     119                }
     120                if( isset($mn['vendor']) ) {
     121                    $pricewriter->showProizv($mn['vendor']);
     122                }
     123                else {
     124                    $pricewriter->showProizv(false);
     125                }
     126            }
     127            else {
     128                $pricewriter->showGroupName(false);
     129                $pricewriter->showProizv(false);
     130            }
     131            if(is_array($this->options['columns'])) {
     132                $pricewriter->setColumnList($this->options['columns']);
    100133            }
    101134        }
  • trunk/common/pricewriter/basepricewriter.php

    r969 r985  
    2222/// Базовый класс формирования прайс-листов
    2323class BasePriceWriter {
    24     protected $view_proizv;         ///< Отображать ли наименование производителя
    25     protected $view_groupname;      ///< Отображать ли печатное имя группы
    26     protected $view_groups;         ///< Группы, которые надо отображать. Массив.
     24    protected $mn_vendor;           ///< Модификатор наименования + наименование производителя
     25    protected $mn_pgroup;           ///< Модификатор наименования + печатное имя группы
     26    protected $show_groups;         ///< Группы, которые надо отображать. Массив.
    2727    protected $column_count;        ///< Кол-во колонок в прайсе
    2828    protected $db;                  ///< mysqli коннектор к нужной базе
     
    3232    protected $show_vc = false; ///< Колонока с наименованием производителя
    3333    protected $show_vn = false; ///< Колонока с наименованием производителя
     34    protected $column_list;     ///< Список колонок для отображения
     35    protected $price_id;         ///< Идентификатор цены
    3436
    3537    /// Конструктор
     
    3739    public function __construct($db) {
    3840        $this->db = $db;
    39         $this->column_count = 2;
    40         $this->view_proizv = 0;
    41         $this->cost_id = 1;
    42         $this->view_groups = false;
    43         $this->view_groupname = true;
    44         $this->show_vc = \cfg::get('site', 'price_show_vc', false);
    45         $this->show_vn = \cfg::get('site', 'price_show_vn', false);
     41        $this->column_list = ['id'];
     42        if(\cfg::get('site', 'price_show_vc', false)) {
     43            $this->column_list[] = 'vc';
     44        }
     45        $this->column_list[] = 'name';       
     46        if(\cfg::get('site', 'price_show_vn', false)) {
     47            $this->column_list[] = 'vendor';
     48        }
     49        $this->column_list[] = 'count';
     50        $this->column_list[] = 'price';
     51       
     52        $this->column_count = 1;
     53        $this->mn_vendor = false;
     54        $this->mn_pgroup = true;     
     55        $this->price_id = 1;
     56        $this->show_groups = false;       
    4657    }
    4758
     
    6475    /// @param $visible true - отображать , false - не отображать
    6576    public function showProizv($visible = 1) {
    66         $this->view_proizv = $visible;
     77        $this->mn_vendor = $visible;
    6778    }
    6879
     
    7081    /// @param $visible true - отображать , false - не отображать
    7182    public function showGroupName($visible = 1) {
    72         $this->view_groupname = $visible;
     83        $this->mn_pgroup = $visible;
    7384    }
    7485   
    75     /// Включает режим отображения в прайс-листе только заданных групп товаров
     86    /// Включает фильтр по группам номенклатуры
    7687    /// @param $groups Массив с id групп, которые должны быть включены в прайс-лист
    77     public function setViewGroups($groups) {
    78         $this->view_groups = $groups;
     88    public function setGroupsFilter($groups) {
     89        $this->show_groups = $groups;
    7990    }
    8091
     
    91102        }
    92103    }
     104   
     105    /**
     106     * Устанавливает список колонок для отображения в прайс-листе
     107     * @param array $clist Массив с идентификаторами колонок
     108     */   
     109    public function setColumnList($clist) {       
     110        $this->column_list = $clist;
     111    }
    93112
    94113    /// Устанавливает цену, которая должна быть отображена в прайс-листе
    95114    /// @param $cost Id отображаемой цены
    96     public function setCost($cost = 1) {
    97         $this->cost_id = $cost;
    98         settype($this->cost_id, "int");
     115    public function setPriceId($price_id = 1) {
     116        $this->price_id = $price_id;
     117        settype($this->price_id, "int");
    99118    }
    100119   
  • trunk/common/pricewriter/csv.php

    r982 r985  
    8888                continue;
    8989            }
    90             if (is_array($this->view_groups)) {
    91                 if (!in_array($nxt[0], $this->view_groups)) {
     90            if (is_array($this->show_groups)) {
     91                if (!in_array($nxt[0], $this->show_groups)) {
    9292                    continue;
    9393                }
     
    165165            }
    166166
    167             $c = $pc->getPosSelectedPriceValue($nxt['id'], $this->cost_id, $nxt);
     167            $c = $pc->getPosSelectedPriceValue($nxt['id'], $this->price_id, $nxt);
    168168            if ($c == 0) {
    169169                continue;
    170170            }
    171             if (($this->view_proizv) && ($nxt['proizv'])) {
     171            if (($this->mn_vendor) && ($nxt['proizv'])) {
    172172                $pr = " (" . $nxt['proizv'] . ")";
    173173            } else {
  • trunk/common/pricewriter/html.php

    r982 r985  
    7777        echo"</center><table><tr>";
    7878        for ($cur_col = 0; $cur_col < $this->column_count; $cur_col++) {
    79             if ($this->show_vc) {
     79            if ( isset($this->column_list['vc']) ) {
    8080                echo"<th class='cost'>Код</th>";
    8181            }
     
    8383        }
    8484        echo"</tr>";
    85         if ($this->show_vc) {
     85        if ( isset($this->column_list['vc']) ) {
    8686            $this->span = $this->column_count * 3;
    8787        } else {
     
    102102                continue;
    103103            }
    104             if (is_array($this->view_groups)) {
    105                 if (!in_array($nxt[0], $this->view_groups)) {
     104            if (is_array($this->show_groups)) {
     105                if (!in_array($nxt[0], $this->show_groups)) {
    106106                    continue;
    107107                }
     
    157157                }
    158158            }
    159             $c = $pc->getPosSelectedPriceValue($nxt['id'], $this->cost_id, $nxt);
     159            $c = $pc->getPosSelectedPriceValue($nxt['id'], $this->price_id, $nxt);
    160160            if ($c == 0) {
    161161                continue;
    162162            }
    163163            $name = $nxt['name'];
    164             if($this->view_groupname) {
     164            if($this->mn_pgroup) {
    165165                $name = $group_name .' '.$name;
    166166            }
    167             if ($this->show_vc) {
     167            if ( isset($this->column_list['vc']) ) {
    168168                echo"<td>" . html_out($nxt['vc']) . "</td>";
    169169            }
  • trunk/common/pricewriter/pdf.php

    r969 r985  
    7979        $this->pdf->Cell(0, 4, $str, 0, 1, 'C');
    8080
    81         if (is_array($this->view_groups)) {
     81        if (is_array($this->show_groups)) {
    8282            $this->pdf->Ln(3);
    8383            $this->pdf->SetFont('', '', 14);
     
    112112        $this->pdf->numCols = $CONFIG['site']['price_col_cnt'];
    113113
    114         if ($this->show_vc) {
     114        if ( isset($this->column_list['vc']) ) {
    115115            $str = iconv('UTF-8', 'windows-1251', 'Код');
    116116            $this->pdf->AddCol('vc', $CONFIG['site']['price_width_vc'], $str, '');
     
    125125            'color2' => array(255, 255, 210),
    126126            'padding' => 1,
    127             'cost_id' => $this->cost_id);
    128         if (is_array($this->view_groups)) {
    129             $prop['groups'] = $this->view_groups;
     127            'cost_id' => $this->price_id);
     128        if (is_array($this->show_groups)) {
     129            $prop['groups'] = $this->show_groups;
    130130        }
    131131
    132132
    133133
    134         if ($this->view_proizv) {
     134        if ($this->mn_vendor) {
    135135            $proizv = '`doc_base`.`proizv`';
    136136        } else {
  • trunk/common/pricewriter/xls.php

    r982 r985  
    2424    var $workbook;  // книга XLS
    2525    var $worksheet;  // Лист XLS
    26     var $line;  // Текущая строка
     26    protected $cur_row;  // Номер теекущей строки
     27    protected $cur_col;  ///< Номер текущей колонки
    2728    var $format_line; // формат для строк наименований прайса
    28     var $a_format_line; // формат для строк наименований прайса для серой цены
     29    var $format_greyprice; // формат для строк наименований прайса для серой цены
    2930    var $format_group; // формат для строк групп прайса
    3031    protected $tmp_filename; // Имя временного файла для генерации прайса
    3132
    3233    /// Конструктор
    33 
    3434    function __construct($db) {
    3535        parent::__construct($db);
    36         $this->line = 0;
     36        $this->cur_row = 0;
    3737    }
    3838
     
    8686
    8787        // для серых цен
    88         $this->a_format_line = array();
    89         $this->a_format_line[0] = & $this->workbook->addFormat();
    90         $this->a_format_line[0]->setColor('gray');
    91         $this->a_format_line[0]->setFgColor(26);
    92         $this->a_format_line[0]->SetSize(12);
    93         $this->a_format_line[1] = & $this->workbook->addFormat();
    94         $this->a_format_line[1]->setColor('gray');
    95         $this->a_format_line[1]->setFgColor(41);
    96         $this->a_format_line[1]->SetSize(12);
     88        $this->format_greyprice = array();
     89        $this->format_greyprice[0] = & $this->workbook->addFormat();
     90        $this->format_greyprice[0]->setColor('gray');
     91        $this->format_greyprice[0]->setFgColor(26);
     92        $this->format_greyprice[0]->SetSize(12);
     93        $this->format_greyprice[1] = & $this->workbook->addFormat();
     94        $this->format_greyprice[1]->setColor('gray');
     95        $this->format_greyprice[1]->setFgColor(41);
     96        $this->format_greyprice[1]->SetSize(12);
    9797
    9898        $this->format_group = array();
     
    138138        // Настройка ширины столбцов
    139139
    140         $name_w = 120;
    141         if(\cfg::get('site', 'price_show_vc', false)) {
    142             $name_w -= 8;
    143         }
    144         if($this->show_vn) {
     140        $name_w = 80;
     141        if( isset($this->column_list['vc']) ) {
     142            $name_w -= 10;
     143        }
     144        if( isset($this->column_list['vendor']) ) {
    145145            $name_w -= 12;
    146146        }
    147         $column_width = [8];
    148         $headers = ["N"];
    149         if($this->show_vc) {
    150             $column_width[] = 8;
    151             $headers[] = "Код";
    152         }
    153         $column_width[] = $name_w;
    154         $headers[] = "Наименование";
    155         if($this->show_vn) {
    156             $column_width[] = 12;
    157             $headers[] = "Произв.";
    158         }
    159         $column_width[] = 15;
    160         $headers[] = "Наличие";
    161         $column_width[] = 15;
    162         $headers[] = "Цена";
     147        if($this->mn_pgroup) {
     148            $name_w += 30;
     149        }
     150        if($this->mn_vendor) {
     151            $name_w += 10;
     152        }
    163153       
    164         foreach ($column_width as $id => $width) {
    165             $this->worksheet->setColumn($id, $id, $width);
    166         }
    167         $this->column_count = count($column_width);
     154        $col_conf = [
     155            'id' => [8, 'N'],
     156            'vc' => [10, 'Код'],
     157            'gpn' => [30, 'Категория'],
     158            'name' => [$name_w, 'Наименование'],
     159            'vendor' => [12, 'Изгот.'],
     160            'count' => [10, 'Склад'],
     161            'price' => [15, 'Цена'],
     162        ];
     163       
     164        $this->column_count = 0;
     165        foreach ($this->column_list as $id) {
     166            if(!array_key_exists($id, $col_conf)) {
     167                unset($this->column_list[$id]);
     168                continue;
     169            }
     170            $this->worksheet->setColumn($this->column_count, $this->column_count, $col_conf[$id][0]);
     171            $this->column_count++;
     172        }
    168173
    169174        if (is_array($CONFIG['site']['price_text'])) {
    170175            foreach ($CONFIG['site']['price_text'] as $text) {
    171176                $str = iconv('UTF-8', 'windows-1251', $text);
    172                 $this->worksheet->setRow($this->line, 30);
    173                 $this->worksheet->write($this->line, 0, $str, $format_title);
    174                 $this->worksheet->setMerge($this->line, 0, $this->line, $this->column_count - 1);
    175                 $this->line++;
     177                $this->worksheet->setRow($this->cur_row, 30);
     178                $this->worksheet->write($this->cur_row, 0, $str, $format_title);
     179                $this->worksheet->setMerge($this->cur_row, 0, $this->cur_row, $this->column_count - 1);
     180                $this->cur_row++;
    176181            }
    177182        }
     
    179184        $str = 'Прайс загружен с сайта http://' . $pref->site_name;
    180185        $str = iconv('UTF-8', 'windows-1251', $str);
    181         $this->worksheet->write($this->line, 0, $str, $format_info);
    182         $this->worksheet->setMerge($this->line, 0, $this->line, $this->column_count - 1);
    183         $this->line++;
     186        $this->worksheet->write($this->cur_row, 0, $str, $format_info);
     187        $this->worksheet->setMerge($this->cur_row, 0, $this->cur_row, $this->column_count - 1);
     188        $this->cur_row++;
    184189
    185190        $str = 'При заказе через сайт может быть предоставлена скидка!';
    186191        $str = iconv('UTF-8', 'windows-1251', $str);
    187         $this->worksheet->write($this->line, 0, $str, $format_info);
    188         $this->worksheet->setMerge($this->line, 0, $this->line, $this->column_count - 1);
    189         $this->line++;
     192        $this->worksheet->write($this->cur_row, 0, $str, $format_info);
     193        $this->worksheet->setMerge($this->cur_row, 0, $this->cur_row, $this->column_count - 1);
     194        $this->cur_row++;
    190195
    191196        $dt = date("d.m.Y");
     
    195200        }
    196201        $str = iconv('UTF-8', 'windows-1251', $str);
    197         $this->worksheet->write($this->line, 0, $str, $format_info);
    198         $this->worksheet->setMerge($this->line, 0, $this->line, $this->column_count - 1);
    199         $this->line++;
    200 
    201         if (is_array($this->view_groups)) {
    202             $this->line++;
     202        $this->worksheet->write($this->cur_row, 0, $str, $format_info);
     203        $this->worksheet->setMerge($this->cur_row, 0, $this->cur_row, $this->column_count - 1);
     204        $this->cur_row++;
     205
     206        if (is_array($this->show_groups)) {
     207            $this->cur_row++;
    203208            $str = 'Прайс содержит неполный список позиций, в соответствии с выбранными критериями при его загрузке с сайта.';
    204209            $str = iconv('UTF-8', 'windows-1251', $str);
    205             $this->worksheet->write($this->line, 0, $str, $format_info);
    206             $this->worksheet->setMerge($this->line, 0, $this->line, $this->column_count - 1);
    207             $this->line++;
    208         }
    209 
    210         $this->line++;
     210            $this->worksheet->write($this->cur_row, 0, $str, $format_info);
     211            $this->worksheet->setMerge($this->cur_row, 0, $this->cur_row, $this->column_count - 1);
     212            $this->cur_row++;
     213        }
     214
     215        $this->cur_row++;
    211216        $this->worksheet->write(8, 8, ' ');
    212 
    213         foreach ($headers as $id => $item) {
    214             $headers[$id] = iconv('UTF-8', 'windows-1251', $item);
    215         }
    216         $this->worksheet->writeRow($this->line, 0, $headers, $format_header);
    217         $this->line++;
     217       
     218        $headers = [];
     219        foreach ($this->column_list as $id) {
     220            $headers[] = iconv('UTF-8', 'windows-1251', $col_conf[$id][1]);
     221        }
     222        $this->worksheet->writeRow($this->cur_row, 0, $headers, $format_header);
     223        $this->cur_row++;
    218224    }
    219225
     
    230236                continue;
    231237            }
    232             if (is_array($this->view_groups)) {
    233                 if (!in_array($nxt[0], $this->view_groups)) {
     238            if (is_array($this->show_groups)) {
     239                if (!in_array($nxt[0], $this->show_groups)) {
    234240                    continue;
    235241                }
     
    237243
    238244            $str = iconv('UTF-8', 'windows-1251', $nxt[1]);
    239             $this->worksheet->write($this->line, 0, $str, $this->format_group[$level]);
    240             $this->worksheet->setMerge($this->line, 0, $this->line, $this->column_count - 1);
    241             $this->line++;
    242 
    243             $this->writepos($nxt[0], $nxt[2]);
     245            $this->worksheet->write($this->cur_row, 0, $str, $this->format_group[$level]);
     246            $this->worksheet->setMerge($this->cur_row, 0, $this->cur_row, $this->column_count - 1);
     247            $this->cur_row++;
     248
     249            $this->writePosList($nxt[0], $nxt[2]);
    244250            $this->write($nxt[0], $level + 1);
    245251        }
     
    249255    function close() {
    250256        $pref = \pref::getInstance();
    251         $this->line+=5;
    252         $this->worksheet->write($this->line, 0, "Generated from MultiMag (http://multimag.tndproject.org) via PHPExcelWriter, for http://" . $pref->site_name, $this->format_footer);
    253         $this->worksheet->setMerge($this->line, 0, $this->line, $this->column_count - 1);
    254         $this->line++;
     257        $this->cur_row+=5;
     258        $this->worksheet->write($this->cur_row, 0, "Generated from MultiMag (http://multimag.tndproject.org) via PHPExcelWriter, for http://" . $pref->site_name, $this->format_footer);
     259        $this->worksheet->setMerge($this->cur_row, 0, $this->cur_row, $this->column_count - 1);
     260        $this->cur_row++;
    255261        $str = iconv('UTF-8', 'windows-1251', "Прайс создан системой MultiMag (http://multimag.tndproject.org), специально для http://" . $pref->site_name);
    256         $this->worksheet->write($this->line, 0, $str, $this->format_footer);
    257         $this->worksheet->setMerge($this->line, 0, $this->line, $this->column_count - 1);
     262        $this->worksheet->write($this->cur_row, 0, $str, $this->format_footer);
     263        $this->worksheet->setMerge($this->cur_row, 0, $this->cur_row, $this->column_count - 1);
    258264        $this->workbook->close();
    259265        if($this->to_string) {
     
    263269        }
    264270    }
     271   
     272    /// Записать текстовое значение в ячейку текущей строки
     273    protected function writeTextCell($cell_id, $text, $format) {
     274        $text = @iconv('UTF-8', 'windows-1251', $text);
     275        $this->worksheet->write($this->cur_row, $cell_id, $text, $format);
     276    }
    265277
    266278    /// Сформировать строки прайса
    267279    /// param $group id номенклатурной группы
    268280    /// param $group_name Отображаемое имя номенклатурной группы
    269     function writepos($group = 0, $group_name = '') {
    270         global $CONFIG;
     281    function writePosList($group = 0, $group_name = '') {
    271282        $pref = \pref::getInstance();
    272283        $cnt_where = $pref->getSitePref('site_store_id') ? (" AND `doc_base_cnt`.`sklad`=" . intval($pref->getSitePref('site_store_id')) . " ") : '';
     
    286297        $pref = \pref::getInstance();
    287298        $pc->setFirmId($pref->getSitePref('default_firm_id'));
    288         while ($nxt = $res->fetch_assoc()) {
    289             if($this->vendor_filter!='' && $nxt['proizv']!=$this->vendor_filter) {
    290                 continue;
    291             }
    292             if($this->count_filter=='instock' && $nxt['cnt']<=0) {
    293                 continue;
    294             }
    295             if($this->count_filter=='intransit' && $nxt['cnt']<=0 && $nxt['transit']<=0) {
    296                 continue;
    297             }
     299        while ($line = $res->fetch_assoc()) {
     300            if($this->vendor_filter!='' && $line['proizv']!=$this->vendor_filter) {
     301                continue;
     302            }
     303            if($this->count_filter=='instock' && $line['cnt']<=0) {
     304                continue;
     305            }
     306            if($this->count_filter=='intransit' && $line['cnt']<=0 && $line['transit']<=0) {
     307                continue;
     308            }           
     309            $price = $pc->getPosSelectedPriceValue($line['id'], $this->price_id, $line);
     310            if($price == 0) {
     311                continue;
     312            }
     313           
    298314            $c = 0;
    299             $this->worksheet->write($this->line, $c++, $nxt['id'], $this->format_line[$i]); // номер
    300 
    301             if ($this->show_vc) {
    302                 $str = iconv('UTF-8', 'windows-1251', $nxt['vc']);
    303                 $this->worksheet->write($this->line, $c++, $str, $this->format_line[$i]); // код производителя
    304             }
    305            
    306             $name = $nxt['name'];
    307             if($this->view_groupname) {
    308                 $name = $group_name .' '.$name;
    309             }
    310             if($this->view_proizv && $nxt['proizv']) {
    311                 $name .= " ({$nxt['proizv']})";
    312             }
    313             $name = iconv('UTF-8', 'windows-1251', $name);
    314             $this->worksheet->write($this->line, $c++, $name, $this->format_line[$i]); // наименование
    315            
    316             if ($this->show_vn) {
    317                 $str = iconv('UTF-8', 'windows-1251', $nxt['proizv']);
    318                 $this->worksheet->write($this->line, $c++, $str, $this->format_line[$i]); // наименование производителя
    319             }
    320 
    321             $nal = $this->GetCountInfo($nxt['cnt'], $nxt['transit']);
    322             $str = iconv('UTF-8', 'windows-1251', $nal);
    323             $this->worksheet->write($this->line, $c++, $str, $this->format_exists[$i]);  // наличие - пока не отображается
    324 
    325             $cost = $pc->getPosSelectedPriceValue($nxt['id'], $this->cost_id, $nxt);
    326             if ($cost == 0) {
    327                 continue;
    328             }
    329             $str = iconv('UTF-8', 'windows-1251', $cost);
    330 
    331             $format = $this->format_line[$i];
    332            
    333             if($cce_time) {
    334                 if (strtotime($nxt['cost_date']) < $cce_time) {
    335                     $format = $this->a_format_line[$i];
     315            foreach ($this->column_list as $id) {
     316                switch ($id) {
     317                    case 'id':
     318                        $this->writeTextCell($c++, $line['id'], $this->format_line[$i]);
     319                        break;
     320                    case 'vc':
     321                        $this->writeTextCell($c++, $line['vc'], $this->format_line[$i]);
     322                        break;
     323                    case 'gpn':
     324                        $this->writeTextCell($c++, $group_name, $this->format_line[$i]);
     325                        break;
     326                    case 'name':
     327                        $name = $line['name'];
     328                        if($this->mn_pgroup && $group_name) {
     329                            $name = $group_name.' '.$name;
     330                        }
     331                        if($this->mn_vendor && $line['proizv']) {
     332                            $name .= " / {$line['proizv']}";
     333                        }
     334                        $this->writeTextCell($c++, $name, $this->format_line[$i]);
     335                        break;
     336                    case 'vendor':
     337                        $this->writeTextCell($c++, $line['proizv'], $this->format_line[$i]);
     338                        break;
     339                    case 'count':
     340                        $count = $this->GetCountInfo($line['cnt'], $line['transit']);
     341                        $this->writeTextCell($c++, $count, $this->format_exists[$i]);
     342                        break;
     343                    case 'price':
     344                        $format = $this->format_line[$i];           
     345                        if ($cce_time && strtotime($line['cost_date']) < $cce_time) {
     346                            $format = $this->format_greyprice[$i];
     347                        }                       
     348                        $this->writeTextCell($c++, $price, $format);
     349                        break;
    336350                }
    337351            }
    338 
    339             $this->worksheet->write($this->line, $c++, $str, $format);  // цена
    340 
    341             $this->line++;
     352            $this->cur_row++;
    342353            $i = 1 - $i;
    343354        }
  • trunk/web/include/modules/service/sendprice.php

    r963 r985  
    2222class sendprice extends \IModule {
    2323
    24     protected $logdata = array();
    25     protected $pers = array('daily'=>'Ежедневно', 'weekly'=>'Еженедельно','monthly'=>'Ежемесячно');
    26     protected $cnts = array('all'=>'Все', 'instock'=>'Только в наличии', 'intransit'=>'В наличии + в пути');
    27     protected $formats = array('xls','csv');
     24    protected $logdata = [];
     25    protected $pers = ['daily'=>'Ежедневно', 'weekly'=>'Еженедельно','monthly'=>'Ежемесячно'];
     26    protected $cnts = ['all'=>'Все', 'instock'=>'Только в наличии', 'intransit'=>'В наличии + в пути'];
     27    protected $formats = ['xls','csv'];
     28    protected $columns = [
     29            'id' => 'Id (внутренний уникальный артикул)',
     30            'vc' => 'Код (Артикул/код изготовителя)',
     31            'gpn' => 'Категория (Печатное наименование группы)',
     32            'name' => 'Наименование (с модификаторами)',
     33            'vendor' => 'Изготовитель', 
     34            'count' => 'Количество',
     35            'price' => 'Цена',           
     36        ];
    2837
    2938    public function __construct() {
     
    155164    public function getItem($id) {
    156165        global $db;
    157         return $db->selectRow($this->table_name, $id);
     166        $item = $db->selectRow($this->table_name, $id);
     167        if($item) {
     168            $item['options'] = json_decode($item['options'], true);
     169        }
     170        return $item;
    158171    } 
    159172   
     
    174187        $ldo = new \Models\LDO\pricenames();
    175188        $price_names = $ldo->getData();
    176         $res = $db->query("SELECT `id`, `name`, `period`, `format`, `use_zip`, `price_id`, `filters` FROM `{$this->table_name}`");
     189        $res = $db->query("SELECT `id`, `name`, `period`, `format`, `use_zip`, `price_id`, `options` FROM `{$this->table_name}`");
    177190        while($line=$res->fetch_assoc()) {
    178             $line['filters'] = json_decode($line['filters']);
     191            //$line['options'] = json_decode($line['options'], true);
    179192            $cr = $db->query("SELECT `agent_contacts`.`no_ads`"
    180193                . " FROM `prices_delivery_contact`"
     
    197210        global $tmpl;
    198211        $list = $this->getList();
    199         $tmpl->addContent("<table class='list'><tr><th>Id</th><th>Название</th><th>Периодичность</th><th>Формат</th><th>Цена</th><th>Контактов</th></tr>");
     212        $tmpl->addContent("<table class='list'><tr><th>Id</th><th>Название</th><th>Периодичность</th><th>Формат</th><th>Цена</th><th>Контактов</th><th>Тест</th></tr>");
    200213        foreach($list as $id=>$line) {
    201214            if(isset($this->pers[$line['period']])) {
     
    213226            . "<td>".html_out($line['name'])."</td><td>$p</td><td>$format</td><td>".html_out($line['price_name'])."</td>"
    214227            . "<td><a href='{$this->link_prefix}&amp;sect=vs&amp;id={$line['id']}'{$as}>{$line['contacts']}/{$line['subscribers']}</a></td>"
     228            . "<td><a href='{$this->link_prefix}&amp;sect=get&amp;id={$line['id']}'>Загрузить</a></td>"
    215229            . "</tr>");
    216230        }
     
    222236    public function editForm($id) {
    223237        global $tmpl;
     238       
    224239        $ret = "<form action='{$this->link_prefix}' method='post'>";
    225240        $ret .= "<input type='hidden' name='sect' value='save'>";
    226241
    227         $item = $this->getItem($id);
    228         $filters = array('vendor'=>'', 'count'=>'all', 'price_id'=>1);
     242        $item = $this->getItem($id);       
    229243        if ($item) {
    230244            $ret .= "<input type='hidden' name='id' value='$id'>";
    231245            $name = $this->getItemName($item);
    232246            if($name) {
    233                 $tmpl->addBreadcrumb('Правка рассылки "' . $this->getItemName($item) . '"', '');
     247                $tmpl->addBreadcrumb('Правка рассылки "' . $name . '"', '');
    234248            }
    235249            else {
    236250                $tmpl->addBreadcrumb('Правка рассылки #'.$id, '');
    237251            }
    238             $filters = json_decode($item['filters'], true);
    239            
    240252        } else {
    241253            $ret .= "<input type='hidden' name='id' value='null'>";
    242254            $tmpl->addBreadcrumb('Новая рассылка', '');
    243255        }
     256        $filter = isset($item['options']['filter']) ? $item['options']['filter'] : [];
     257        $columns = isset($item['options']['columns']) ? $item['options']['columns'] : [];   
     258           
    244259        $ret .= "<table class='list' width='600px'><tr>";
    245260       
     
    268283        $ret .= \widgets::getEscapedSelect('price_id', $ldo->getData(), $item['price_id']);
    269284        $ret .= "</td></tr>";
     285       
     286        if(!isset($filter['vendor'])) {
     287            $filter['vendor'] = '';
     288        }
    270289        $ret .= "<tr><td align='right'>Фильтр по производителю</td>"
    271             . "<td><input type='text' name='vendor' value='" . html_out($filters['vendor']) . "' style='width:95%;'></td>"
    272             . "</tr>";
    273        
    274         if(!isset($filters['count'])) {
    275             $filters['count'] = 'all';
    276         }
    277         if(!isset($filters['view_pgroup'])) {
    278             $filters['view_pgroup'] = true;
    279         }
    280         if(!isset($filters['view_vendor'])) {
    281             $filters['view_vendor'] = true;
     290            . "<td><input type='text' name='options[filter][vendor]' value='" . html_out($filter['vendor']) . "' style='width:95%;'></td>"
     291            . "</tr>";       
     292       
     293        if(!isset($filter['count'])) {
     294            $filter['count'] = 'all';
    282295        }
    283296        $ret .= "<tr><td align='right'>Фильтр по наличию</td><td>";
    284297        foreach($this->cnts as $p_id=>$p_value) {
    285             $sel = ($p_id==$filters['count'])?' checked':'';
    286             $ret .= "<label><input type='radio' name='count' value='$p_id'{$sel}>$p_value</label><br>";
     298            $sel = ($p_id==$filter['count'])?' checked':'';
     299            $ret .= "<label><input type='radio' name='options[filter][count]' value='$p_id'{$sel}>$p_value</label><br>";
    287300        }
    288301        $ret .= "</td></tr>";
    289302       
    290         if(!isset($filters['groups_only'])) {
    291             $filters['groups_only'] = false;
    292             $filters['groups_list'] = false;
     303        if(!isset($filter['groups_only'])) {
     304            $filter['groups_only'] = false;
     305            $filter['groups_list'] = false;
    293306        }
    294307        $ret .= "<tr><td align='right'>Фильтр по группам товаров</td>"
    295             . "<td>".$this->groupSelBlock($filters['groups_only'], $filters['groups_list'])."</td>"
     308            . "<td>".$this->groupSelBlock($filter['groups_only'], $filter['groups_list'])."</td>"
    296309            . "</tr>";
    297310       
    298         $pgroup_sel = ($filters['view_pgroup'])?' checked':'';
    299         $vendoe_sel = ($filters['view_vendor'])?' checked':'';
    300         $ret .= "<tr><td align='right'>Настройки отображения</td>"
     311        $pgroup_mn_sel = (isset($item['options']['modname']['pgroup']))?' checked':'';
     312        $vendor_mn_sel = (isset($item['options']['modname']['vendor']))?' checked':'';
     313        $ret .= "<tr><td align='right'>Модификаторы наименований</td>"
    301314            . "<td>"
    302             . "<label><input type='checkbox' name='view_pgroup' value='1'{$pgroup_sel}>Отображать префиксы групп у товаров</label><br>"
    303             . "<label><input type='checkbox' name='view_vendor' value='1'{$vendoe_sel}>Отображать производителя у товаров</label><br>"
     315            . "<label><input type='checkbox' name='options[modname][pgroup]' value='1'{$pgroup_mn_sel}>Добавить в начало печатное наименование группы</label><br>"
     316            . "<label><input type='checkbox' name='options[modname][vendor]' value='1'{$vendor_mn_sel}>Добавить изготовителя в конец</label><br>"
    304317            . "</td>"
     318            . "</tr>";
     319                   
     320        $ret .= "<tr><td align='right'>Колонки</td>"
     321            . "<td>";
     322       
     323        foreach($this->columns as $c_id => $c_name) {
     324            $sel = (isset($columns) && in_array($c_id, $columns)) ? ' checked':'';
     325            $ret .= "<label><input type='checkbox' name='options[columns][]' value='$c_id'{$sel}>$c_name</label><br>";
     326        }
     327        $ret .= "</td>"
    305328            . "</tr>";
    306329        $ret .= "<tr><td align='right'>Тело письма</td>"
     
    325348        $write_data['price_id'] = $data['price_id'];
    326349       
    327         $filters = array (
    328             'vendor' => $data['vendor'],
    329             'count' => $data['count'],
    330             'view_pgroup' => $data['view_pgroup'],
    331             'view_vendor' => $data['view_vendor'],
    332         );
     350        $options = array (
     351            'filter' => isset($data['options']['filter'])?$data['options']['filter']:[],
     352            'columns' => isset($data['options']['columns'])?$data['options']['columns']:[],
     353            'modname' => isset($data['options']['modname'])?$data['options']['modname']:[],
     354        );       
     355       
    333356        if(isset($data['gs']) && $data['gs'] && is_array($data['groups'])) {
    334             $filters['groups_only'] = $data['gs'];
    335             $filters['groups_list'] = $data['groups'];
     357            $options['filter']['groups_only'] = true;
     358            $options['filter']['groups_list'] = $data['groups'];
    336359        }
    337360               
    338         $write_data['filters'] = json_encode($filters, JSON_UNESCAPED_UNICODE);
     361        $write_data['options'] = json_encode($options, JSON_UNESCAPED_UNICODE);
    339362        if ($id) {
    340363            \acl::accessGuard($this->acl_object_name, \acl::UPDATE);
     
    502525        }
    503526    }
    504    
    505     protected $items = array(
    506             'new' => 'Новая рассылка',
    507             'auth_acl' => 'Привилегии аутентифицированных пользователей',
    508             'gle' => 'Редактор списка ролей пользователей',
    509             'groups' => 'Привилегии для ролей пользователей',
    510         );
    511    
     527
     528    protected function getPrice($id) {
     529        global $tmpl;
     530        $tmpl->ajax = 1;
     531        $item = $this->getItem($id); 
     532        $psender = new \priceSender();
     533        $psender->setFormat($item['format']);
     534        $psender->setZip($item['use_zip']);
     535        $psender->setPriceId($item['price_id']);
     536        $psender->setText($item['lettertext']);
     537        $psender->setOptions($item['options']);       
     538        $psender->out();
     539        exit(0);
     540    }
     541
    512542    /// Запустить модуль на исполнение
    513543    public function run() {
     
    529559            case 'save':
    530560                $id = rcvint('id');
    531                 $data = requestA( array('name','period','format','use_zip','price_id','vendor','count','lettertext','g','gs','view_pgroup','view_vendor') );
     561                $data = requestA( array('name','period','format','use_zip','price_id','options','lettertext','g','gs') );
    532562                $data['groups'] = $data['g'];
    533563                $id = $this->saveItem($id, $data);
     
    538568                $id = rcvint('id');
    539569                $tmpl->addContent($this->editForm($id));               
     570                break;
     571            case 'get':
     572                $id = rcvint('id');
     573                $this->getPrice($id);               
    540574                break;
    541575            case 'vs':
  • trunk/web/price.php

    r982 r985  
    346346        $pc->setFirmId($pref->site_default_firm_id);
    347347       
    348         $price->SetCost( $pc->getDefaultPriceId() );   
     348        $price->setPriceId( $pc->getDefaultPriceId() );
    349349        if($f=='csv')   {
    350350                $price->setDivider( request('divider') );
     
    352352        }       
    353353        if(request('gs') && is_array($_REQUEST['g']))   {
    354                 $price->setViewGroups($_REQUEST['g']);
     354                $price->setGroupsFilter($_REQUEST['g']);
    355355        }
    356356       
Note: See TracChangeset for help on using the changeset viewer.