1
Changeset 170cbd7 – MultiMag

Changeset 170cbd7


Ignore:
Timestamp:
Aug 3, 2014, 12:27:10 AM (8 years ago)
Author:
Blacklight <blacklight@…>
Branches:
master
Children:
026478f
Parents:
4048d16
Message:
  • Редактор списка товаров сделан универсальным и может теперь использоваться не только для документов. НЕОБХОДИМО ТЕСТИРОВАНИЕ!
  • Исправлены мелкие ошибки.
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • cli/price_an.php

    r4048d16 r170cbd7  
    135135                                VALUES ('$nx[3]', '$nxt[3]', '$cost', '$nx[4]', '$nx[0]' )");
    136136
    137                                 if ($CONFIG['price']['mark_matched']) {
    138                                         if ($CONFIG['price']['mark_doubles'])
     137                                if (@$CONFIG['price']['mark_matched']) {
     138                                        if (@$CONFIG['price']['mark_doubles'])
    139139                                                $db->query("INSERT INTO `price_seeked` VALUES ($nx[0], 1) ON DUPLICATE KEY UPDATE `seeked`=`seeked`+1");
    140140                                        else
     
    174174
    175175        // Подготовка к распараллеливанию
    176         $numproc = $CONFIG['price']['numproc'];  // Включая родительский
     176        $numproc = @$CONFIG['price']['numproc'];  // Включая родительский
    177177        if ($numproc < 1)
    178178                $numproc = 1;
     
    274274        ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;");
    275275
    276         if ($CONFIG['price']['mark_matched']) {
     276        if (@$CONFIG['price']['mark_matched']) {
    277277                $db->query("DROP TABLE IF EXISTS `price_seeked`");
    278278                $db->query("CREATE TABLE IF NOT EXISTS `price_seeked` (
     
    285285        parallel_match();
    286286
    287         if ($CONFIG['price']['mark_matched'])
     287        if (@$CONFIG['price']['mark_matched'])
    288288                $db->query("UPDATE `price`,`price_seeked` SET `price`.`seeked`=`price_seeked`.`seeked`  WHERE `price`.`id`=`price_seeked`.`id`");
    289289
    290         $db->query("ALTER TABLE`parsed_price_tmp`
     290        $db->query("ALTER TABLE `parsed_price_tmp`
    291291        ADD INDEX ( `firm` ),
    292292        ADD INDEX ( `pos` ),
  • web/css/poseditor.css

    r4048d16 r170cbd7  
    117117}
    118118
     119div.doc_sum_info {
     120        text-align:     right;
     121        padding:        5px;
     122        padding-right: 10px;
     123}
     124
    119125#pladd
    120126{
     
    189195}
    190196
    191 #sklad_list td
    192 {
    193         text-align:     right;
    194 }
    195 
    196 #sklad_list td.la
    197 {
    198         text-align:     left;
    199 }
    200 
    201197/* Подстветка для кликабельных ячеек */
    202198.reserve, .offer, .transit
    203199{
    204         cursor:         pointer;
     200        cursor:         help;
    205201        color:          #06C;
    206202}
     
    208204.reserve:hover, .offer:hover, .transit:hover
    209205{
    210         background:     #ffb;
     206        background:     #ffe;
    211207        text-decoration:underline;
    212 }
    213 
    214 /*группы актуальности цен */
    215 #sklad_list td.c1
    216 {
     208        border: 1px #008 solid;
     209}
     210
     211/* Новый skladview */
     212div.storeview_container {
     213        width:  auto;
     214        border: 0px none;
     215        border-top: 1px solid #008;
     216        border-bottom: 1px solid #008;
     217        background:     #f0f8ff;
     218        padding:        0;
     219        margin:         0;
     220}
     221
     222div.storeview_left {
     223        float:  left;
     224        width:  200px;
     225        margin:         0;
     226        padding:        2px;
     227        min-height:     200px;
     228}
     229
     230div.storeview_left input {
     231        width:  190px;
     232}
     233
     234div.storeview_right {
     235        margin:         0;
     236        margin-left:    210px;
     237        border-left:    1px #ccc solid;
     238        min-height:     200px;
     239        background:     #e0f0ff;
     240        padding:        0px 3px 1px 3px;
     241}
     242
     243div.storeview_right table {
     244        width:  100%;
     245        border-spacing: 0;
     246}
     247
     248div.storeview_right table tr
     249{
     250        height: 20px;
     251}
     252
     253div.storeview_right table tr:nth-child(odd)
     254{
     255        background:     #f0f8ff;
     256}
     257
     258div.storeview_right table tr:nth-child(even)
     259{
     260        background:     #e0f0ff;
     261}
     262
     263div.storeview_right table th
     264{
     265        border-right: 2px solid #ccc;
     266        padding: 1px 5px 1px 5px;
     267}
     268
     269div.storeview_right table td
     270{
     271        border-right: 2px solid #fff;
     272        padding: 1px 5px 1px 5px;
     273}
     274
     275/*категории актуальности цен */
     276div.storeview_right table td.c1 {
    217277        color: #0c0;
    218278}
    219 #sklad_list td.c2
    220 {
     279div.storeview_right table td.c2 {
    221280        color: #c0c;
    222281}
    223 #sklad_list td.c3
    224 {
     282div.storeview_right table td.c3 {
    225283        color: #730;
    226284}
    227 #sklad_list td.c4
    228 {
     285div.storeview_right table td.c4 {
    229286        color: #3a8;
    230287}
    231288
    232 
     289div.storeview_right table .searchinfo {
     290        border-top:     1px solid #888;
     291        border-bottom:  1px solid #888;
     292        background-color:#f0f8ff;
     293        color:  #888;
     294        font-weight: bold;
     295        padding:5px;
     296}
  • web/css/poseditor.js

    r4048d16 r170cbd7  
    11// Зависит от jquery!
    22
    3 function PosEditorInit(base_url, editable) {
    4         var poslist = document.getElementById('poslist');
    5         var p_sum = document.getElementById('sum');
    6         //poslist.doc_id=doc;
    7         poslist.base_url = base_url;
    8         poslist.editable = editable;
    9         poslist.show_column = new Array();
    10         poslist.auto_price = 1;
    11         var skladview = SkladViewInit(/*doc*/);
    12         PladdInit();
    13 
    14         if(!poslist.editable)
    15                 skladview.style.display = 'none';
    16 
     3function number_format( number, decimals, dec_point, thousands_sep ) {  // Format a number with grouped thousands
     4    //
     5    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
     6    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
     7    // +     bugfix by: Michael White (http://crestidg.com)
     8 
     9    var i, j, kw, kd, km;
     10 
     11    // input sanitation & defaults
     12    if( isNaN(decimals = Math.abs(decimals)) ){
     13        decimals = 2;
     14    }
     15    if( dec_point == undefined ){
     16        dec_point = ",";
     17    }
     18    if( thousands_sep == undefined ){
     19        thousands_sep = ".";
     20    }
     21 
     22    i = parseInt(number = (+number || 0).toFixed(decimals)) + "";
     23 
     24    if( (j = i.length) > 3 ){
     25        j = j % 3;
     26    } else{
     27        j = 0;
     28    }
     29 
     30    km = (j ? i.substr(0, j) + thousands_sep : "");
     31    kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep);
     32    //kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).slice(2) : "");
     33    kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, 0).slice(2) : "");
     34 
     35 
     36    return km + kw + kd;
     37}
     38
     39
     40function PosEditorInit(poslist_setup) {
     41        var container = document.getElementById(poslist_setup.container);
     42        var poslist = document.createElement('table');
     43        var p_sum = document.createElement('div');
     44        container.appendChild(poslist);
     45        container.appendChild(p_sum);
     46        p_sum.className = 'doc_sum_info';
     47
     48        poslist.base_url = poslist_setup.base_url;
     49        poslist.editable = poslist_setup.editable;
     50        poslist.show_column = poslist_setup.columns;
     51        poslist.auto_price = 0;
     52        poslist.setup = poslist_setup;
     53        poslist.p_sum = p_sum;
     54       
     55        function init() {
     56                poslist.id = 'poslist';
     57                poslist.style.width = '100%';
     58                poslist.head = document.createElement('thead');
     59                var head_row = poslist.head.insertRow(0);
     60                var th = document.createElement('th');
     61                th.innerText = 'N';
     62                th.style.width='50px';
     63                head_row.appendChild(th);
     64               
     65                var tmp;
     66                var i;
     67                for(i=0;i<poslist_setup.col_names.length;i++) {
     68                        var th = document.createElement('th');
     69                        th.innerText = poslist_setup.col_names[i];
     70                        head_row.appendChild(th);
     71                        switch(poslist_setup.columns[i]) {
     72                                case 'vc':
     73                                case 'name':
     74                                case 'price':
     75                                case 'place':
     76                                        tmp = document.createElement('div');
     77                                        tmp.className = 'order_button';
     78                                        tmp.useFor = poslist_setup.columns[i];
     79                                        tmp.addEventListener( 'click', reOrder, false);
     80                                        th.appendChild(tmp);
     81                                        break;
     82                        }
     83                       
     84                        switch(poslist_setup.columns[i]) {
     85                                case 'sprice':
     86                                case 'price':
     87                                case 'cnt':
     88                                case 'sum':
     89                                case 'place':
     90                                case 'store_cnt':
     91                                        th.style.width='80px';
     92                                        break;
     93                        }
     94                }
     95                poslist.appendChild(poslist.head);
     96               
     97                if(poslist_setup.fastadd_line && poslist_setup.editable) {
     98                        PladdInit(poslist);
     99                }
     100                poslist.body = document.createElement('tbody');
     101                var body_row = poslist.body.insertRow(0);
     102                var td = document.createElement('td');
     103                td.colSpan = i+1;
     104                td.style.textAlign = 'center';
     105                td.innerHTML = "<img src='/img/icon_load.gif' alt='Загрузка...'>";
     106                body_row.appendChild(td);       
     107               
     108               
     109                poslist.appendChild(poslist.body);
     110        };
     111       
     112        function createNameCell(data, row) {
     113                var td_name = document.createElement('td');
     114                td_name.className = 'la';
     115                var textNode = document.createTextNode(data.name);
     116                td_name.appendChild(textNode);
     117                if(!data.comm)
     118                        data.comm = '';
     119                var tmp = document.createElement('br');
     120                td_name.appendChild(tmp);
     121                var comment = document.createElement('small');
     122                textNode = document.createTextNode(data.comm);
     123                comment.appendChild(textNode);
     124                td_name.appendChild(comment);
     125                if(poslist.editable) {
     126                        comment.onclick = function() { poslist.showCommEditor(row); };
     127                }
     128                return td_name;
     129        }
     130       
     131        function createPriceCell(data, row) {
     132                var td_price = document.createElement('td');
     133                if(data.retail)
     134                        td_price.className = 'retail';
     135                if(poslist.editable) {
     136                        var input = document.createElement('input');
     137                        input.type = 'text';
     138                        input.name = 'cost';
     139                        input.value = data.cost;
     140                        input.old_value = input.value;
     141                        input.onkeydown = poslist.doInputKeyDown;
     142                        input.onblur = poslist.doInputBlur;
     143                        if(poslist.auto_price)
     144                                input.disabled = 'disabled';
     145                        td_price.appendChild(input);
     146                }
     147                else {
     148                        var textNode = document.createTextNode(data.cost);
     149                        td_price.appendChild(textNode);
     150                }
     151                return td_price;
     152        }
     153       
     154        function createCntCell(data, row) {
     155                var td_cnt = document.createElement('td');
     156                if(poslist.editable) {
     157                        var input = document.createElement('input');
     158                        input.type = 'text';
     159                        input.name = 'cnt';
     160                        input.value = data.cnt;
     161                        input.old_value = input.value;
     162                        input.onkeydown = poslist.doInputKeyDown;
     163                        input.onblur = poslist.doInputBlur;                             
     164                        td_cnt.appendChild(input);
     165                }
     166                else {
     167                        var textNode = document.createTextNode(data.cnt);
     168                        td_cnt.appendChild(textNode);
     169                }
     170                return td_cnt;
     171        }
     172       
     173        function createSumCell(data, row) {
     174                var td_sum = document.createElement('td');
     175                if(poslist.editable) {
     176                        var input = document.createElement('input');
     177                        input.type = 'text';
     178                        input.name = 'sum';
     179                        input.value = (data.cost * data.cnt).toFixed(2);
     180                        input.old_value = input.value;
     181                        input.onkeydown = poslist.doInputKeyDown;
     182                        input.onblur = poslist.doInputBlur;     
     183                        if(poslist.auto_price)
     184                                input.disabled = 'disabled';
     185                        td_sum.appendChild(input);
     186                }
     187                else {
     188                        var textNode = document.createTextNode((data.cost * data.cnt).toFixed(2));
     189                        td_sum.appendChild(textNode);
     190                }
     191                return td_sum;
     192        }
     193       
     194        function createConstCell(value) {
     195                var td = document.createElement('td');
     196                var textNode = document.createTextNode(value);
     197                td.appendChild(textNode);
     198                return td;
     199        }
     200       
     201        function createGtdCell(value) {
     202                var td = document.createElement('td');
     203                var textNode = document.createTextNode(value);
     204                td.appendChild(textNode);
     205                td.onclick=poslist.showGTDEditor;
     206                return td;
     207        }
     208       
     209        function createSnCell(value) {
     210                var td = document.createElement('td');
     211                var textNode = document.createTextNode(value);
     212                td.appendChild(textNode);
     213                td.onclick=poslist.showSnEditor;
     214                return td;
     215        }
     216       
     217        function reOrder(event) {
     218                $.ajax({
     219                                type:   'GET',
     220                        url:    poslist.base_url,
     221                        data:   'opt=jorder&by=' + event.target.useFor,
     222                        success: function(msg) { poslist.refresh() },
     223                        error:   function() { jAlert('Ошибка!','Сортировка наименований',{},'icon_err'); },
     224                        });
     225        }
     226       
    17227        poslist.refresh = function() {
    18228                $.ajax({
    19229                        type:   'GET',
    20                         url:    base_url,
     230                        url:    poslist.base_url,
    21231                        data:   'opt=jget',
    22232                        success: function(msg) { poslist.tBodies[0].innerHTML=''; rcvDataSuccess(msg); },
     
    24234                });
    25235        };
    26 
    27         poslist.refresh();
    28236
    29237        poslist.doInputKeyDown = function(e) {
     
    88296                $.ajax({
    89297                        type:   'GET',
    90                        url:    base_url,
     298                       url:    poslist.base_url,
    91299                       data:   'opt=jup&type='+this.name+'&value='+this.value+'&line_id='+line.lineIndex,
    92300                       success: function(msg) { rcvDataSuccess(msg); },
     
    94302                });
    95303        }
    96 
    97         poslist.AddLine=function(data) {
     304       
     305        poslist.AddLine = function(data) {
    98306                var row_cnt = poslist.tBodies[0].rows.length;
    99307                var row = poslist.tBodies[0].insertRow(row_cnt);
    100308                row.lineIndex = data.line_id;
    101309                row.id = 'posrow' + data.line_id;
    102                 var sum = (data.cost * data.cnt).toFixed(2);
     310               
    103311                row.sklad_cnt = Number(data.sklad_cnt);
    104312                row.comm = data.comm;
    105313
    106                 row.ondblclick = row.oncontextmenu=function(event) {
     314                row.ondblclick = row.oncontextmenu = function(event) {
    107315                        var menu = ShowPosContextMenu(event ,data.pos_id, '');
    108316                        if(poslist.editable) {
    109                                 var menudiv=document.createElement('div')
    110                                 menudiv.innerHTML='Правка комментария'
    111                                 menudiv.onclick=function() { poslist.showCommEditor(row); }
    112                                 menu.appendChild(menudiv)
    113                         }
    114                         return false
    115                 }
    116                
    117                 var linehtml="<td>"+(row_cnt+1);
    118                 if(poslist.editable)    linehtml+="<img src='/img/i_del.png' class='pointer' alt='Удалить' id='del"+row.lineIndex+"'>";
    119                 linehtml+="</td>";
    120                 if(poslist.show_column['vc']>0) linehtml+="<td>"+data.vc+"</td>";
    121                 var posname=data.name;
    122                 if(data.comm)   posname+="<br><small>"+data.comm+"</small>";
    123                 else            posname+="<br><small></small>";
    124                 linehtml+="<td class='la'>"+posname+"</td><td>"+data.scost+"</td><td";
    125                 if(data.retail)
    126                         linehtml+=" class='retail'";
    127                 linehtml+=">";
    128                 if(poslist.editable){
    129                         linehtml+="<input type='text' name='cost' value='"+data.cost+"'";
    130                         if(poslist.auto_price)
    131                                 linehtml+=" disabled";
    132                         linehtml+=">";
    133                 }
    134                 else                    linehtml+=data.cost;
    135                 linehtml+="</td><td>";
    136                 if(poslist.editable)    linehtml+="<input type='text' name='cnt' value='"+data.cnt+"'>";
    137                 else                    linehtml+=data.cnt;
    138                 linehtml+="</td><td>";
    139                 if(poslist.editable){
    140                         linehtml+="<input type='text' name='sum' value='"+sum+"'";
    141                         if(poslist.auto_price)
    142                                 linehtml+=" disabled";
    143                         linehtml+=">";
    144                 }
    145                 else                    linehtml+=sum;
    146                 linehtml+="</td><td>"+data.sklad_cnt+"</td><td>"+data.place+"</td>";
    147                 if(poslist.show_column['sn']>0) linehtml+="<td id='sn"+row.lineIndex+"'>"+data.sn+"</td>";
    148                 if(poslist.show_column['gtd']>0)linehtml+="<td id='gtd"+row.lineIndex+"'>"+data.gtd+"</td>";
    149                 row.innerHTML=linehtml;
    150 
    151                 if(poslist.editable) {
    152                         if(Number(data.cnt)>Number(data.sklad_cnt))     row.style.color="#f00";
    153                         var inputs=row.getElementsByTagName('input')
    154                         for(var i=0;i<inputs.length;i++)
    155                         {
    156                                 inputs[i].onkeydown=poslist.doInputKeyDown
    157                                 inputs[i].onblur=poslist.doInputBlur
    158                                 inputs[i].old_value=inputs[i].value
    159                         }
    160 
    161                         var img_del=document.getElementById('del'+data.line_id)
    162                         img_del.onclick=poslist.doDeleteLine
    163                         if(poslist.show_column['sn']>0)
    164                         {
    165                                 var sn_cell=document.getElementById('sn'+data.line_id)
    166                                 sn_cell.onclick=poslist.showSnEditor
    167                         }
    168                         if(poslist.show_column['gtd']>0)
    169                         {
    170                                 var gtd_cell=document.getElementById('gtd'+data.line_id)
    171                                 gtd_cell.onclick=poslist.showGTDEditor
    172                         }
    173                         var smalltag=row.getElementsByTagName('small')
    174                         for(var i=0;i<smalltag.length;i++)
    175                         {
    176                                 smalltag[i].onclick=function() { poslist.showCommEditor(row); }
    177                         }
    178                 }
    179         }
    180        
    181         poslist.fastAddLine=function(data) {
    182                 var tmp = '';
    183                 var row_cnt = poslist.tBodies[0].rows.length;
    184                 var row = poslist.tBodies[0].insertRow(row_cnt);
    185                 row.lineIndex = data.line_id;
    186                 row.id = 'posrow' + data.line_id;
    187                 var sum = (data.cost * data.cnt).toFixed(2);
    188                 row.sklad_cnt = Number(data.sklad_cnt);
    189                 row.comm = data.comm;
    190 
    191                 row.ondblclick = row.oncontextmenu=function(event) {
    192                         var menu = ShowPosContextMenu(event ,data.pos_id, '');
    193                         if(poslist.editable) {
    194                                 var menudiv=document.createElement('div')
    195                                 menudiv.innerHTML='Правка комментария'
    196                                 menudiv.onclick=function() { poslist.showCommEditor(row); }
    197                                 menu.appendChild(menudiv)
    198                         }
    199                         return false
    200                 }
     317                                var menudiv=document.createElement('div');
     318                                menudiv.innerHTML='Правка комментария';
     319                                menudiv.onclick=function() { poslist.showCommEditor(row); };
     320                                menu.appendChild(menudiv);
     321                        }
     322                        return false;
     323                };
    201324               
    202325                var fragment = document.createDocumentFragment();
     
    212335                        img_del.id = 'del'+row.lineIndex;       // Это, вероятно, лишенее
    213336                        img_del.onclick = poslist.doDeleteLine;
    214                         td_id.appendChild(img_id);
     337                        td_id.appendChild(img_del);
     338                        if(Number(data.cnt)>Number(data.sklad_cnt))
     339                                row.style.color="#f00";
    215340                }
    216341                fragment.appendChild(td_id);
    217342               
    218                 //var linehtml="<td>"+(row_cnt+1);
    219                 //if(poslist.editable)  linehtml+="<img src='/img/i_del.png' class='pointer' alt='Удалить' id='del"+row.lineIndex+"'>";
    220                 //linehtml+="</td>";
    221                
    222                 // Код производителя
    223                 if(poslist.show_column['vc']>0){
    224                         var td_vc = document.createElement('td');
    225                         textNode = document.createTextNode(data.vc);
    226                         td_vc.appendChild(textNode);
    227                         fragment.appendChild(td_vc);
    228                         //linehtml+="<td>"+data.vc+"</td>";
    229                 }
    230                
    231                 // Наименование и комментарий
    232                 var td_name = document.createElement('td');
    233                 textNode = document.createTextNode(data.name);
    234                 td_name.appendChild(textNode);
    235                 if(!data.comm)
    236                         data.comm = '';
    237                 tmp = document.createElement('br');
    238                 td_name.appendChild(tmp);
    239                 var comment = document.createElement('small');
    240                 textNode = document.createTextNode(data.comm);
    241                 comment.appendChild(textNode);
    242                 td_name.appendChild(comment);
    243                 if(poslist.editable) {
    244                         comment.onclick = function() { poslist.showCommEditor(row); };
    245                 }
    246                 fragment.appendChild(td_name);
    247                
    248                 //var posname = data.name;
    249                 //if(data.comm) posname+="<br><small>"+data.comm+"</small>";
    250                 //else          posname+="<br><small></small>";
    251                 //linehtml+="<td class='la'>"+posname+"</td>
    252                
    253                 // Складская цена
    254                 if(poslist.show_column['sprice'] > 0){
    255                         var td_sprice = document.createElement('td');
    256                         textNode = document.createTextNode(data.scost);
    257                         td_sprice.appendChild(textNode);
    258                         fragment.appendChild(td_sprice);
    259                         //<td>"+data.scost+"</td><td";
    260                 }
    261                
    262                 // Цена. Редактируемое.
    263                 if(poslist.show_column['price'] > 0){
    264                         var td_price = document.createElement('td');
    265                         if(data.retail)
    266                                 td_price.className = 'retail';
    267                         if(poslist.editable) {
    268                                 var price_input = document.createElement('input');
    269                                 price_input.type = 'text';
    270                                 price_input.name = 'cost';
    271                                 price_input.value = data.cost;
    272                                 price_input.old_value = price_input.value;
    273                                 price_input.onkeydown = poslist.doInputKeyDown;
    274                                 price_input.onblur = poslist.doInputBlur;                               
    275                                 td_price.appendChild(textNode);
    276                         }
    277                         else {
    278                                 textNode = document.createTextNode(data.cost);
    279                                 td_price.appendChild(textNode);
    280                         }
    281                         fragment.appendChild(td_price);
    282                         //<td>"+data.scost+"</td><td";
    283                 }
    284                
    285                 //if(data.retail)
    286                 //      linehtml+=" class='retail'";
    287                 //linehtml+=">";
    288 //              if(poslist.editable){
    289 //                      linehtml+="<input type='text' name='cost' value='"+data.cost+"'";
    290 //                      if(poslist.auto_price)
    291 //                              linehtml+=" disabled";
    292 //                      linehtml+=">";
    293 //              }
    294 //              else                    linehtml+=data.cost;
    295                
    296                 linehtml+="</td><td>";
    297                 if(poslist.editable)    linehtml+="<input type='text' name='cnt' value='"+data.cnt+"'>";
    298                 else                    linehtml+=data.cnt;
    299                 linehtml+="</td><td>";
    300                 if(poslist.editable){
    301                         linehtml+="<input type='text' name='sum' value='"+sum+"'";
    302                         if(poslist.auto_price)
    303                                 linehtml+=" disabled";
    304                         linehtml+=">";
    305                 }
    306                 else                    linehtml+=sum;
    307                 linehtml+="</td><td>"+data.sklad_cnt+"</td><td>"+data.place+"</td>";
    308                 if(poslist.show_column['sn']>0) linehtml+="<td id='sn"+row.lineIndex+"'>"+data.sn+"</td>";
    309                 if(poslist.show_column['gtd']>0)linehtml+="<td id='gtd"+row.lineIndex+"'>"+data.gtd+"</td>";
    310                 row.innerHTML=linehtml;
    311 
    312                 if(poslist.editable) {
    313                         if(Number(data.cnt)>Number(data.sklad_cnt))     row.style.color="#f00";
    314                         var inputs=row.getElementsByTagName('input')
    315                         for(var i=0;i<inputs.length;i++)
    316                         {
    317                                 inputs[i].onkeydown=poslist.doInputKeyDown
    318                                 inputs[i].onblur=poslist.doInputBlur
    319                                 inputs[i].old_value=inputs[i].value
    320                         }
    321 
    322                        
    323                         if(poslist.show_column['sn']>0)
    324                         {
    325                                 var sn_cell=document.getElementById('sn'+data.line_id)
    326                                 sn_cell.onclick=poslist.showSnEditor
    327                         }
    328                         if(poslist.show_column['gtd']>0)
    329                         {
    330                                 var gtd_cell=document.getElementById('gtd'+data.line_id)
    331                                 gtd_cell.onclick=poslist.showGTDEditor
    332                         }
    333                 }
    334         }
    335 
    336         poslist.UpdateLine=function(data)
    337         {
     343                var i;
     344                for(i=0;i<poslist.show_column.length;i++) {
     345                        switch(poslist.show_column[i]) {
     346                                case 'vc':
     347                                        fragment.appendChild(createConstCell(data.vc));
     348                                        break;
     349                                case 'name':
     350                                        fragment.appendChild(createNameCell(data, row));       
     351                                        break;
     352                                case 'sprice':
     353                                        fragment.appendChild(createConstCell(data.scost));     
     354                                        break;
     355                                case 'price':
     356                                        fragment.appendChild(createPriceCell(data, row));       
     357                                        break;
     358                                case 'cnt':
     359                                        fragment.appendChild(createCntCell(data, row));
     360                                        break;
     361                                case 'sum':
     362                                        fragment.appendChild(createSumCell(data, row));
     363                                        break;
     364                                case 'store_cnt':
     365                                        fragment.appendChild(createConstCell( Math.round(data.sklad_cnt*100)/100));     
     366                                        break;
     367                                case 'place':
     368                                        fragment.appendChild(createConstCell(data.place));     
     369                                        break;
     370                                case 'gtd':
     371                                        fragment.appendChild(createGtdCell(data.gtd)); 
     372                                        break;
     373                                case 'sn':
     374                                        fragment.appendChild(createSnCell(data.gtd));   
     375                                        break;
     376                                default:fragment.appendChild(createConstCell('???'+poslist.show_column[i]+'???'));     
     377                        }
     378                }
     379
     380                row.appendChild(fragment);
     381        };
     382
     383        poslist.UpdateLine=function(data) {
    338384                var line=document.getElementById('posrow'+data.line_id)
    339385                var inputs=line.getElementsByTagName('input')
     
    379425                        $.ajax({
    380426                                type:   'GET',
    381                                 url:    base_url,
     427                                url:    poslist.base_url,
    382428                                data:   'opt=jdel&line_id='+line.lineIndex,
    383429                                success: function(msg) { rcvDataSuccess(msg); },
     
    415461        }
    416462
    417         function rcvDataSuccess(msg)
    418         {
     463        function rcvDataSuccess(msg) {
    419464                try
    420465                {
     
    440485                                poslist.updateSumInfo(json);
    441486                        }
     487                        else if(json.response=='add') { // Вставка строки
     488                                poslist.AddLine(json.line);
     489                                poslist.updateSumInfo(json);
     490                        }
    442491                        else if(json.response==5) {
    443492                                poslist.RemoveLine(json.remove.line_id)
    444493                                poslist.updateSumInfo(json);
    445494                        }
    446                         else jAlert("Обработка полученного сообщения (" + json.response + ") не реализована!", "Изменение списка товаров", null,  'icon_err');
     495                        else jAlert("Обработка полученного сообщения (" + json.response + ") не реализована!", "Загрузка данных", null,  'icon_err');
    447496                }
    448497                catch(e)
    449498                {
    450499                        jAlert("Критическая ошибка!<br>Если ошибка повторится, уведомите администратора о том, при каких обстоятельствах возникла ошибка!"+
    451                         "<br><br><i>Информация об ошибке</i>:<br>"+e.name+": "+e.message+"<br>"+msg, "Вставка строки в документ", null,  'icon_err');
     500                        "<br><br><i>Информация об ошибке</i>:<br>"+e.name+": "+e.message+"<br>"+msg, "Загрузка данных", null,  'icon_err');
    452501                }
    453502        }
     
    464513                        $.ajax({
    465514                                type:   'GET',
    466                                 url:    base_url,
     515                                url:    poslist.base_url,
    467516                                data:   'opt=jup&type=gtd&value='+val+'&line_id='+line,
    468517                                success: function(msg) { rcvDataSuccess(msg); },
     
    489538                                $.ajax({
    490539                                type:   'GET',
    491                                 url:    base_url,
     540                                url:    poslist.base_url,
    492541                                data:   'opt=jup&type=comm&value='+encodeURIComponent(val)+'&line_id='+line,
    493542                                success: function(msg) { rcvDataSuccess(msg); },
     
    506555                $.ajax({
    507556                        type:   'GET',
    508                         url:    base_url,
     557                        url:    poslist.base_url,
    509558                        data:   'opt=jsn&a=l&line='+line,
    510559                        success: function(msg) { ShowSnEditorSuccess(msg); },
     
    573622                        $.ajax({
    574623                                type:   'GET',
    575                                 url:    base_url,
     624                                url:    poslist.base_url,
    576625                                data:   'opt=jsn&a=d&line='+line,
    577626                                success: function(msg) {
     
    597646                        $.ajax({
    598647                                type:   'GET',
    599                                 url:    base_url,
     648                                url:    poslist.base_url,
    600649                                data:   'opt=sns&pos='+line+'&sn='+sn.value,
    601650                                success: function(msg) { DocAddSnSuccess(msg); },
     
    633682                }
    634683        }
    635         var order_vc=document.getElementById('pl_order_vc')
    636         if(order_vc)
    637         {
    638 
    639                 order_vc.onclick=function(event)
    640                 {
     684
     685        // Строка быстрого добавления наименований
     686        function PladdInit(poslist) {
     687                poslist.footer = document.createElement('tfoot');
     688                poslist.appendChild(poslist.footer);
     689                var pladd = poslist.footer.insertRow(0);
     690                pladd.id = 'pladd';
     691                var tmp;
     692                var tab_index = 1;
     693
     694                function createInput(useFor) {
     695                        var input = document.createElement('input');
     696                        input.useFor = useFor;
     697                        input.autocomplete = 'off';
     698                        input.addEventListener( 'keyup', KeyUp, false);
     699                        input.tabIndex = tab_index++;
     700                        return input;
     701                }
     702
     703                var i;
     704                var input_id;
     705                var input_vc;
     706                var input_name;
     707                var input_price;
     708                var input_cnt;
     709                var cell_sum;
     710                var cell_store_cnt;
     711
     712                // ID
     713                tmp = document.createElement('td');
     714                input_id = createInput('id');
     715                tmp.appendChild(input_id);
     716                pladd.appendChild(tmp);
     717
     718                for(i=0;i<poslist.show_column.length;i++) {
     719                        tmp = document.createElement('td');
     720                        switch(poslist.show_column[i]) {
     721                                case 'vc':
     722                                        input_vc = createInput('vc');
     723                                        tmp.appendChild(input_vc);
     724                                        break;
     725                                case 'name':
     726                                        input_name = createInput('name');
     727                                        tmp.appendChild(input_name);
     728                                        break;
     729                                case 'price':
     730                                        input_price = createInput('price');
     731                                        tmp.appendChild(input_price);
     732                                        break;
     733                                case 'cnt':
     734                                        input_cnt = createInput('cnt');
     735                                        input_cnt.addEventListener( 'keydown', KeyDown, false);
     736                                        tmp.appendChild(input_cnt);     
     737                                        break;
     738                                case 'sum':
     739                                        cell_sum = tmp;
     740                                        break;
     741                                case 'store_cnt':
     742                                        cell_store_cnt = tmp;
     743                                        break;
     744                                default:;       
     745                        }
     746                        pladd.appendChild(tmp);
     747                }
     748                if(input_name) {
     749                        function nameFormat (row, i, num) {
     750                                var result = row[0] + "<em class='qnt'>произв. " +
     751                                row[2] + ", код: "+ row[3] + "</em> ";
     752                                return result;
     753                        }
     754
     755                        function nameselectItem(li) {
     756                                if( li == null ) var sValue = "Ничего не выбрано!";
     757                                else if( !!li.extra ) var sValue = li.extra[0];
     758                                input_id.value=sValue;
     759                                input_vc.value=li.extra[2];
     760                                input_price.value=0.5;
     761                                input_cnt.value=1;
     762                                input_name.focus();
     763                                pladd.doRefresh()
     764                        }
     765
     766                        $(input_name).autocomplete("/docs.php", {
     767                                delay:300,
     768                                minChars:1,
     769                                matchSubset:1,
     770                                autoFill:false,
     771                                selectFirst:true,
     772                                matchContains:1,
     773                                cacheLength:10,
     774                                maxItemsToShow:20,
     775                                formatItem:nameFormat,
     776                                onItemSelect:nameselectItem,
     777                                extraParams:{'l':'sklad','mode':'srv','opt':'ac'}
     778                        });
     779                }
     780
     781                if(input_vc) {
     782                        function vcFormat (row, i, num) {
     783                                var result = row[0];
     784                                return result;
     785                        }
     786
     787                        function vcselectItem(li) {
     788
     789                                if( li == null ) var sValue = "Ничего не выбрано!";
     790                                else if( !!li.extra ) var sValue = li.extra[0];
     791                                input_id.value=sValue;
     792                                input_name.value=li.extra[2];
     793                                input_price.value=0.5;
     794                                input_cnt.value=1;
     795                                input_vc.focus();
     796
     797                                pladd.doRefresh()
     798                        }
     799
     800                        $(input_vc).autocomplete("/docs.php", {
     801                                delay:300,
     802                                minChars:1,
     803                                matchSubset:1,
     804                                autoFill:false,
     805                                selectFirst:true,
     806                                matchContains:1,
     807                                cacheLength:10,
     808                                maxItemsToShow:20,
     809                                formatItem:vcFormat,
     810                                onItemSelect:vcselectItem,
     811                                extraParams:{'l':'sklad','mode':'srv','opt':'acv'}
     812                        });
     813                }
     814
     815                function AddData() {
    641816                        $.ajax({
    642817                                type:   'GET',
    643                         url:    base_url,
    644                         data:   'opt=jorder&by=vc',
    645                         success: function(msg) { poslist.refresh() },
    646                         error:   function() { jAlert('Ошибка!','Сортировка наименований',{},'icon_err'); },
     818                                url:    poslist.base_url,
     819                                data:   'opt=jadd&pos='+input_id.value+'&cnt='+input_cnt.value+'&cost='+input_price.value,
     820                                success: function(msg) { AddDataSuccess(msg); },
     821                                error:   function() { jAlert('Ошибка соединения!','Добавление наименования',null,'icon_err'); },
    647822                        });
    648823                }
    649         }
    650         var order_name=document.getElementById('pl_order_name')
    651         order_name.onclick=function(event)
    652         {
     824
     825                function AddDataSuccess(msg)
     826                {
     827                        try
     828                        {
     829                                var json=eval('('+msg+')');
     830                                if(json.response==0)
     831                                        jAlert(json.message,"Ошибка", {}, 'icon_err');
     832                                else if(json.response=='add')   // Вставка строки
     833                                {
     834                                        poslist.AddLine(json.line);
     835                                        poslist.updateSumInfo(json);
     836                                        pladd.Reset();
     837                                }
     838                                else if(json.response=='update')
     839                                {
     840                                        poslist.UpdateLine(json.update_line);
     841                                        poslist.updateSumInfo(json);
     842                                        pladd.Reset();
     843                                }
     844                                else jAlert("Обработка полученного сообщения не реализована<br>"+msg, "Вставка строки в документ", null,  'icon_err');
     845                        }
     846                        catch(e)
     847                        {
     848                                jAlert("Критическая ошибка!<br>Если ошибка повторится, уведомите администратора о том, при каких обстоятельствах возникла ошибка!"+
     849                                "<br><br><i>Информация об ошибке</i>:<br>"+e.name+": "+e.message+"<br>"+msg, "Вставка строки в документ", null,  'icon_err');
     850                        }
     851                }
     852
     853                pladd.Reset = function() {
     854                        input_id.value = '';
     855                        if(input_vc)
     856                                input_vc.value = '';
     857                        if(input_name)
     858                                input_name.value = '';
     859                        if(input_price)
     860                                input_price.value = '';
     861                        if(input_cnt)
     862                                input_cnt.value = '';
     863                        if(cell_sum)
     864                                cell_sum.innerHTML = '';
     865                        if(cell_store_cnt)
     866                                cell_store_cnt.innerHTML = '';
     867
     868                        if (input_vc)
     869                                input_vc.focus();
     870                        else    input_id.focus();
     871                        pladd.className = '';
     872                };
     873
     874                pladd.doRefresh = function() {
     875                        if (parseInt(input_id.value) == 0 || parseInt(input_id.value).toString() == 'NaN')
     876                                return;
     877                        pladd.className = 'process';
     878                        $.ajax({
     879                                type: 'GET',
     880                                url: poslist.base_url,
     881                                data: 'opt=jgpi&pos=' + parseInt(input_id.value),
     882                                success: function(msg) {
     883                                        pladd.doRefreshSuccess(msg);
     884                                },
     885                                error: function() {
     886                                        jAlert('Ошибка соединения!', 'Автодополнение по коду', null, 'icon_err');
     887                                        pladd.className = '';
     888                                }
     889                        });
     890                };
     891
     892                pladd.doRefreshSuccess = function(msg) {
     893                        try {
     894                                var json = eval('(' + msg + ')');
     895                                if (json.response == 0)
     896                                        jAlert(json.message, "Ошибка", {}, 'icon_err');
     897                                else if (json.response == 3) {  // Вставка строки
     898
     899                                        pladd.Refresh(json.data)
     900                                }
     901                                else jAlert("Обработка полученного сообщения не реализована<br>" + msg, "Получение информации о позиции", null, 'icon_err');
     902                        }
     903                        catch (e) {
     904                                jAlert("Критическая ошибка!<br>Если ошибка повторится, уведомите администратора о том, при каких обстоятельствах возникла ошибка!" +
     905                                        "<br><br><i>Информация об ошибке</i>:<br>" + e.name + ": " + e.message + "<br>" + msg, "Автодополнение", null, 'icon_err');
     906                        }
     907                        pladd.className = '';
     908                }
     909
     910                pladd.Refresh = function(data) {
     911                        if (input_vc)
     912                                input_vc.value = data.vc;
     913                        if(input_name)
     914                                input_name.value = data.name;
     915                        if(input_price)
     916                                input_price.value = data.cost;
     917                        if(input_cnt)
     918                                input_cnt.value = data.cnt;
     919                        if(cell_sum)
     920                                cell_sum.innerHTML = data.cost * data.cnt;
     921                        if(cell_store_cnt)
     922                                cell_store_cnt.innerHTML = data.sklad_cnt
     923                        if (data.line_id > 0)
     924                                pladd.className = 'error';
     925                }
     926
     927                function KeyUp(_e) {
     928                        var e = _e||window.event;
     929                        if(e.keyCode==13) {
     930                                if(e.target.useFor == 'cnt')
     931                                        AddData();
     932                                else {
     933                                        var td = e.target.parentNode.nextSibling;
     934                                        while (td.nextSibling) {
     935                                                if (td.nodeType != 1) {
     936                                                        td = td.nextSibling;
     937                                                        continue;
     938                                                }
     939                                                if(td.firstChild) {
     940                                                        if (td.firstChild.tagName == 'INPUT') {
     941                                                                td.firstChild.focus();
     942                                                                td.firstChild.select();
     943                                                                return;
     944                                                        }
     945                                                }
     946                                                td = td.nextSibling;
     947                                        }
     948                                }
     949                        }
     950                        //      AddData();
     951                        if( (e.target.useFor == 'price' || e.target.useFor == 'cnt') && cell_sum && input_price && input_cnt)
     952                                cell_sum.innerHTML = parseFloat(input_price.value)*parseFloat(input_cnt.value);
     953                        if( e.target.useFor == 'id') {
     954                                if( parseInt(input_id.value) != input_id.old_value ) {
     955                                        input_id.old_value = parseInt(input_id.value);
     956                                        pladd.doRefresh()
     957                                }
     958                        }
     959                }
     960
     961                function KeyDown(_e){
     962                        var e = _e||window.event;
     963                        if(e.keyCode==9 && this.useFor=='cnt')
     964                                return false;
     965                }
     966
     967                input_id.old_value = 0;
     968                pladd.Reset();
     969        }
     970
     971        // Callback для внешнего управления виджетом, например из skladlist
     972        poslist.exec = function(command, data) {
     973                switch(command) {
     974                        case 'sel_for_add': // Выбрано наименование для добавления
     975                                $.ajax({
     976                                        type:   'GET',
     977                                        url:    poslist_setup.base_url,
     978                                        data:   'opt=jadd&pos='+data.id+'&cost='+data.price+'&cnt='+data.cnt,
     979                                        success: function(msg) { rcvDataSuccess(msg); },
     980                                        error:   function() { jAlert('Ошибка соединения!','Добавление наименования',null,'icon_err'); },
     981                                });
     982                        break
     983                }
     984        }
     985
     986        init();
     987        poslist.refresh();
     988        var skladview = SkladViewInit(poslist_setup, poslist.exec);
     989
     990        if(!poslist.editable)
     991                skladview.style.display = 'none';
     992
     993        return poslist;
     994}
     995
     996
     997
     998// Блок со списком складской номенклатуры
     999function SkladViewInit(setup, callback) {
     1000        var container = document.getElementById(setup.store_container);
     1001        var skladlist = document.getElementById('sklad_list');
     1002        var groupdata_cache = new Array();
     1003        var old_hl = 0;
     1004        //skladview.show_column = new Array();
     1005        //skladlist.needDialog = 0;
     1006        var col_cnt = 0;
     1007       
     1008       
     1009        function init() { //< NEW
     1010                var tmp, tmp2;
     1011                var left_block = document.createElement('div');
     1012                var right_block = document.createElement('div');
     1013                container.className = 'storeview_container';
     1014                left_block.className = 'storeview_left';
     1015                right_block.className = 'storeview_right';
     1016               
     1017                container.filter_input = document.createElement('input');
     1018                container.filter_input.placeholder = 'Глобальный фильтр...';
     1019                container.filter_input.addEventListener('keydown', filterInputKeydown, false);
     1020                left_block.appendChild(container.filter_input);
     1021               
     1022                container.gl_block = document.createElement('div');             
     1023                container.gl_block.addEventListener('click', tree_toggle, false);
     1024                left_block.appendChild(container.gl_block);
     1025               
     1026                tmp = document.createElement('thead');
     1027                initTableHead(tmp);
     1028               
     1029                tmp2 = document.createElement('table');
     1030                tmp2.appendChild(tmp);
     1031               
     1032                skladlist = document.createElement('tbody');
     1033                tmp2.appendChild(skladlist);
     1034               
     1035                right_block.appendChild(tmp2);
     1036               
     1037                container.appendChild(left_block);
     1038                container.appendChild(right_block);
     1039               
     1040                tmp = document.createElement('div');
     1041                tmp.className='clear'
     1042                container.appendChild(tmp);
     1043               
    6531044                $.ajax({
    6541045                        type:   'GET',
    655                        url:    base_url,
    656                        data:   'opt=jorder&by=name',
    657                        success: function(msg) { poslist.refresh() },
    658                        error:   function() { jAlert('Ошибка!','Сортировка наименований',{},'icon_err'); },
     1046                        url:    setup.base_url,
     1047                        data:   'opt=jgetgroups',
     1048                        success: function(msg) { rcvDataSuccess(msg); },
     1049                        error:   function() { jAlert('Ошибка соединения!','Получение списка групп',null,'icon_err'); },
    6591050                });
    6601051        }
    661         var order_cost=document.getElementById('pl_order_cost')
    662         order_cost.onclick=function(event)
    663         {
     1052       
     1053        function initTableHead(head) { //< NEW
     1054                var tmp;
     1055                while(head.firstChild) {
     1056                        head.removeChild(head.firstChild);
     1057                }
     1058                var head_row = head.insertRow(0);
     1059                var th = document.createElement('th');
     1060                th.innerText = 'Id';
     1061                th.style.width='60px';
     1062                head_row.appendChild(th);
     1063               
     1064                for(i=0;i<setup.store_columns.length;i++) {
     1065                        th = document.createElement('th');
     1066                        th.innerText = setup.store_columns[i];
     1067//                      switch(setup.store_columns[i]) {
     1068//                              case 'price':
     1069//                              case 'place':
     1070//                              case 'store_cnt':
     1071//                              case 'allcnt':
     1072//                                      th.style.width='80px';
     1073//                                      break;
     1074//                      }
     1075                       
     1076                        head_row.appendChild(th);
     1077                        // TODO
     1078//                      tmp = document.createElement('div');
     1079//                      tmp.className = 'order_button';
     1080//                      tmp.useFor = poslist_setup.columns[i];
     1081//                      tmp.addEventListener( 'click', reOrder, false);
     1082//                      th.appendChild(tmp);
     1083                }
     1084                col_cnt = i+1;
     1085        }
     1086       
     1087        function rebuildGroupList(data) {  //< NEW
     1088                container.gl_block.innerHTML = '';
     1089               
     1090                function appendNode(dom_node, data_node, root) {
     1091                        var i;
     1092                        if(data_node.length) {
     1093                                var ul = document.createElement('ul');
     1094                                ul.className = 'Container';
     1095                                for(i=0;i<data_node.length;i++) {
     1096                                        var li = document.createElement('li');
     1097                                        li.className = 'Node';
     1098                                       
     1099                                        if(i == data_node.length-1)
     1100                                                li.className += ' IsLast';
     1101                                        if(root)
     1102                                                li.className += ' IsRoot';     
     1103                                       
     1104                                        var d_e = document.createElement('div');
     1105                                        d_e.className = 'Expand';
     1106                                        li.appendChild(d_e);
     1107                                        var d_c = document.createElement('div');
     1108                                        d_c.className = 'Content';
     1109                                        d_c.innerText = data_node[i].name;
     1110                                        d_c.forId = data_node[i].id;
     1111                                        d_c.addEventListener('click', getGroupData, false);
     1112                                        d_c.style.cursor='pointer';
     1113                                        li.appendChild(d_c);
     1114                                       
     1115                                        if(data_node[i].childs.length) {
     1116                                                li.className += ' ExpandClosed';
     1117                                                appendNode(li, data_node[i].childs, 0);
     1118                                        }
     1119                                        else    li.className += ' ExpandLeaf';
     1120
     1121                                        ul.appendChild(li);
     1122                                }
     1123                                dom_node.appendChild(ul);
     1124                        }
     1125                }
     1126               
     1127                appendNode(container.gl_block, data, 1);
     1128        }
     1129       
     1130        function filterInputKeydown(event) {
     1131                if(event.target.timer)
     1132                        window.clearTimeout(event.target.timer);
     1133                event.target.timer = window.setTimeout(function(){getSearchResult(event)}, 1000);
     1134        }
     1135
     1136        function getGroupData(event) {
     1137                if (old_hl)
     1138                        old_hl.style.backgroundColor = '';
     1139                event.target.style.backgroundColor = '#ffb';           
     1140                old_hl = event.target;
     1141               
     1142                var group = event.target.forId;
     1143                if (groupdata_cache[group])
     1144                        rcvDataSuccess(groupdata_cache[group]);
     1145                else    skladlist.innerHTML = "<tr><td colspan='20' style='text-align: center;'><img src='/img/icon_load.gif' alt='Загрузка...'></td></tr>";
     1146               
     1147                $.ajax({
     1148                        type: 'GET',
     1149                        url: setup.base_url,
     1150                        data: 'opt=jsklad&group_id=' + group,
     1151                        success: function(msg) {
     1152                                groupdata_cache[group] = msg;
     1153                                rcvDataSuccess(msg);
     1154                        },
     1155                        error: function() {
     1156                                jAlert('Ошибка соединения!', 'Получение содержимого группы', null, 'icon_err');
     1157                        },
     1158                });
     1159                return false;
     1160        }
     1161
     1162        function getSearchResult(event) {
     1163                if(old_hl)      old_hl.style.backgroundColor = '';
     1164                old_hl = 0;
     1165                s_str = event.target.value;
     1166                if(s_str=='')   return;
     1167                skladlist.innerHTML = "<tr><td colspan='20' style='text-align: center;'><img src='/img/icon_load.gif' alt='Загрузка...'></td></tr>"
    6641168                $.ajax({
    6651169                        type:   'GET',
    666                        url:    base_url,
    667                        data:   'opt=jorder&by=cost',
    668                        success: function(msg) { poslist.refresh() },
    669                        error:   function() { jAlert('Ошибка!','Сортировка наименований',{},'icon_err'); },
    670                 });
    671         }
    672         var order_loc=document.getElementById('pl_order_loc')
    673         if(order_loc)
    674         order_loc.onclick=function(event)
    675         {
    676                 $.ajax({
    677                         type:   'GET',
    678                        url:    base_url,
    679                        data:   'opt=jorder&by=loc',
    680                        success: function(msg) { poslist.refresh() },
    681                        error:   function() { jAlert('Ошибка!','Сортировка наименований',{},'icon_err'); },
    682                 });
    683         }
    684 
    685         return poslist
    686 }
    687 
    688 // Строка быстрого добавления наименований
    689 function PladdInit()
    690 {
    691         var poslist=document.getElementById('poslist');
    692         var pladd=document.getElementById('pladd');
    693         if(!poslist.editable)
    694         {
    695                 pladd.style.display='none'
    696         }
    697 
    698         //pladd.style.backgroundColor='#000';
    699         var pos_id=document.getElementById('pos_id');
    700         var pos_vc=document.getElementById('pos_vc');
    701         var pos_name=document.getElementById('pos_name');
    702         var pos_scost=document.getElementById('pos_scost');
    703         var pos_cost=document.getElementById('pos_cost');
    704         var pos_cnt=document.getElementById('pos_cnt');
    705         var pos_sum=document.getElementById('pos_sum');
    706         var pos_sklad_cnt=document.getElementById('pos_sklad_cnt');
    707         var pos_mesto=document.getElementById('pos_cnt');
    708 
    709         var p_sum=document.getElementById('sum');
    710 
    711         $("#pos_name").autocomplete("/docs.php", {
    712                 delay:300,
    713                 minChars:1,
    714                 matchSubset:1,
    715                 autoFill:false,
    716                 selectFirst:true,
    717                 matchContains:1,
    718                 cacheLength:10,
    719                 maxItemsToShow:20,
    720                 formatItem:nameFormat,
    721                 onItemSelect:nameselectItem,
    722                 extraParams:{'l':'sklad','mode':'srv','opt':'ac'}
    723         });
    724 
    725         if(pos_vc)
    726         {
    727                 $("#pos_vc").autocomplete("/docs.php", {
    728                         delay:300,
    729                         minChars:1,
    730                         matchSubset:1,
    731                         autoFill:false,
    732                         selectFirst:true,
    733                         matchContains:1,
    734                         cacheLength:10,
    735                         maxItemsToShow:20,
    736                         formatItem:vcFormat,
    737                         onItemSelect:vcselectItem,
    738                         extraParams:{'l':'sklad','mode':'srv','opt':'acv'}
    739                 });
    740         }
    741         function nameFormat (row, i, num) {
    742                 var result = row[0] + "<em class='qnt'>произв. " +
    743                 row[2] + ", код: "+ row[3] + "</em> ";
    744                 return result;
    745         }
    746 
    747         function nameselectItem(li) {
    748                 if( li == null ) var sValue = "Ничего не выбрано!";
    749                 else if( !!li.extra ) var sValue = li.extra[0];
    750                 //else var sValue = li.selectValue;
    751                 pos_id.value=sValue;
    752                 pos_vc.value=li.extra[2];
    753                 pos_cost.value=0.5;
    754                 pos_cnt.value=1;
    755                 pos_name.focus();
    756 
    757                 pladd.doRefresh()
    758         }
    759 
    760         function vcFormat (row, i, num)
    761         {
    762                 var result = row[0];
    763                 return result;
    764         }
    765 
    766         function vcselectItem(li)
    767         {
    768 
    769                 if( li == null ) var sValue = "Ничего не выбрано!";
    770                 else if( !!li.extra ) var sValue = li.extra[0];
    771                 //else var sValue = li.selectValue;
    772                 pos_id.value=sValue;
    773                 pos_name.value=li.extra[2];
    774                 pos_cost.value=0.5;
    775                 pos_cnt.value=1;
    776                 pos_vc.focus();
    777 
    778                 pladd.doRefresh()
    779         }
    780 
    781         function AddData()
    782         {
    783                 $.ajax({
    784                         type:   'GET',
    785                         url:    poslist.base_url,
    786                         data:   'opt=jadd&pos='+pos_id.value+'&cnt='+pos_cnt.value+'&cost='+pos_cost.value,
    787                         success: function(msg) { AddDataSuccess(msg); },
    788                         error:   function() { jAlert('Ошибка соединения!','Добавление наименования',null,'icon_err'); },
    789                 });
    790         }
    791 
    792         function AddDataSuccess(msg)
    793         {
    794                 try
    795                 {
    796                         var json=eval('('+msg+')');
    797                         if(json.response==0)
    798                                 jAlert(json.message,"Ошибка", {}, 'icon_err');
    799                         else if(json.response=='add')   // Вставка строки
    800                         {
    801                                 poslist.AddLine(json.line);
    802                                 poslist.updateSumInfo(json);
    803                                 pladd.Reset();
    804                         }
    805                         else if(json.response=='update')
    806                         {
    807                                 poslist.UpdateLine(json.update_line);
    808                                 poslist.updateSumInfo(json);
    809                                 pladd.Reset();
    810                         }
    811                         else jAlert("Обработка полученного сообщения не реализована<br>"+msg, "Вставка строки в документ", null,  'icon_err');
    812                 }
    813                 catch(e)
    814                 {
    815                         jAlert("Критическая ошибка!<br>Если ошибка повторится, уведомите администратора о том, при каких обстоятельствах возникла ошибка!"+
    816                         "<br><br><i>Информация об ошибке</i>:<br>"+e.name+": "+e.message+"<br>"+msg, "Вставка строки в документ", null,  'icon_err');
    817                 }
    818         }
    819 
    820         pladd.Reset=function()
    821         {
    822                 pos_id.value=''
    823                 if(pos_vc)      pos_vc.value=''
    824                 pos_name.value=''
    825                 pos_scost.innerHTML=''
    826                 pos_cost.value=''
    827                 pos_cnt.value=''
    828                 pos_sum.innerHTML=''
    829                 pos_sklad_cnt.innerHTML=''
    830                 pos_mesto.innerHTML=''
    831                 if(pos_vc)      pos_vc.focus()
    832                 else            pos_id.focus();
    833                 $('#pladd').removeClass('process')
    834                 $('#pladd').removeClass('error')
    835         }
    836 
    837         pladd.doRefresh=function()
    838         {
    839                 if(parseInt(pos_id.value)==0  || parseInt(pos_id.value).toString()=='NaN')      return
    840                 $('#pladd').addClass('process')
    841                 $('#pladd').removeClass('error')
    842                 $.ajax({
    843                         type:   'GET',
    844                         url:    poslist.base_url,
    845                         data:   'opt=jgpi&pos='+parseInt(pos_id.value),
    846                         success: function(msg) { pladd.doRefreshSuccess(msg); },
    847                         error:   function() { jAlert('Ошибка соединения!','Автодополнение по коду',null,'icon_err'); $('#pladd').removeClass('process'); },
    848                 });
    849 
    850         }
    851 
    852         pladd.doRefreshSuccess=function(msg)
    853         {
    854                 try
    855                 {
    856                         var json=eval('('+msg+')');
    857                         if(json.response==0)
    858                                 jAlert(json.message,"Ошибка", {}, 'icon_err');
    859                         else if(json.response==3)       // Вставка строки
    860                         {
    861                                 pladd.Refresh(json.data)
    862                         }
    863                         else jAlert("Обработка полученного сообщения не реализована<br>"+msg, "Получение информации о позиции", null,  'icon_err');
    864                 }
    865                 catch(e)
    866                 {
    867                         jAlert("Критическая ошибка!<br>Если ошибка повторится, уведомите администратора о том, при каких обстоятельствах возникла ошибка!"+
    868                         "<br><br><i>Информация об ошибке</i>:<br>"+e.name+": "+e.message+"<br>"+msg, "Автодополнение", null,  'icon_err');
    869                 }
    870                 $('#pladd').removeClass('process');
    871         }
    872 
    873         pladd.Refresh=function(data)
    874         {
    875                 if(pos_vc)      pos_vc.value=data.vc
    876                 pos_name.value=data.name
    877                 pos_scost.innerHTML=data.scost
    878                 pos_cost.value=data.cost
    879                 pos_cnt.value=data.cnt
    880                 pos_sum.innerHTML=data.cost*data.cnt
    881                 pos_sklad_cnt.innerHTML=data.sklad_cnt
    882                 pos_mesto.innerHTML=data.place
    883                 if(data.line_id>0)      $('#pladd').addClass('error')
    884         }
    885 
    886         function KeyUp(e)
    887         {
    888                 var e = e||window.event;
    889                 if(e.keyCode==13)
    890                 {
    891                         if(this.id=='pos_cnt')  AddData()
    892                         else
    893                         {
    894                                 var td=this.parentNode.nextSibling
    895                                 while(td.nextSibling)
    896                                 {
    897                                         if(td.nodeType!=1)
    898                                         {
    899                                                 td=td.nextSibling
    900                                                 continue
    901                                         }
    902                                         if(td.firstChild.tagName=='INPUT')
    903                                         {
    904                                                 td.firstChild.focus()
    905                                                 td.firstChild.select()
    906                                                 return
    907                                         }
    908                                         td=td.nextSibling
    909                                 }
    910                         }
    911                 }
    912                 //      AddData();
    913                 if( this.id=='pos_cost' || this.id=='pos_cnt' )
    914                         pos_sum.innerHTML=parseFloat(pos_cost.value)*parseFloat(pos_cnt.value)
    915                 if( this.id=='pos_id')
    916                 {
    917                         if(parseInt(pos_id.value)!=pos_id.old_value )
    918                         {
    919                                 pos_id.old_value=parseInt(pos_id.value)
    920                                 pladd.doRefresh()
    921                         }
    922                 }
    923         }
    924 
    925         function KeyDown(e)
    926         {
    927                 var e = e||window.event;
    928                 if(e.keyCode==9 && this.id=='pos_cnt') return false
    929         }
    930 
    931         pos_id.old_value=0
    932 
    933         pos_id.onkeyup=KeyUp
    934         if(pos_vc)      pos_vc.onkeyup=KeyUp
    935         pos_name.onkeyup=KeyUp
    936         pos_cost.onkeyup=KeyUp
    937         pos_cnt.onkeyup=KeyUp
    938         pos_cnt.onkeydown=KeyDown
    939         pladd.Reset()
    940 }
    941 
    942 // Блок со списком складской номенклатуры
    943 function SkladViewInit(doc)
    944 {
    945         var poslist=document.getElementById('poslist')
    946         var skladview=document.getElementById('sklad_view')
    947         var skladlist=document.getElementById('sklad_list')
    948         var p_sum=document.getElementById('sum')
    949         var sklsearch=document.getElementById('sklsearch')
    950         var groupdata_cache=new Array()
    951         var old_hl=0
    952         skladview.show_column=new Array();
    953         sklsearch.timer=0
    954         skladlist.needDialog=0
    955 
    956         sklsearch.onkeydown=function(event)
    957         {
    958                 if(sklsearch.timer)     window.clearTimeout(sklsearch.timer)
    959                 sklsearch.timer=window.setTimeout(function(){skladlist.getSearchResult(event)}, 1000)
    960         }
    961 
    962         skladlist.getGroupData=function (event,group)
    963         {
    964                 if(old_hl)      old_hl.style.backgroundColor=''
    965                 event.target.parentNode.style.backgroundColor='#ffb'
    966                 old_hl=event.target.parentNode
    967                 skladlist.innerHTML="<tr><td colspan='20' style='text-align: center;'><img src='/img/icon_load.gif' alt='Загрузка...'></td></tr>"
    968                 if(groupdata_cache[group])      rcvDataSuccess(groupdata_cache[group])
    969                 $.ajax({
    970                         type:   'GET',
    971                         url:    poslist.base_url,
    972                         data:   'opt=jsklad&group_id='+group,
    973                         success: function(msg) { groupdata_cache[group]=msg;rcvDataSuccess(msg); },
    974                         error:   function() { jAlert('Ошибка соединения!','Получение содержимого группы',null,'icon_err'); },
    975                 });
    976                 return false
    977         }
    978 
    979         skladlist.getSearchResult=function (event)
    980         {
    981                 if(old_hl)      old_hl.style.backgroundColor=''
    982                 old_hl=0
    983                 s_str=event.target.value
    984                 if(s_str=='')   return
    985                 skladlist.innerHTML="<tr><td colspan='20' style='text-align: center;'><img src='/img/icon_load.gif' alt='Загрузка...'></td></tr>"
    986                 $.ajax({
    987                         type:   'GET',
    988                         url:    poslist.base_url,
     1170                        url:    setup.base_url,
    9891171                        data:   'opt=jsklads&s='+encodeURIComponent(s_str),
    9901172                        success: function(msg) { rcvDataSuccess(msg); },
     
    9941176        }
    9951177
    996         skladlist.AddLine=function(data)
     1178// Ячейки
     1179        function createConstCell(value) {
     1180                var td = document.createElement('td');
     1181                var textNode = document.createTextNode(value);
     1182                td.appendChild(textNode);
     1183                return td;
     1184        }
     1185       
     1186        function createHTMLCell(value) {
     1187                var td = document.createElement('td');
     1188                td.innerHTML=value;
     1189                return td;
     1190        }
     1191
     1192        function AddLine(data) {
     1193                var row_cnt = skladlist.rows.length;
     1194                var row = skladlist.insertRow(row_cnt);
     1195               
     1196               
     1197                if(data.id != 'header') {
     1198                        row.lineIndex = data.id;
     1199                        row.id = 'skladrow' + data.id;
     1200                        row.data = data;
     1201                        row.className = 'pointer';
     1202                        row.style.textAlign = 'right';
     1203                        if(setup.editable)
     1204                                row.addEventListener( 'click', clickRow, false);
     1205                        row.addEventListener( 'contextmenu', contextMenu, false);
     1206                       
     1207                        var fragment = document.createDocumentFragment();
     1208               
     1209                        // N линии и кнопка *удалить*
     1210                        var td = document.createElement('td');
     1211                        var textNode = document.createTextNode(row_cnt+1);
     1212                        td.appendChild(textNode);
     1213                        fragment.appendChild(td);
     1214
     1215                        var i;
     1216                        for(i=0;i<setup.store_columns.length;i++) {
     1217                                var cellname = setup.store_columns[i];
     1218                                var value = data[cellname];
     1219                                if(value==null)
     1220                                        value = '';
     1221                                switch(cellname) {
     1222                                        case 'vc':
     1223                                        case 'name':
     1224                                        case 'vendor':
     1225                                                td = fragment.appendChild(createConstCell(value));
     1226                                                td.style.textAlign = 'left';
     1227                                                break;
     1228                                        case 'place':
     1229                                        case 'type':
     1230                                        case 'd_int':
     1231                                        case 'd_ext':
     1232                                        case 'size':
     1233                                        case 'mass':   
     1234                                                fragment.appendChild(createConstCell(value));   
     1235                                                break;
     1236                                        case 'transit':
     1237                                        case 'reserve':
     1238                                        case 'offer':
     1239                                                if(value==0)
     1240                                                        value = '';
     1241                                                td = fragment.appendChild(createConstCell(value));
     1242                                                td.className = cellname;
     1243                                                break;
     1244                                        case 'price':
     1245                                                if(value==0)
     1246                                                        value = '';
     1247                                                else    value = number_format(value, 2, '.', '\'');
     1248                                                td = fragment.appendChild(createHTMLCell(value));
     1249                                                if(data.price_cat)
     1250                                                        td.className = data.price_cat;
     1251                                                break;
     1252                                        case 'liquidity':
     1253                                                if(value==0)
     1254                                                        value = '';
     1255                                                else    value = number_format(value, 2, '.', '\'');
     1256                                                td = fragment.appendChild(createHTMLCell(value));
     1257                                                break;
     1258                                        case 'cnt':
     1259                                        case 'allcnt':
     1260                                                if(value==0)
     1261                                                        value = '';
     1262                                                else    value = number_format(value, 3, '.', '\'');
     1263                                                fragment.appendChild(createHTMLCell(value));
     1264                                                break;
     1265                                        default:fragment.appendChild(createConstCell('???'+cellname+'???'));   
     1266                                }
     1267                        }
     1268
     1269                        row.appendChild(fragment);
     1270                }
     1271                else {
     1272                        var th = document.createElement('th');
     1273                        th.colSpan = col_cnt;
     1274                        th.className = 'searchinfo';
     1275                        var textNode = document.createTextNode(data.name);
     1276                        th.appendChild(textNode);
     1277                        row.appendChild(th);
     1278                }
     1279               
     1280        }
     1281       
     1282        function contextMenu(event) {
     1283                var line_id = 0;
     1284                if(event.target.lineIndex)
     1285                        line_id = event.target.lineIndex;
     1286                if(event.target.parentNode.lineIndex)
     1287                        line_id = event.target.parentNode.lineIndex;
     1288                if(line_id)
     1289                        ShowPosContextMenu(event, line_id, '');
     1290                event.preventDefault();
     1291                return false;
     1292        }
     1293
     1294        function clickRow(event)
    9971295        {
    998                 var row_cnt=skladlist.rows.length
    999                 var row=skladlist.insertRow(row_cnt)
    1000                 var linehtml=''
    1001                 if(data.id!='header')
    1002                 {
    1003                         row.lineIndex=data.id
    1004                         row.id='skladrow'+data.id
    1005                         row.data=data
    1006                         row.className='pointer'
    1007                         //row.onclick=function() {AddData(data)}
    1008                         if(poslist.editable)    row.onclick=skladlist.clickRow
    1009                         row.oncontextmenu=function(){ ShowPosContextMenu(event ,data.id,''); return false }
    1010                         linehtml+="<td>"+data.id+"</td>"
    1011                         if(skladview.show_column['vc']>0)       linehtml+="<td>"+data.vc+"</td>"
    1012                         linehtml+="<td class='la'>"+data.name+"</td><td class='la'>"+data.vendor+"</td><td class='"+data.cost_class+"'>"+data.cost+"</td><td>"+data.liquidity+"</td><td>"+data.in_cost+"</td><td>"+data.analog+"</td>"
    1013                         if(skladview.show_column['tdb']>0)      linehtml+="<td>"+data.type+"</td><td>"+data.d_int+"</td><td>"+data.d_ext+"</td><td>"+data.size+"</td><td>"+data.mass+"</td>"
    1014                         if(skladview.show_column['rto']>0) {
    1015                                 if(!data.reserve)       data.reserve='';
    1016                                 if(!data.offer)         data.offer='';
    1017                                 if(!data.transit)       data.transit='';
    1018                                
    1019                                 linehtml+="<td class='reserve'>"+data.reserve+"</td><td class='offer'>"+data.offer+"</td><td class='transit'>"+data.transit+"</td>"
    1020                         }
    1021                         linehtml+="<td>"+data.cnt+"</td><td>"+data.allcnt+"</td><td>"+data.place+"</td>"
    1022                 }
    1023                 else
    1024                 {
    1025                         var count=10;
    1026                         if(skladview.show_column['vc']>0)       count++;
    1027                         if(skladview.show_column['tdb']>0)      count+=5;
    1028                         if(skladview.show_column['rto']>0)      count+=3;
    1029                         linehtml+="<th colspan='"+count+"'>"+data.name+"</th>"
    1030                 }
    1031                 row.innerHTML=linehtml
    1032 //              var img_del=document.getElementById('del'+data.line_id)
    1033 //              img_del.onclick=poslist.doDeleteLine
    1034         }
    1035 
    1036         skladlist.clickRow=function(event)
    1037         {
    1038                 if(event.target.className=='reserve')           ShowPopupWin('/docs.php?l=inf&mode=srv&opt=rezerv&pos='+this.data.id)
    1039                 else if(event.target.className=='offer')        ShowPopupWin('/docs.php?l=inf&mode=srv&opt=p_zak&pos='+this.data.id)
    1040                 else if(event.target.className=='transit')      ShowPopupWin('/docs.php?l=inf&mode=srv&opt=vputi&pos='+this.data.id);
    1041                 else
    1042                 {
     1296               
     1297                var line = 0;
     1298                if(event.target.tagName=='TR')
     1299                        line = event.target;
     1300                else if(event.target.parentNode.tagName=='TR')
     1301                        line = event.target.parentNode;
     1302                else if(event.target.parentNode.parentNode.tagName=='TR')
     1303                        line = event.target.parentNode.parentNode;
     1304                       
     1305                if(event.target.className=='reserve')           ShowPopupWin('/docs.php?l=inf&mode=srv&opt=rezerv&pos='+line.lineIndex)
     1306                else if(event.target.className=='offer')        ShowPopupWin('/docs.php?l=inf&mode=srv&opt=p_zak&pos='+line.lineIndex)
     1307                else if(event.target.className=='transit')      ShowPopupWin('/docs.php?l=inf&mode=srv&opt=vputi&pos='+line.lineIndex);
     1308                else {
    10431309                        if(skladlist.needDialog)
    10441310                        {
     
    10531319                        pop_cost.focus()
    10541320                        }
    1055                         else AddToPosList(this.data)
     1321                        else AddToPosList(line.data)
    10561322                }
    10571323        }
     
    10661332                        else if(json.response=='sklad_list')
    10671333                        {
    1068                                 skladlist.innerHTML=''
     1334                                skladlist.innerHTML = '';
    10691335                                for(var i=0;i<json.content.length;i++)
    10701336                                {
    1071                                         skladlist.AddLine(json.content[i])
    1072                                 }
    1073                                 poslist.updateSumInfo(json);
    1074                         }
    1075                         else if(json.response=='add')   // Вставка строки
    1076                         {
    1077                                 poslist.AddLine(json.line)
    1078                                 poslist.updateSumInfo(json);
    1079                         }
    1080                         else if(json.response=='update')
    1081                         {
    1082                                 poslist.UpdateLine(json.update_line);
    1083                                 poslist.updateSumInfo(json);
     1337                                        AddLine(json.content[i]);
     1338                                }
     1339                        }
     1340                        else if(json.response=='group_list') {
     1341                                rebuildGroupList(json.content);
    10841342                        }
    10851343                        else jAlert("Обработка полученного сообщения не реализована<br>"+msg, "Вставка строки в документ", null,  'icon_err');
     
    10881346                {
    10891347                        jAlert("Критическая ошибка!<br>Если ошибка повторится, уведомите администратора о том, при каких обстоятельствах возникла ошибка!"+
    1090                         "<br><br><i>Информация об ошибке</i>:<br>"+e.name+": "+e.message+"<br>"+msg, "Вставка строки в документ", null,  'icon_err');
    1091                 }
    1092         }
    1093 
    1094         function AddToPosList(data, cnt)
    1095         {
    1096                 if(!cnt)        cnt=1
    1097                 $.ajax({
    1098                         type:   'GET',
    1099                         url:    poslist.base_url,
    1100                         data:   'opt=jadd&pos='+data.id+'&cost='+data.cost+'&cnt='+cnt,
    1101                         success: function(msg) { rcvDataSuccess(msg); },
    1102                         error:   function() { jAlert('Ошибка соединения!','Добавление наименования',null,'icon_err'); },
    1103                 });
    1104         }
    1105         return skladview
     1348                        "<br><br><i>Информация об ошибке</i>:<br>"+e.name+": "+e.message+"<br>"+msg, "rcv Вставка строки в документ", null,  'icon_err');
     1349                }
     1350        }
     1351
     1352        function AddToPosList(data, cnt) {
     1353                if(!cnt)
     1354                        cnt=1;
     1355                data.cnt = cnt;
     1356                callback('sel_for_add', data);
     1357        }
     1358       
     1359        init();
     1360        return container;
    11061361}
    11071362
     
    11101365{
    11111366        var skladlist=document.getElementById('sklad_list');
    1112         return skladlist.getGroupData(event, group)
     1367        return skladlist.getGroupData(event, group);
    11131368}
  • web/docj.php

    r4048d16 r170cbd7  
    885885        FROM `doc_log`
    886886        LEFT JOIN `users` ON `users`.`id`=`doc_log`.`user`
    887         WHERE `doc_log`.`object`='doc' AND `doc_log`.`object_id`='$doc'");
     887        WHERE `doc_log`.`object`='doc' AND `doc_log`.`object_id`='$doc'
     888        ORDER BY `doc_log`.`time` DESC");
    888889        $tmpl->addContent("<h1>История документа $doc</h1>
    889890        <table width=100%>
  • web/include/doc.nulltype.php

    r4048d16 r170cbd7  
    11931193                                $tmpl->addContent($doc_content);
    11941194                        }
     1195                        else if($opt=='jgetgroups')
     1196                        {
     1197                                $doc_content = $poseditor->getGroupList();
     1198                                $tmpl->addContent($doc_content);
     1199                        }
    11951200                        // Снять пометку на удаление
    11961201                        else if($opt=='jundeldoc')
  • web/include/doc.poseditor.php

    r4048d16 r170cbd7  
    5353{
    5454        return "Отбор:<input type='text' id='sklsearch'><br>
    55         <div onclick='tree_toggle(arguments[0])'>
     55        <div onclick='tree_toggle()'>
    5656        <div><a href='' onclick=\"\">Группы</a></div>
    5757        <ul class='Container'>".$this->getGroupLevel(0)."</ul>
     
    8181}
    8282
     83function 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
    8399function getOrder(){
    84100        global $CONFIG;
     
    175191        return $pc;
    176192}
    177 
    178 
     193        // Получить список групп в виде json
     194        public function getGroupList() {
     195                $ret_data = array (
     196                        'response'      => 'group_list',
     197                        'content'       => $this->getGroupData(0)
     198                );
     199
     200                return json_encode($ret_data, JSON_UNESCAPED_UNICODE);
     201        }
    179202
    180203/// Формирует html код списка товаров документа
     
    189212        <script src='/css/poseditor.js' type='text/javascript'></script>
    190213        <link href='/css/poseditor.css' rel='stylesheet' type='text/css' media='screen'>
    191         <table width='100%' id='poslist'><thead><tr>
    192         <th width='60px' align='left'>№</th>";
    193         if($this->show_vc>0)
    194                 $ret.="<th width='90px' align='left' title='Код изготовителя'><div class='order_button' id='pl_order_vc'></div> Код</th>";
    195         $ret.="<th><div class='order_button' id='pl_order_name'></div> Наименование</th>
    196         <th width='90px' title='Выбранная цена'>Выбр. цена</th>
    197         <th width='90px' class='hl'><div class='order_button' id='pl_order_cost'></div> Цена</th>
    198         <th width='60px' class='hl'>Кол-во</th>
    199         <th width='90px' class='hl'>Стоимость</th>
    200         <th width='60px' title='Остаток товара на складе'>Остаток</th>
    201         <th width='90px'><div class='order_button' id='pl_order_loc'></div> Место</th>";
    202         if($this->show_sn)      $ret.="<th>SN</th>";
    203         if($this->show_gtd)     $ret.="<th>ГТД</th>";
    204         $ret.="</tr></thead><tfoot><tr id='pladd'>
    205         <td><input type='text' id='pos_id' autocomplete='off' tabindex='1'></td>";
    206         if($this->show_vc>0)    $ret.="<td><input type='text' id='pos_vc' autocomplete='off' tabindex='2'></td>";
    207         $ret.="<td><input type='text' id='pos_name' autocomplete='off' tabindex='3'></td>
    208         <td id='pos_scost'></td>
    209         <td><input type='text' id='pos_cost' autocomplete='off' tabindex='4'></td>
    210         <td><input type='text' id='pos_cnt' autocomplete='off' tabindex='5'></td>
    211         <td id='pos_sum'></td>
    212         <td id='pos_sklad_cnt'></td>
    213         <td id='pos_mesto'></td>";
    214         if($this->show_sn)      $ret.="<td></td>";
    215         if($this->show_gtd)     $ret.="<td></td>";
    216 
    217         $ret.="</tr></tfoot><tbody>
    218         <tr><td colspan='9' style='text-align: center;'><img src='/img/icon_load.gif' alt='Загрузка...'>
    219         </tbody></table>
    220         <p align='right' id='sum'></p>";
    221 
    222         $ret.="<table id='sklad_view'>
    223         <tr><td id='groups_list' width='200' valign='top' class='lin0'>";
    224         $ret.=$this->getGroupsTree();
    225         $ret.="</td><td valign='top' class='lin1'>
    226         <table width='100%' cellspacing='1' cellpadding='2'>
    227         <tr><thead>
    228         <th>№";
    229         if($this->show_vc>0)    $ret.="<th>Код";
    230         $ret.="<th>Наименование<th>Марка<th>Цена, р.<th>Ликв.<th>АЦП, р.<th>Аналог";
    231         if($this->show_tdb>0)   $ret.="<th>Тип<th>d<th>D<th>B<th>Масса";
    232         if($this->show_rto>0)   $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='В пути'>";
    233         $ret.="<th>Склад<th>Всего<th>Место
    234         </thead>
    235         <tbody id='sklad_list'>
    236         </tbody>
    237         </table>
    238         </td></tr>
    239         </table>";
     214        <div id='poseditor_div'></div>
     215        <div id='storeview_container'></div>";
     216
    240217        if(!@$CONFIG['poseditor']['need_dialog'])       $CONFIG['poseditor']['need_dialog']=0;
    241218        else                                            $CONFIG['poseditor']['need_dialog']=1;
    242         $ret.=@"<script type=\"text/javascript\">
    243         var poslist=PosEditorInit('/doc.php?doc={$this->doc}&mode=srv',{$this->editable})
    244         poslist.show_column['sn']='{$this->show_sn}'
    245         poslist.show_column['vc']='{$this->show_vc}'
    246         poslist.show_column['gtd']='{$this->show_gtd}'
    247 
    248         var skladview=document.getElementById('sklad_view')
    249         skladview.show_column['vc']='{$this->show_vc}'
    250         skladview.show_column['tdb']='{$this->show_tdb}'
    251         skladview.show_column['rto']='{$this->show_rto}'
    252 
    253         skladlist=document.getElementById('sklad_list').needDialog={$CONFIG['poseditor']['need_dialog']};
     219       
     220        $p_setup = array(
     221            'base_url'  => '/doc.php?doc='.$this->doc.'&mode=srv',
     222            'editable'  => $this->editable,
     223            'container' => 'poseditor_div',
     224            'store_container'   => 'storeview_container',
     225            'fastadd_line'=> 1,         // Показывать строку быстрого подбора
     226        );
     227       
     228        $cols = array();
     229        $col_names = array();
     230        if($this->show_vc) {
     231                $cols[] = 'vc';
     232                $col_names[] = 'Код';
     233        }
     234        $cols[] = 'name';
     235        $col_names[] = 'Наименование';
     236        $cols[] = 'sprice';
     237        $col_names[] = 'Выб. цена';
     238        $cols[] = 'price';
     239        $col_names[] = 'Цена';
     240        $cols[] = 'cnt';
     241        $col_names[] = 'Кол-во';
     242        $cols[] = 'sum';
     243        $col_names[] = 'Сумма';
     244        $cols[] = 'store_cnt';
     245        $col_names[] = 'Остаток';
     246        $cols[] = 'place';
     247        $col_names[] = 'Место';
     248        if($this->show_gtd) {
     249                $cols[] = 'gtd';
     250                $col_names[] = 'ГТД';
     251        }
     252        if($this->show_sn) {
     253                $cols[] = 'sn';
     254                $col_names[] = 'SN';
     255        }
     256       
     257        $p_setup['columns'] = $cols;
     258        $p_setup['col_names'] = $col_names;
     259       
     260        if($this->show_vc)
     261                $p_setup['store_columns'] = array(
     262                    'vc', 'name', 'vendor', 'price', 'liquidity'
     263                );
     264        else    $p_setup['store_columns'] = array(
     265                    'name', 'vendor', 'price', 'liquidity'
     266                );
     267        if($this->show_tdb) {
     268                $p_setup['store_columns'][] = 'type';
     269                $p_setup['store_columns'][] = 'd_int';
     270                $p_setup['store_columns'][] = 'd_ext';
     271                $p_setup['store_columns'][] = 'size';
     272                $p_setup['store_columns'][] = 'mass';
     273        }
     274       
     275        if($this->show_rto) {
     276                $p_setup['store_columns'][] = 'transit';
     277                $p_setup['store_columns'][] = 'reserve';
     278                $p_setup['store_columns'][] = 'offer';
     279        }
     280       
     281        $p_setup['store_columns'][] = 'cnt';
     282        $p_setup['store_columns'][] = 'allcnt';
     283        $p_setup['store_columns'][] = 'place';
     284       
     285       
     286        $ret.="<script type=\"text/javascript\">
     287        var poslist = PosEditorInit(".json_encode($p_setup, JSON_UNESCAPED_UNICODE).");
    254288        </script>";
    255289
     
    608642        function reOrder($by='name') {
    609643                global $db;
    610                 if($by!=='name' && $by!=='cost' && $by!=='vc'&& $by!=='loc')
     644                if($by!=='name' && $by!=='price' && $by!=='vc'&& $by!=='place')
    611645                        $by='name';
    612                 if($by=='loc')
     646                if($by=='place')
    613647                        $by='doc_base_cnt`.`mesto';
     648                else if($by=='price')
     649                        $by='doc_list_pos`.`cost';
    614650                $db->startTransaction();
    615651                $res = $db->query("SELECT `doc_list_pos`.`tovar`, `doc_list_pos`.`cnt`, `doc_list_pos`.`gtd`, `doc_list_pos`.`comm`, `doc_list_pos`.`cost`, `doc_list_pos`.`page`, `doc_base`.`name`, `doc_base`.`vc`, `doc_base_cnt`.`mesto`
     
    678714                $ret = '';
    679715                $sql = "SELECT `doc_base`.`id`, `doc_base`.`vc`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`proizv` AS `vendor`,
    680                         `doc_base`.`likvid` AS `liquidity`, `doc_base`.`cost` AS `base_price`, `doc_base`.`cost_date`, `doc_base_dop`.`koncost` AS `rcost`, `doc_base_dop`.`analog`,
     716                        `doc_base`.`likvid` AS `liquidity`, `doc_base`.`cost` AS `base_price`, `doc_base`.`cost_date` AS `price_date`, `doc_base_dop`.`analog`,
    681717                        `doc_base_dop`.`type`, `doc_base_dop`.`d_int`,  `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`,
    682718                        `doc_base_cnt`.`mesto` AS `place`, `doc_base_cnt`.`cnt`,
     
    698734                $ret = '';
    699735                $sql = "SELECT `doc_base`.`id`, `doc_base`.`vc`, `doc_base`.`group`, `doc_base`.`name`, `doc_base`.`proizv` AS `vendor`,
    700                         `doc_base`.`likvid` AS `liquidity`, `doc_base`.`cost` AS `base_price`, `doc_base`.`cost_date`, `doc_base_dop`.`koncost` AS `rcost`,
     736                        `doc_base`.`likvid` AS `liquidity`, `doc_base`.`cost` AS `base_price`, `doc_base`.`cost_date` AS `price_date`,
    701737                        `doc_base_dop`.`analog`, `doc_base_dop`.`type`, `doc_base_dop`.`d_int`, `doc_base_dop`.`d_ext`, `doc_base_dop`.`size`, `doc_base_dop`.`mass`,
    702738                        `doc_base_cnt`.`mesto` AS `place`, `doc_base_cnt`.`cnt`,
     
    739775                        $ret = $this->FormatResult($res, $ret);
    740776                }
    741 
    742777                return $ret;
    743778        }
     
    747782                if ($res->num_rows) {
    748783                        while ($nxt = $res->fetch_assoc()) {
    749                                 $dcc = strtotime($nxt['cost_date']);
    750                                 $cc = "";
    751                                 if ($dcc > (time() - 60 * 60 * 24 * 30 * 3))            $nxt['cost_class'] = "c1";
    752                                 else if ($dcc > (time() - 60 * 60 * 24 * 30 * 6))       $nxt['cost_class'] = "c2";
    753                                 else if ($dcc > (time() - 60 * 60 * 24 * 30 * 9))       $nxt['cost_class'] = "c3";
    754                                 else if ($dcc > (time() - 60 * 60 * 24 * 30 * 12))      $nxt['cost_class'] = "c4";
     784                                $dcc = strtotime($nxt['price_date']);
     785                                if ($dcc > (time() - 60 * 60 * 24 * 30 * 3))            $nxt['price_cat'] = "c1";
     786                                else if ($dcc > (time() - 60 * 60 * 24 * 30 * 6))       $nxt['price_cat'] = "c2";
     787                                else if ($dcc > (time() - 60 * 60 * 24 * 30 * 9))       $nxt['price_cat'] = "c3";
     788                                else if ($dcc > (time() - 60 * 60 * 24 * 30 * 12))      $nxt['price_cat'] = "c4";
    755789                                if ($this->show_rto) {
    756790                                        $nxt['reserve'] = DocRezerv($nxt['id'], $this->doc);
     
    759793                                }
    760794                                $pc = PriceCalc::getInstance();
    761                                 if($this->cost_id) {
    762                                         $nxt['cost'] = $pc->getPosSelectedPriceValue($nxt['id'], $this->cost_id, $nxt);
    763                                 }
    764                                 else $nxt['cost'] = $pc->getPosDefaultPriceValue($nxt['id']);
    765                                 $nxt['rcost'] = sprintf("%0.2f", $nxt['rcost']);
    766                                 $nxt['in_cost'] = sprintf("%0.2f",  getInCost($nxt['id']));
     795                                if($this->cost_id)
     796                                        $nxt['price'] = $pc->getPosSelectedPriceValue($nxt['id'], $this->cost_id, $nxt);
     797                                else    $nxt['price'] = $pc->getPosDefaultPriceValue($nxt['id']);
    767798                               
    768799                                if ($ret != '')
  • web/include/doc.sborka.php

    r4048d16 r170cbd7  
    104104
    105105        function Service() {
    106                 global $tmpl;
     106                global $tmpl, $db;
    107107                $tmpl->ajax = 1;
    108108                $opt = request('opt');
     
    166166                                $tmpl->setContent($poseditor->SerialNum($action, $line_id, $data));
    167167                        }
     168                        else if($opt=='jdeldoc')
     169                        {
     170                                try
     171                                {
     172                                        if(! isAccess('doc_'.$this->doc_name,'delete') )        throw new AccessException("Недостаточно привилегий");
     173                                        $tim=time();
     174
     175                                        $res = $db->query("SELECT `id` FROM `doc_list` WHERE `p_doc`='{$this->doc}' AND `mark_del`='0'");
     176                                        if($res->num_rows)
     177                                                throw new Exception("Есть подчинённые не удалённые документы. Удаление невозможно.");
     178                                        $db->update('doc_list', $this->doc, 'mark_del', $tim);
     179                                        doc_log("MARKDELETE",  '', "doc", $this->doc);
     180                                        $this->doc_data['mark_del']=$tim;
     181                                        $json=' { "response": "1", "message": "Пометка на удаление установлена!", "buttons": "'.$this->getApplyButtons().'", "statusblock": "Документ помечен на удаление" }';
     182                                        $tmpl->setContent($json);
     183                                               
     184                                }
     185                                catch(Exception $e)
     186                                {
     187                                        $tmpl->setContent("{response: 0, message: '".$e->getMessage()."'}");
     188                                }
     189                        }
     190                        // Снять пометку на удаление
     191                        else if($opt=='jundeldoc')
     192                        {
     193                                try
     194                                {
     195                                        if(! isAccess('doc_'.$this->doc_name,'delete') )        throw new AccessException("Недостаточно привилегий");   
     196                                        $db->update('doc_list', $this->doc, 'mark_del', 0);
     197                                        doc_log("UNDELETE", '', "doc", $this->doc);
     198                                        $json=' { "response": "1", "message": "Пометка на удаление снята!", "buttons": "'.$this->getApplyButtons().'", "statusblock": "Документ не будет удалён" }';
     199                                        $tmpl->setContent($json);
     200                                }
     201                                catch(Exception $e)
     202                                {
     203                                        $tmpl->setContent("{response: 0, message: '".$e->getMessage()."'}");
     204                                }
     205                        }
     206                        else throw new NotFoundException();
    168207                }
    169208        }
  • web/include/doc.zapposeditor.php

    r4048d16 r170cbd7  
    77
    88        function Show($param='') {
    9         global $CONFIG;
    10         // Список товаров
    11         $ret="
    12         <script src='/css/poseditor.js' type='text/javascript'></script>
    13         <link href='/css/poseditor.css' rel='stylesheet' type='text/css' media='screen'>
    14         <table width='100%' id='poslist'><thead><tr>
    15         <th width='60px' align='left'>№</th>";
    16         if($this->show_vc>0)    $ret.="<th width='90px' align='left' title='Код изготовителя'><div class='order_button' id='pl_order_vc'></div> Код</th>";
    17         $ret.="<th><div class='order_button' id='pl_order_name'></div> Наименование</th>
    18         <th width='90px' title='Выбранная цена'>Выбр. цена</th>
    19         <th width='90px' class='hl'><div class='order_button' id='pl_order_cost'></div> Цена</th>
    20         <th width='60px' class='hl'>Кол-во</th>
    21         <th width='90px' class='hl'>Стоимость</th>
    22         <th width='60px' title='Остаток товара на складе'>Остаток</th>
    23         <th width='90px'>Зарплата</th>";
    24         $ret.="</tr>
    25         </thead>
    26         <tfoot>
    27         <tr id='pladd'>
    28         <td><input type='text' id='pos_id' autocomplete='off' tabindex='1'></td>";
    29         if($this->show_vc>0)    $ret.="<td><input type='text' id='pos_vc' autocomplete='off' tabindex='2'></td>";
    30         $ret.="<td><input type='text' id='pos_name' autocomplete='off' tabindex='3'></td>
    31         <td id='pos_scost'></td>
    32         <td><input type='text' id='pos_cost' autocomplete='off' tabindex='4'></td>
    33         <td><input type='text' id='pos_cnt' autocomplete='off' tabindex='5'></td>
    34         <td id='pos_sum'></td>
    35         <td id='pos_sklad_cnt'></td>
    36         <td id='pos_mesto'></td>";
    37        
    38         $ret.="
    39         </tr>
    40         </tfoot>
    41         <tbody>
    42         <tr><td colspan='9' style='text-align: center;'><img src='/img/icon_load.gif' alt='Загрузка...'>
    43         </tbody>
    44         </table>
    45         <p align='right' id='sum'></p>";
    46        
    47         $ret.="
    48         <table id='sklad_view'>
    49         <tr><td id='groups_list' width='200' valign='top' class='lin0'>";
    50         $ret.=$this->getGroupsTree();
    51         $ret.="</td><td valign='top' class='lin1'>     
    52         <table width='100%' cellspacing='1' cellpadding='2'>
    53         <tr><thead>
    54         <th>№";
    55         if($this->show_vc>0)    $ret.="<th>Код";
    56         $ret.="<th>Наименование<th>Марка<th>Цена, р.<th>Ликв.<th>Р.цена, р.<th>Аналог";
    57         if($this->show_tdb>0)   $ret.="<th>Тип<th>d<th>D<th>B<th>Масса";
    58         if($this->show_rto>0)   $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='В пути'>";
    59         $ret.="<th>Склад<th>Всего<th>Место
    60         </thead>
    61         <tbody id='sklad_list'>
    62         </tbody>
    63         </table>
    64         </td></tr>
    65         </table>";
    66         if(!@$CONFIG['poseditor']['need_dialog'])       $CONFIG['poseditor']['need_dialog']=0;
    67         else                                            $CONFIG['poseditor']['need_dialog']=1;
    68         $ret.="<script type=\"text/javascript\">
    69         var poslist=PosEditorInit('/doc_sc.php?mode=srv&sn=sborka_zap&doc={$this->doc}',{$this->editable})
    70         poslist.show_column['vc']='{$this->show_vc}'
    71 
    72         var skladview=document.getElementById('sklad_view')
    73         skladview.show_column['vc']='{$this->show_vc}'
    74        
    75         skladlist=document.getElementById('sklad_list').needDialog={$CONFIG['poseditor']['need_dialog']};
    76         </script>";     
    77        
    78         return $ret;
     9                global $CONFIG;
     10                // Список товаров
     11                $ret="
     12                <script src='/css/poseditor.js' type='text/javascript'></script>
     13                <link href='/css/poseditor.css' rel='stylesheet' type='text/css' media='screen'>
     14                <div id='poseditor_div'></div>
     15                <div id='storeview_container'></div>";
     16
     17                if(!@$CONFIG['poseditor']['need_dialog'])       $CONFIG['poseditor']['need_dialog']=0;
     18                else                                            $CONFIG['poseditor']['need_dialog']=1;
     19
     20                $p_setup = array(
     21                    'base_url'  => '/doc_sc.php?mode=srv&sn=sborka_zap&doc='.$this->doc,
     22                    'editable'  => $this->editable,
     23                    'container' => 'poseditor_div',
     24                    'store_container'   => 'storeview_container',
     25                    'fastadd_line'=> 1,         // Показывать строку быстрого подбора
     26                );
     27
     28                $cols = array();
     29                $col_names = array();
     30                if($this->show_vc) {
     31                        $cols[] = 'vc';
     32                        $col_names[] = 'Код';
     33                }
     34                $cols[] = 'name';
     35                $col_names[] = 'Наименование';
     36                $cols[] = 'price';
     37                $col_names[] = 'Цена';
     38                $cols[] = 'cnt';
     39                $col_names[] = 'Кол-во';
     40                $cols[] = 'sum';
     41                $col_names[] = 'Сумма';
     42                $cols[] = 'store_cnt';
     43                $col_names[] = 'Остаток';
     44                $cols[] = 'place';
     45                $col_names[] = 'Зарплата';
     46
     47                $p_setup['columns'] = $cols;
     48                $p_setup['col_names'] = $col_names;
     49
     50                if($this->show_vc)
     51                        $p_setup['store_columns'] = array(
     52                            'vc', 'name', 'vendor', 'price', 'liquidity'
     53                        );
     54                else    $p_setup['store_columns'] = array(
     55                            'name', 'vendor', 'price', 'liquidity'
     56                        );
     57
     58                if($this->show_rto) {
     59                        $p_setup['store_columns'][] = 'transit';
     60                        $p_setup['store_columns'][] = 'reserve';
     61                        $p_setup['store_columns'][] = 'offer';
     62                }
     63
     64                $p_setup['store_columns'][] = 'cnt';
     65                $p_setup['store_columns'][] = 'allcnt';
     66                $p_setup['store_columns'][] = 'place';
     67
     68
     69                $ret.="<script type=\"text/javascript\">
     70                var poslist = PosEditorInit(".json_encode($p_setup, JSON_UNESCAPED_UNICODE).");
     71                </script>";
     72               
     73                return $ret;
    7974        }
    8075
  • web/include/doc_scripts/sborka_zap.php

    r4048d16 r170cbd7  
    269269                                $tmpl->addContent($poseditor->GetPosInfo($pos));
    270270                        }
     271                        else if($opt=='jgetgroups')
     272                        {
     273                                $doc_content = $poseditor->getGroupList();
     274                                $tmpl->addContent($doc_content);
     275                        }
    271276                        // Json вариант добавления позиции
    272277                        else if ($opt == 'jadd') {
     
    306311                                $tmpl->setContent($poseditor->SerialNum($action, $line_id, $data));
    307312                        }
     313                        else throw new NotFoundException();
    308314                }
    309315        }
  • web/include/imgresizer.php

    r4048d16 r170cbd7  
    5757        }
    5858
     59        ///
    5960        public function SetY($y) {
    6061                $this->dim_y = $y;
    6162        }
    6263
     64        /// Задать качество изображения. Определяет уровень JPEG сжатия.
    6365        public function SetQuality($quality) {
    6466                if ($quality > 0)
     
    6971                $this->no_enlarge = $flag;
    7072        }
    71 
     73       
     74        /// Установка разрешения изменения пропорций изображения. Если изменение пропорций запрещено - будут добавлены поля.
    7275        public function SetFixAspect($flag) {
    7376                $this->fix_aspect = $flag;
     
    9396                return @getimagesize($fn);
    9497        }
    95 
    96         // Есть ли изображение в кеше
     98       
     99        /// Проверка, существует ли запрошенное хранилище
     100        /// @return true, если существует, false в ином случае
     101        //public function isStorageExists
     102
     103        /// Есть ли изображение в кеше
    97104        protected function CacheProbe() {
    98105                global $CONFIG;
     
    100107                return $this->cached = file_exists($CONFIG['site']['var_data_fs'] . '/' . $this->cache_fclosure);
    101108        }
    102         // Сделать изображение и сохранить в кеш
     109       
     110       
     111        /// Сделать изображение и сохранить в кеш
    103112        public function MakeAndStore() {
    104113                global $CONFIG;
  • web/include/pricecalc.php

    r4048d16 r170cbd7  
    200200                        return false;
    201201                foreach($this->bulk_prices as $price) {
    202                         if($this->agent_price_id && $this->agent_price_id == $price['id'])
    203                                 break;
     202                        if($this->agent_price_id) {
     203                                if($this->agent_price_id == $price['id'])
     204                                        break;
     205                        }
     206                        else if($this->agent_avg_sum && $this->agent_avg_sum>=$price['acc_threshold'])
     207                                break; 
    204208                        if($this->from_site_flag && $this->siteuser_price_id && $price['id'] == $this->siteuser_price_id)
    205                                 break;
     209                                break;                 
    206210                        if($this->order_sum>=$price['bulk_threshold'])
    207211                                break;
  • web/include/sitemap.inc.php

    r4048d16 r170cbd7  
    107107                $this->buf = '';
    108108                $this->startMap();
    109                 $this->AddLink('index.php', 'Главная', '1.0');
     109                $this->AddLink('index.php', 'Главная', '0.5');
    110110                $this->AddLink('price.php', 'Прайсы', '0.2');
    111111                $this->AddLink('vitrina.php', 'Витрина', '0.8');
    112112                $this->addPriceGroup(0);
    113                 $this->AddLink('articles.php', 'Статьи', '0.1', 'weekly');
     113                $this->AddLink('articles.php', 'Статьи', '0.5', 'weekly');
    114114                $this->startGroup();
    115115                $res = $db->query("SELECT `name`, `date`, `text` FROM `articles` ORDER BY `name`");
     
    120120                }
    121121                $this->endGroup();
    122                 $this->AddLink('news.php', 'Новости');
    123                 $this->AddLink('photogalery.php', 'Фотогалерея');
     122                $this->AddLink('news.php', 'Новости', '0.1');
     123                $this->AddLink('photogalery.php', 'Фотогалерея', '0.1');
    124124                $this->AddLink('voting.php', 'Голосования', '0.1');
    125125                $this->AddLink('survey.php', 'Опросы', '0.1');
    126                 $this->AddLink('message.php', 'Отправить сообщение');
     126                $this->AddLink('message.php', 'Отправить сообщение', '0.0');
    127127                $this->AddLink('sitemap.xml', 'XML Sitemap', '0.0');
    128128                $this->endMap();
  • web/include/wikiparser.php

    r4048d16 r170cbd7  
    214214
    215215                $img->SetX($xsize);
    216                 $imagetag = "<img src='".$img->GetURI()."' alt='".html_out($title)."' width='{$xsize}px'>";
     216                $imagetag = "<img src=\"".$img->GetURI()."\" alt=\"".html_out($title)."\" width=\"{$xsize}px\">";
    217217                if($link)
    218218                        $imagetag = "<a href='$link'>$imagetag</a>";
Note: See TracChangeset for help on using the changeset viewer.