1
Changeset 026478f – MultiMag

Changeset 026478f


Ignore:
Timestamp:
Aug 4, 2014, 1:44:45 AM (8 years ago)
Author:
Blacklight <blacklight@…>
Branches:
master
Children:
dc4d2c5
Parents:
170cbd7
Message:
  • Продолжение работ в модуле связей для товара.
  • Доработки отчётов
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • cli/price_an.php

    r170cbd7 r026478f  
    313313                        SetStatus("Cost change: $p pp", $db);
    314314                }
    315                 settype($nxt[3], 'int');
     315                $nxt[3] = round($nxt[3], 5);
    316316
    317317                $mincost = 99999999;
  • common/core.common.php

    r170cbd7 r026478f  
    1818//
    1919
    20 define("MULTIMAG_REV", "670");
     20define("MULTIMAG_REV", "676");
    2121define("MULTIMAG_VERSION", "0.2.".MULTIMAG_REV);
    2222
  • web/css/poseditor.js

    r170cbd7 r026478f  
    435435        poslist.updateSumInfo = function(json) {
    436436                var str = '';
    437                 str = 'Итого: <b>' + (poslist.tBodies[0].rows.length) + '</b> поз. на сумму <b>' + Number(json.sum).toFixed(2) + '</b> руб. ';
     437                if(json.sum)
     438                        str = 'Итого: <b>' + (poslist.tBodies[0].rows.length) + '</b> поз. на сумму <b>' + Number(json.sum).toFixed(2) + '</b> руб. ';
    438439                if(json.price_name)
    439440                        str += ' Цена: <b>' + json.price_name + '</b>.';
  • web/include/doc.poseditor.php

    r170cbd7 r026478f  
    2828        var $show_tdb;          ///< Показывать тип/размеры/массу
    2929        var $show_rto;          ///< Показывать резерв/в пути/предложения
    30 
    31 /// Конструктор
    32 function __construct(){
    33         global $CONFIG;
    34         $this->editable=0;
    35         $this->show_vc=@$CONFIG['poseditor']['vc'];
    36         $this->show_tdb=@$CONFIG['poseditor']['tdb'];
    37         $this->show_rto=@$CONFIG['poseditor']['rto'];
    38 }
    39 
    40 /// Разрешить или запретить изменение данных в списке наименований
    41 /// @param editable 0: запретить, 1: разрешить
    42 function SetEditable($editable)
    43 {
    44         $this->editable=$editable;
    45 }
    46 
    47 
    48 function SetVC($vc) {
    49         $this->show_vc = $vc;
    50 }
    51 
    52 function getGroupsTree()
    53 {
    54         return "Отбор:<input type='text' id='sklsearch'><br>
    55         <div onclick='tree_toggle()'>
    56         <div><a href='' onclick=\"\">Группы</a></div>
    57         <ul class='Container'>".$this->getGroupLevel(0)."</ul>
    58         </div>";
    59 }
    60 
    61 function getGroupLevel($level)
    62 {
    63         global $db;
    64         settype($level, 'int');
    65         $ret='';
    66         $res = $db->query("SELECT `id`, `name`, `desc` FROM `doc_group` WHERE `pid`='$level' ORDER BY `id`");
    67         $i=0;
    68         $r='';
    69         if($level==0) $r='IsRoot';
    70         $cnt = $res->num_rows;
    71         while($nxt = $res->fetch_row()){
    72                 if($nxt[0] == 0) continue;
    73                 $item="<a href='' title='$nxt[2]' onclick=\"return getSkladList(event, '$nxt[0]')\" >".html_out($nxt[1])."</a>";
    74                 if($i>=($cnt-1)) $r.=" IsLast";
    75                 $tmp=$this->getGroupLevel($nxt[0]); // рекурсия
    76                 if($tmp)        $ret.="<li class='Node ExpandClosed $r'><div class='Expand'></div><div class='Content'>$item</div><ul class='Container'>$tmp</ul></li>\n";
    77                 else            $ret.="<li class='Node ExpandLeaf $r'><div class='Expand'></div><div class='Content'>$item</div></li>\n";
    78                 $i++;
    79         }
    80         return $ret;
    81 }
    82 
    83 function getGroupData($pid) {
    84         global $db;
    85         settype($pid, 'int');
    86         $data = array();
    87         $res = $db->query("SELECT `id`, `name` FROM `doc_group` WHERE `pid`='$pid' ORDER BY `id`");
    88         while($nxt = $res->fetch_row()){
    89                 if($nxt[0] == 0) continue;
    90                 $data[] = array(
    91                     'id'        => $nxt[0],
    92                     'name'      => $nxt[1],
    93                     'childs'    => $this->getGroupData($nxt[0])
    94                 );
    95         }
    96         return $data;
    97 }
    98 
    99 function getOrder(){
    100         global $CONFIG;
    101         switch(@$CONFIG['doc']['sklad_default_order'])
     30        var $list;      // Список наименований
     31
     32        /// Конструктор
     33        function __construct(){
     34                global $CONFIG;
     35                $this->editable=0;
     36                $this->show_vc=@$CONFIG['poseditor']['vc'];
     37                $this->show_tdb=@$CONFIG['poseditor']['tdb'];
     38                $this->show_rto=@$CONFIG['poseditor']['rto'];
     39        }
     40
     41        /// Разрешить или запретить изменение данных в списке наименований
     42        /// @param editable 0: запретить, 1: разрешить
     43        function SetEditable($editable)
    10244        {
    103                 case 'vc':      $order='`doc_base`.`vc`';       break;
    104                 case 'cost':    $order='`doc_base`.`cost`';     break;
    105                 default:        $order='`doc_base`.`name`';
    106         }
    107         return $order;
    108 }
     45                $this->editable=$editable;
     46        }
     47
     48
     49        function SetVC($vc) {
     50                $this->show_vc = $vc;
     51        }
     52
     53        function getGroupsTree()
     54        {
     55                return "Отбор:<input type='text' id='sklsearch'><br>
     56                <div onclick='tree_toggle()'>
     57                <div><a href='' onclick=\"\">Группы</a></div>
     58                <ul class='Container'>".$this->getGroupLevel(0)."</ul>
     59                </div>";
     60        }
     61
     62        function getGroupLevel($level)
     63        {
     64                global $db;
     65                settype($level, 'int');
     66                $ret='';
     67                $res = $db->query("SELECT `id`, `name`, `desc` FROM `doc_group` WHERE `pid`='$level' ORDER BY `id`");
     68                $i=0;
     69                $r='';
     70                if($level==0) $r='IsRoot';
     71                $cnt = $res->num_rows;
     72                while($nxt = $res->fetch_row()){
     73                        if($nxt[0] == 0) continue;
     74                        $item="<a href='' title='$nxt[2]' onclick=\"return getSkladList(event, '$nxt[0]')\" >".html_out($nxt[1])."</a>";
     75                        if($i>=($cnt-1)) $r.=" IsLast";
     76                        $tmp=$this->getGroupLevel($nxt[0]); // рекурсия
     77                        if($tmp)        $ret.="<li class='Node ExpandClosed $r'><div class='Expand'></div><div class='Content'>$item</div><ul class='Container'>$tmp</ul></li>\n";
     78                        else            $ret.="<li class='Node ExpandLeaf $r'><div class='Expand'></div><div class='Content'>$item</div></li>\n";
     79                        $i++;
     80                }
     81                return $ret;
     82        }
     83
     84        function getGroupData($pid) {
     85                global $db;
     86                settype($pid, 'int');
     87                $data = array();
     88                $res = $db->query("SELECT `id`, `name` FROM `doc_group` WHERE `pid`='$pid' ORDER BY `id`");
     89                while($nxt = $res->fetch_row()){
     90                        if($nxt[0] == 0) continue;
     91                        $data[] = array(
     92                            'id'        => $nxt[0],
     93                            'name'      => $nxt[1],
     94                            'childs'    => $this->getGroupData($nxt[0])
     95                        );
     96                }
     97                return $data;
     98        }
     99
     100        function getOrder(){
     101                global $CONFIG;
     102                switch(@$CONFIG['doc']['sklad_default_order'])
     103                {
     104                        case 'vc':      $order='`doc_base`.`vc`';       break;
     105                        case 'cost':    $order='`doc_base`.`cost`';     break;
     106                        default:        $order='`doc_base`.`name`';
     107                }
     108                return $order;
     109        }
    109110
    110111};
     
    712713                global $db;
    713714                settype($group, 'int');
    714                 $ret = '';
    715715                $sql = "SELECT `doc_base`.`id`, `doc_base`.`vc`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`proizv` AS `vendor`,
    716716                        `doc_base`.`likvid` AS `liquidity`, `doc_base`.`cost` AS `base_price`, `doc_base`.`cost_date` AS `price_date`, `doc_base_dop`.`analog`,
  • web/include/doc.s.sklad.php

    r170cbd7 r026478f  
    243243                        else    $tmpl->msg("Не выбрано действие!", 'err');
    244244                }
    245                 else    $tmpl->msg("Неверная опция");
     245                else    $tmpl->msg("Неверная опция - ".html_out($opt));
    246246        }
    247247
  • web/include/doc.sklad.link.php

    r170cbd7 r026478f  
    2222
    2323/// Работа со связанными товарами.
    24 /// В работе использует javascript файл js/link_poslist.js
    2524class LinkPosList extends PosEditor {
    2625
    27         var $linked_pos = 0;  ///< ID наименования, для которого формируется список связей
    28 
    29 /// Конструктор.
    30 /// @param pos_id ID наименования, для которого требуется просмотр/редактирование списка связанных наименований
     26        var $linked_pos;  ///< ID наименования, для которого формируется список связей
     27
     28        /// Конструктор.
     29        /// @param pos_id ID наименования, для которого требуется просмотр/редактирование списка связанных наименований
    3130        function __construct($pos_id) {
    3231                $this->linked_pos = $pos_id;
    33         }
    34 
    35 /// Установить ID связанного товара
    36 /// @param pos_id ID наименования, для которого требуется просмотр/редактирование списка связанных наименований
    37         public function SetLinkedPos($pos_id) {
     32                if( @$CONFIG['poseditor']['sn_enable'] && ($doc_data['type']==1 || $doc_data['type']==2))       $this->show_sn=1;
     33                if( @$CONFIG['poseditor']['true_gtd'] && $doc_data['type']==1)                                  $this->show_gtd=1;
     34        }
     35
     36        /// Установить ID связанного товара
     37        /// @param pos_id ID наименования, для которого требуется просмотр/редактирование списка связанных наименований
     38        public function setLinkedPos($pos_id) {
    3839                $this->linked_pos = $pos_id;
    3940        }
    40 
    41 /// Показать редактор.
    42 /// @return HTML код редактора
    43         public function Show($param = '') {
    44                 global $CONFIG;
    45                 /// TODO: возможность отключения редактирования в зависимости от статуса документа, настройка отображаемых столбцов из конфига. Не забыть про серийные номера.
    46                 /// Возможность отключения строки быстрого ввода
    47                 /// В итоге - сделать базовый класс, от которого наследуется редактор документов, редактор комплектующих, итп.
    48                 $ret = "
    49         <script src='/js/link_poslist.js' type='text/javascript'></script>
    50         <link href='/css/poseditor.css' rel='stylesheet' type='text/css' media='screen'>
    51         <script src='/css/jquery/jquery.alerts.js' type='text/javascript'></script>
    52         <link href='/css/jquery/jquery.alerts.css' rel='stylesheet' type='text/css' media='screen' />
    53 
    54         <table width='100%' id='poslist'><thead><tr>
    55         <th width='60px' align='left'>№</th>";
    56                 if ($CONFIG['poseditor']['vc'] > 0)
    57                         $ret.="<th width='90px' align='left' title='Код изготовителя'><div class='order_button' id='pl_order_vc'></div> Код</th>";
    58                 $ret.="<th><div class='order_button' id='pl_order_name'></div> Наименование</th>
    59         <th width='90px' class='hl'><div class='order_button' id='pl_order_cost'></div> Цена</th>
    60         <th width='60px' title='Остаток товара на складе'>Остаток</th>
    61         </tr>
    62         </thead>
    63         <tfoot>
    64         <tr id='pladd'>
    65         <td><input type='text' id='pos_id' autocomplete='off' tabindex='1'></td>";
    66                 if ($CONFIG['poseditor']['vc'] > 0)
    67                         $ret.="<td><input type='text' id='pos_vc' autocomplete='off' tabindex='2'></td>";
    68                 $ret.="<td><input type='text' id='pos_name' autocomplete='off' tabindex='3'></td>
    69         <td id='pos_cost'></td>
    70         <td id='pos_sklad_cnt'></td>
    71         </tr>
    72         </tfoot>
    73         <tbody>
    74         <tr><td colspan='9' style='text-align: center;'><img src='/img/icon_load.gif' alt='Загрузка...'>
    75         </tbody>
    76         </table>
    77         <p align='right' id='sum'></p>";
    78 
    79                 $ret.="
    80         <table id='sklad_view'>
    81         <tr><td id='groups_list' width='200' valign='top' class='lin0'>";
    82                 $ret.=$this->getGroupsTree();
    83                 $ret.="</td><td valign='top' class='lin1'>     
    84         <table width='100%' cellspacing='1' cellpadding='2'>
    85         <tr><thead>
    86         <th>№";
    87                 if ($CONFIG['poseditor']['vc'] > 0)
    88                         $ret.="<th>Код";
    89                 $ret.="<th>Наименование<th>Марка<th>Цена, р.<th>Ликв.<th>Р.цена, р.<th>Аналог";
    90                 if ($CONFIG['poseditor']['tdb'] > 0)
    91                         $ret.="<th>Тип<th>d<th>D<th>B<th>Масса";
    92                 if ($CONFIG['poseditor']['rto'] > 0)
    93                         $ret.="<th><img src='/img/i_lock.png' alt='В резерве'><th><img src='/img/i_alert.png' alt='Предложений'><th><img src='/img/i_truck.png' alt='В пути'>";
    94                 $ret.="<th>Склад<th>Всего<th>Место
    95         </thead>
    96         <tbody id='sklad_list'>
    97         </tbody>
    98         </table>
    99         </td></tr>
    100         </table>";
    101                 if (!@$CONFIG['poseditor']['need_dialog'])
    102                         $CONFIG['poseditor']['need_dialog'] = 0;
    103                 else
    104                         $CONFIG['poseditor']['need_dialog'] = 1;
    105                 $ret.=@"<script type=\"text/javascript\">
    106         var poslist=LinkPosListInit('/docs.php?l=sklad&mode=srv&opt=ep&param=l&pos={$this->linked_pos}','{$this->editable}')
    107         poslist.show_column['vc']='{$CONFIG['poseditor']['vc']}'
    108 
    109         var skladview=document.getElementById('sklad_view')
    110         skladview.show_column['vc']='{$CONFIG['poseditor']['vc']}'
    111         skladview.show_column['tdb']='{$CONFIG['poseditor']['tdb']}'
    112         skladview.show_column['rto']='{$CONFIG['poseditor']['rto']}'
    11341       
    114         skladlist=document.getElementById('sklad_list').needDialog='{$CONFIG['poseditor']['need_dialog']}';
    115         </script>";
    116 
    117                 return $ret;
    118         }
    119 
    120 /// Получить список наименований, связанных с выбранным наименованием.
    121 /// @return json-строка с данными о наименованиях
    122         function GetAllContent() {
    123                 global $db;
     42        /// Загрузить список товаров. Повторно не загружает.
     43        protected function loadList() {
     44                global $db;
     45                if(is_array($this->list))
     46                        return;
     47                $this->list = array();
    12448                $res = $db->query("SELECT `doc_base_links`.`id` AS `line_id`, `doc_base`.`id` AS `pos_id`, `doc_base`.`vc`, `doc_base`.`name`, `doc_base`.`cost`,
    12549                        `doc_base`.`proizv`, `doc_base`.`id`,
     
    12852                        LEFT JOIN `doc_base` ON `doc_base`.`id`=`doc_base_links`.`pos2_id`
    12953                        WHERE `doc_base_links`.`pos1_id`='{$this->linked_pos}'");
     54                while ($nxt = $res->fetch_assoc())
     55                        $this->list[$nxt['line_id']] = $nxt;
     56        }
     57
     58/// Показать редактор.
     59/// @return HTML код редактора
     60        public function Show($param = '') {
     61                global $CONFIG;
     62               
     63                $ret="
     64                <script type='text/javascript' src='/css/jquery/jquery.autocomplete.js'></script>
     65                <script type='text/javascript' src='/css/jquery/jquery.alerts.js'></script>
     66                <script src='/css/poseditor.js' type='text/javascript'></script>
     67                <link href='/css/poseditor.css' rel='stylesheet' type='text/css' media='screen'>
     68                <link href='/css/jquery/jquery.alerts.css' rel='stylesheet' type='text/css' media='screen'>
     69                <div id='poseditor_div'></div>
     70                <div id='storeview_container'></div>";
     71
     72                $p_setup = array(
     73                    'base_url'  => '/docs.php?l=sklad&mode=srv&opt=ep&param=l&pos='.$this->linked_pos,
     74                    'editable'  => $this->editable,
     75                    'container' => 'poseditor_div',
     76                    'store_container'   => 'storeview_container',
     77                    'fastadd_line'=> 1,         // Показывать строку быстрого подбора
     78                );
     79
     80                $cols = array();
     81                $col_names = array();
     82                if($this->show_vc) {
     83                        $cols[] = 'vc';
     84                        $col_names[] = 'Код';
     85                }
     86                $cols[] = 'name';
     87                $col_names[] = 'Наименование';
     88                $cols[] = 'store_cnt';
     89                $col_names[] = 'Остаток';
     90                $cols[] = 'place';
     91                $col_names[] = 'Место';
     92
     93                $p_setup['columns'] = $cols;
     94                $p_setup['col_names'] = $col_names;
     95
     96                if($this->show_vc)
     97                        $p_setup['store_columns'] = array(
     98                            'vc', 'name', 'vendor', 'price', 'liquidity'
     99                        );
     100                else    $p_setup['store_columns'] = array(
     101                            'name', 'vendor', 'price', 'liquidity'
     102                        );
     103               
     104                if($this->show_tdb) {
     105                        $p_setup['store_columns'][] = 'type';
     106                        $p_setup['store_columns'][] = 'd_int';
     107                        $p_setup['store_columns'][] = 'd_ext';
     108                        $p_setup['store_columns'][] = 'size';
     109                        $p_setup['store_columns'][] = 'mass';
     110                }
     111
     112                if($this->show_rto) {
     113                        $p_setup['store_columns'][] = 'transit';
     114                        $p_setup['store_columns'][] = 'reserve';
     115                        $p_setup['store_columns'][] = 'offer';
     116                }
     117
     118                $p_setup['store_columns'][] = 'cnt';
     119                $p_setup['store_columns'][] = 'allcnt';
     120                $p_setup['store_columns'][] = 'place';
     121
     122
     123                $ret.="<script type=\"text/javascript\">
     124                var poslist = PosEditorInit(".json_encode($p_setup, JSON_UNESCAPED_UNICODE).");
     125                </script>";
     126
     127                return $ret;
     128        }
     129
     130/// Получить список наименований, связанных с выбранным наименованием.
     131/// @return json-строка с данными о наименованиях
     132        function GetAllContent() {
     133                global $CONFIG, $db;
     134                $this->loadList();
     135
     136                $pos_array = array();
     137                foreach ($this->list as $nxt) {
     138
     139                        if(! @$CONFIG['doc']['no_print_vendor'])
     140                                $nxt['name'].=' - '.$nxt['vendor'];
     141                        $pos_array[] = $nxt;
     142                }
     143
     144                $ret_data = array (
     145                    'response'  => 'loadlist',
     146                    'content'   => $pos_array,
     147                    'sum'       => 0,
     148                );
     149                return json_encode($ret_data, JSON_UNESCAPED_UNICODE);
     150        }
     151       
     152        /// Получить информацию о наименовании
     153        function GetPosInfo($pos) {
     154                global $db, $CONFIG;
     155
     156                $res = $db->query("SELECT `doc_base_links`.`id` AS `line_id`, `doc_base`.`id` AS `pos_id`, `doc_base`.`vc`, `doc_base`.`name`,
     157                        `doc_base`.`proizv` AS `vendor`, `doc_base`.`cost` AS `base_price`, `doc_base`.`bulkcnt`, `doc_base`.`group`
     158                        FROM `doc_base`
     159                        LEFT JOIN `doc_base_links` ON `doc_base`.`id`=`doc_base_links`.`pos2_id`
     160                        WHERE `doc_base`.`id`='$pos'");
     161
    130162                $ret = '';
    131                 while ($nxt = $res->fetch_assoc()) {
    132                         $nxt['cost'] = sprintf("%0.2f", $nxt['cost']);
    133                         if ($ret) $ret.=', ';
    134                         $ret.="{line_id: '{$nxt['line_id']}', pos_id: '{$nxt['pos_id']}', vc: '{$nxt['vc']}', name: '{$nxt['name']} - {$nxt['proizv']}', cost: '{$nxt['cost']}', sklad_cnt: '{$nxt['sklad_cnt']}'";
    135                         $ret.="}";
    136                 }
    137                 return $ret;
    138         }
    139 
    140 /// Получить список номенклатуры заданной группы
    141         function GetSkladList($group) {
    142                 global $db;
    143                 settype($group, 'int');
    144                 $sql = "SELECT `doc_base`.`id`,`doc_base`.`vc`,`doc_base`.`group`,`doc_base`.`name`,`doc_base`.`proizv`, `doc_base`.`likvid`,
    145                         `doc_base`.`cost` AS `base_price`, `doc_base`.`bulkcnt`,
    146                         `doc_base`.`cost_date`, `doc_base_dop`.`koncost`,  `doc_base_dop`.`analog`, `doc_base_dop`.`type`, `doc_base_dop`.`d_int`,
    147                         `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`,
    148                         (SELECT SUM(`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` GROUP BY `doc_base_cnt`.`id`) AS `allcnt`
    149                         FROM `doc_base`
    150                         LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    151                         WHERE `doc_base`.`group`='$group'
    152                         ORDER BY `doc_base`.`name`";
    153                 $res = $db->query($sql);
    154                 return $this->FormatResult($res);
    155         }
    156 
    157 /// Получить список номенклатуры, содержащей в названии заданную строку
    158         function SearchSkladList($s) {
    159                 global $db;
    160                 $ret = '';
    161                 $sql = "SELECT `doc_base`.`id`,`doc_base`.`vc`,`doc_base`.`group`,`doc_base`.`name`,`doc_base`.`proizv`, `doc_base`.`likvid`,
    162                         `doc_base`.`cost` AS `base_price`, `doc_base`.`bulkcnt`,
    163                         `doc_base`.`cost_date`, `doc_base_dop`.`koncost`,  `doc_base_dop`.`analog`, `doc_base_dop`.`type`, `doc_base_dop`.`d_int`,
    164                         `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base_cnt`.`mesto`, `doc_base_cnt`.`cnt`,
    165                         (SELECT SUM(`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` GROUP BY `doc_base_cnt`.`id`) AS `allcnt`";
    166                 $s_sql = $db->real_escape_string($s);
    167                 $sqla = $sql . "FROM `doc_base`
    168                         LEFT JOIN `doc_base_cnt` ON `doc_base_cnt`.`id`=`doc_base`.`id` AND `doc_base_cnt`.`sklad`='{$this->sklad_id}'
    169                         LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    170                         WHERE `doc_base`.`name` LIKE '$s%' OR `doc_base`.`vc` LIKE '$s_sql%' ORDER BY `doc_base`.`name` LIMIT 200";
    171                 $res = $db->query($sqla);
    172                 if ($res->num_rows) {
    173                         if ($ret != '')
    174                                 $ret.=', ';
    175                         $ret.="{id: 'header', name: 'Поиск по названию, начинающемуся на $s - {$res->num_rows} наименований найдено'}";
    176                         $ret = $this->FormatResult($res, $ret);
    177                 }
    178                 $sqla = $sql . "FROM `doc_base`
    179                         LEFT JOIN `doc_base_cnt` ON `doc_base_cnt`.`id`=`doc_base`.`id` AND `doc_base_cnt`.`sklad`='{$this->sklad_id}'
    180                         LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    181                         WHERE (`doc_base`.`name` LIKE '%$s_sql%' OR `doc_base`.`vc` LIKE '%$s_sql%') AND `doc_base`.`name` NOT LIKE '$s_sql%'
    182                         AND `doc_base`.`vc` NOT LIKE '$s_sql%' ORDER BY `doc_base`.`name` LIMIT 100";
    183                 $res = $db->query($sqla);
    184                 if ($res->num_rows) {
    185                         if ($ret != '')
    186                                 $ret.=', ';
    187                         $ret.="{id: 'header', name: 'Поиск по названию, содержащему $s - {$res->num_rows} наименований найдено'}";
    188                         $ret = $this->FormatResult($res, $ret);
    189                 }
    190                 $sqla = $sql . "FROM `doc_base`
    191                         LEFT JOIN `doc_base_cnt` ON `doc_base_cnt`.`id`=`doc_base`.`id` AND `doc_base_cnt`.`sklad`='{$this->sklad_id}'
    192                         LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
    193                         WHERE `doc_base_dop`.`analog` LIKE '%$s_sql%' AND `doc_base`.`name` NOT LIKE '%$s_sql%' AND `doc_base`.`vc` NOT LIKE '%$s%'
    194                         ORDER BY `doc_base`.`name` LIMIT 100";
    195                 $res = $db->query($sqla);
    196                 if ($res->num_rows) {
    197                         if ($ret != '')
    198                                 $ret.=', ';
    199                         $ret.="{id: 'header', name: 'Поиск по аналогу($s) - {$res->num_rows} наименований найдено'}";
    200                         $ret = $this->FormatResult($res, $ret);
    201                 }
    202                 return $ret;
    203         }
    204 
    205 /// Добавляет указанную складскую позицию в список
     163                if ($res->num_rows) {
     164                        $nxt = $res->fetch_assoc();
     165                       
     166                        if(! @$CONFIG['doc']['no_print_vendor'])
     167                                $nxt['name'].=' - '.$nxt['vendor'];
     168                       
     169                        $ret = "{response: 3, data:".json_encode($nxt, JSON_UNESCAPED_UNICODE)."}";
     170                }
     171
     172                return $ret;
     173        }
     174
     175        /// Добавляет указанную складскую позицию в список
    206176        function AddPos($pos) {
    207177                global $db;
     
    231201        }
    232202
    233 /// Формирует json строку с данными о наименованиях на основании результата выполнения sql запроса
    234 /// @param res Результат sql запроса - выборка наименований по заданным критериям
    235 /// @param ret json строка, к которой надо добавить данные
     203        /// Получить список номенклатуры заданной группы
     204        function GetSkladList($group) {
     205                global $db;
     206                settype($group, 'int');
     207                $sql = "SELECT `doc_base`.`id`,`doc_base`.`vc`,`doc_base`.`group`,`doc_base`.`name`,`doc_base`.`proizv`, `doc_base`.`likvid`,
     208                        `doc_base`.`cost` AS `base_price`, `doc_base`.`bulkcnt`,
     209                        `doc_base`.`cost_date`, `doc_base_dop`.`koncost`,  `doc_base_dop`.`analog`, `doc_base_dop`.`type`, `doc_base_dop`.`d_int`,
     210                        `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`,
     211                        (SELECT SUM(`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` GROUP BY `doc_base_cnt`.`id`) AS `allcnt`
     212                        FROM `doc_base`
     213                        LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     214                        WHERE `doc_base`.`group`='$group'
     215                        ORDER BY `doc_base`.`name`";
     216                $res = $db->query($sql);
     217                return $this->FormatResult($res);
     218        }
     219
     220/// Получить список номенклатуры, содержащей в названии заданную строку
     221        function SearchSkladList($s) {
     222                global $db;
     223                $ret = '';
     224                $sql = "SELECT `doc_base`.`id`,`doc_base`.`vc`,`doc_base`.`group`,`doc_base`.`name`,`doc_base`.`proizv`, `doc_base`.`likvid`,
     225                        `doc_base`.`cost` AS `base_price`, `doc_base`.`bulkcnt`,
     226                        `doc_base`.`cost_date`, `doc_base_dop`.`koncost`,  `doc_base_dop`.`analog`, `doc_base_dop`.`type`, `doc_base_dop`.`d_int`,
     227                        `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`, `doc_base_cnt`.`mesto`, `doc_base_cnt`.`cnt`,
     228                        (SELECT SUM(`cnt`) FROM `doc_base_cnt` WHERE `doc_base_cnt`.`id`=`doc_base`.`id` GROUP BY `doc_base_cnt`.`id`) AS `allcnt`";
     229                $s_sql = $db->real_escape_string($s);
     230                $sqla = $sql . "FROM `doc_base`
     231                        LEFT JOIN `doc_base_cnt` ON `doc_base_cnt`.`id`=`doc_base`.`id` AND `doc_base_cnt`.`sklad`='{$this->sklad_id}'
     232                        LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     233                        WHERE `doc_base`.`name` LIKE '$s%' OR `doc_base`.`vc` LIKE '$s_sql%' ORDER BY `doc_base`.`name` LIMIT 200";
     234                $res = $db->query($sqla);
     235                if ($res->num_rows) {
     236                        if ($ret != '')
     237                                $ret.=', ';
     238                        $ret.="{id: 'header', name: 'Поиск по названию, начинающемуся на $s - {$res->num_rows} наименований найдено'}";
     239                        $ret = $this->FormatResult($res, $ret);
     240                }
     241                $sqla = $sql . "FROM `doc_base`
     242                        LEFT JOIN `doc_base_cnt` ON `doc_base_cnt`.`id`=`doc_base`.`id` AND `doc_base_cnt`.`sklad`='{$this->sklad_id}'
     243                        LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     244                        WHERE (`doc_base`.`name` LIKE '%$s_sql%' OR `doc_base`.`vc` LIKE '%$s_sql%') AND `doc_base`.`name` NOT LIKE '$s_sql%'
     245                        AND `doc_base`.`vc` NOT LIKE '$s_sql%' ORDER BY `doc_base`.`name` LIMIT 100";
     246                $res = $db->query($sqla);
     247                if ($res->num_rows) {
     248                        if ($ret != '')
     249                                $ret.=', ';
     250                        $ret.="{id: 'header', name: 'Поиск по названию, содержащему $s - {$res->num_rows} наименований найдено'}";
     251                        $ret = $this->FormatResult($res, $ret);
     252                }
     253                $sqla = $sql . "FROM `doc_base`
     254                        LEFT JOIN `doc_base_cnt` ON `doc_base_cnt`.`id`=`doc_base`.`id` AND `doc_base_cnt`.`sklad`='{$this->sklad_id}'
     255                        LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
     256                        WHERE `doc_base_dop`.`analog` LIKE '%$s_sql%' AND `doc_base`.`name` NOT LIKE '%$s_sql%' AND `doc_base`.`vc` NOT LIKE '%$s%'
     257                        ORDER BY `doc_base`.`name` LIMIT 100";
     258                $res = $db->query($sqla);
     259                if ($res->num_rows) {
     260                        if ($ret != '')
     261                                $ret.=', ';
     262                        $ret.="{id: 'header', name: 'Поиск по аналогу($s) - {$res->num_rows} наименований найдено'}";
     263                        $ret = $this->FormatResult($res, $ret);
     264                }
     265                return $ret;
     266        }
     267
     268       
    236269        protected function FormatResult($res, $ret = '') {
    237270                if ($res->num_rows) {
    238271                        while ($nxt = $res->fetch_assoc()) {
    239                                 $dcc = strtotime($nxt['cost_date']);
    240                                 $cc = "";
    241                                 if ($dcc > (time() - 60 * 60 * 24 * 30 * 3))
    242                                         $cc = "c1";
    243                                 else if ($dcc > (time() - 60 * 60 * 24 * 30 * 6))
    244                                         $cc = "c2";
    245                                 else if ($dcc > (time() - 60 * 60 * 24 * 30 * 9))
    246                                         $cc = "c3";
    247                                 else if ($dcc > (time() - 60 * 60 * 24 * 30 * 12))
    248                                         $cc = "c4";
    249                                 $reserve = DocRezerv($nxt['id'], 0);
    250                                 $offer = DocPodZakaz($nxt['id'], 0);
    251                                 $transit = DocVPuti($nxt['id'], 0);
    252                                 $cost = $nxt['cost'];
    253                                 $rcost = sprintf("%0.2f", $nxt['koncost']);
     272                                $dcc = strtotime($nxt['price_date']);
     273                                if ($dcc > (time() - 60 * 60 * 24 * 30 * 3))            $nxt['price_cat'] = "c1";
     274                                else if ($dcc > (time() - 60 * 60 * 24 * 30 * 6))       $nxt['price_cat'] = "c2";
     275                                else if ($dcc > (time() - 60 * 60 * 24 * 30 * 9))       $nxt['price_cat'] = "c3";
     276                                else if ($dcc > (time() - 60 * 60 * 24 * 30 * 12))      $nxt['price_cat'] = "c4";
     277                                if ($this->show_rto) {
     278                                        $nxt['reserve'] = DocRezerv($nxt['id'], $this->doc);
     279                                        $nxt['offer'] = DocPodZakaz($nxt['id'], $this->doc);
     280                                        $nxt['transit'] = DocVPuti($nxt['id'], $this->doc);
     281                                }
     282                                $pc = PriceCalc::getInstance();
     283                                if($this->cost_id)
     284                                        $nxt['price'] = $pc->getPosSelectedPriceValue($nxt['id'], $this->cost_id, $nxt);
     285                                else    $nxt['price'] = $pc->getPosDefaultPriceValue($nxt['id']);
     286                               
    254287                                if ($ret != '')
    255288                                        $ret.=', ';
    256                                 $ret.=@"{ id: '{$nxt['id']}', name: '{$nxt['name']}', vc: '{$nxt['vc']}', vendor: '{$nxt['proizv']}', liquidity: '{$nxt['likvid']}', cost: '$cost', cost_class: '$cc', rcost: '$rcost', analog: '{$nxt['analog']}', type: '{$nxt['type']}', d_int: '{$nxt['d_int']}', d_ext: '{$nxt['d_ext']}', size: '{$nxt['size']}', mass: '{$nxt['mass']}', place: '{$nxt['mesto']}', cnt: '{$nxt['cnt']}', allcnt: '{$nxt['allcnt']}', reserve: '$reserve', offer: '$offer', transit: '$transit' }";
     289
     290                                $ret .= json_encode($nxt, JSON_UNESCAPED_UNICODE);
    257291                        }
    258292                }
    259293                return $ret;
    260294        }
    261 
    262295};
    263296
  • web/include/reports/komplekt_zp.php

    r170cbd7 r026478f  
    8585                                        $kompl_data.="<tr><td>$nx[4]<td>$nx[1]<td>$cost<td>$nx[3]<td>$cc";
    8686                        }
     87                        $sum = round($sum, 2);
     88                       
    8789                        $span = ($cnt > 1) ? "rowspan='$cnt'" : '';
    8890                        if (!$kompl_data1)
    8991                                $kompl_data1 = "<td><td><td><td><td>";
    90                         $zsum = $nxt['zp'] + $sum;
     92                        $zsum = round($nxt['zp'] + $sum, 2);
     93                       
    9194                        $tmpl->addContent("<tr style='border-top: 2px solid #000'><td $span>{$nxt['id']}<td $span>{$nxt['vc']}<td $span>{$nxt['printname']} {$nxt['name']} / {$nxt['proizv']}<td $span>{$nxt['zp']} $kompl_data1<td $span>$sum<td $span>$zsum
    9295                        $kompl_data");
  • web/include/reports/ostatkinadatu.php

    r170cbd7 r026478f  
    8989                }
    9090               
    91                 $headers = array_merge($headers, array('Количество', 'Базовая цена', 'Сумма по базовой'));
    92                 $widths = array_merge($widths, array(7, 10, 10));
     91                $headers = array_merge($headers, array('Кол-во', 'Б. цена', 'Сумма'));
     92                $widths = array_merge($widths, array(9, 9, 9));
    9393                $col_count+=3;
    9494               
     
    125125                                $cost_p = sprintf("%0.2f", $nxt[2]);
    126126                                $bsum_p = sprintf("%0.2f", $nxt[2] * $count);
     127                                $count_p = round($count, 3);
    127128                                $bsum+=$nxt[2] * $count;
    128129                                $summass+=$count * $nxt[3];
    129 
     130                               
    130131                                if ($CONFIG['poseditor']['vc'])
    131                                         $a = array($nxt[0], $nxt[4], $nxt[1], $count, $cost_p, $bsum_p);
    132                                 else    $a = array($nxt[0], $nxt[1], $count, $cost_p, $bsum_p);
     132                                        $a = array($nxt[0], $nxt[4], $nxt[1], $count_p, $cost_p, $bsum_p);
     133                                else    $a = array($nxt[0], $nxt[1], $count_p, $cost_p, $bsum_p);
    133134                                $this->tableRow($a);
    134135                        }
  • web/include/reports/pos_komplekt.php

    r170cbd7 r026478f  
    9696                                        unset($nxt[4]);
    9797                                }
     98                                $nxt[3] = round($nxt[3], 3);
    9899                                $this->tableRow($nxt);
    99100                                if ($show_conn) {
  • web/include/reports/store.php

    r170cbd7 r026478f  
    104104                $aligns[] = 'L';
    105105                $aligns[] = 'R';
    106                 $col_sizes[] = 100;
    107                 $col_sizes[] = 10;
     106                $col_sizes[] = 96;
     107                $col_sizes[] = 14;
    108108                if ($show_mincnt) {
    109109                        $headers[] = 'Мин.кол-во';
     
    226226                                        $line[] = $nxt['vc'];
    227227                                $line[] = $nxt['name'];
    228                                 $line[] = $nxt['cnt'];
     228                                $line[] = round($nxt['cnt'], 3);
    229229                                if ($show_mincnt) {
    230230                                        $line[] = $nxt['mincnt'];
Note: See TracChangeset for help on using the changeset viewer.