1
docj.php in trunk/web – MultiMag

source: trunk/web/docj.php @ 261

Last change on this file since 261 was 261, checked in by blacklight, 7 years ago
  • Улучшена производительность счётчика посещений
  • Добавлена подсветка отгруженных заявок в журнале документов
File size: 34.9 KB
Line 
1<?php
2//      MultiMag v0.1 - Complex sales system
3//
4//      Copyright (C) 2005-2010, BlackLight, TND Team, http://tndproject.org
5//
6//      This program is free software: you can redistribute it and/or modify
7//      it under the terms of the GNU Affero General Public License as
8//      published by the Free Software Foundation, either version 3 of the
9//      License, or (at your option) any later version.
10//
11//      This program is distributed in the hope that it will be useful,
12//      but WITHOUT ANY WARRANTY; without even the implied warranty of
13//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14//      GNU Affero General Public License for more details.
15//
16//      You should have received a copy of the GNU Affero General Public License
17//      along with this program.  If not, see <http://www.gnu.org/licenses/>.
18//
19
20include_once("core.php");
21include_once("include/doc.core.php");
22include_once("include/doc.s.nulltype.php");
23SafeLoadTemplate($CONFIG['site']['inner_skin']);
24$tmpl->HideBlock('left');
25
26function GetRootDocument($doc)
27{
28        while($doc)
29        {
30                $res=mysql_query("SELECT `p_doc` FROM `doc_list` WHERE `id`='$doc'");
31                echo mysql_error();
32                $pdoc=mysql_result($res,0,0);
33                if(!$pdoc) return $doc;
34                $doc=$pdoc;
35        }
36        return $doc;
37}
38
39function DrawSubTreeDocument($doc,$cur_doc)
40{
41        global $tmpl;
42        $sql="SELECT `doc_list`.`id`, `doc_list`.`ok`, `doc_list`.`date`, `doc_list`.`altnum`, `doc_list`.`subtype`, `doc_list`.`sum`, `doc_agent`.`name`, `doc_types`.`name`
43        FROM `doc_list`
44        LEFT JOIN `doc_agent` ON `doc_list`.`agent`=`doc_agent`.`id`
45        LEFT JOIN `doc_types` ON `doc_types`.`id`=`doc_list`.`type`
46        WHERE `doc_list`.`id`='$doc'
47        ORDER by `doc_list`.`date` DESC";
48        echo mysql_error();
49        $res=mysql_query($sql);
50        $cnt=mysql_num_rows($res);
51        $i=1;
52        $r='';
53        if($nxt=mysql_fetch_row($res))
54        {
55                $dt=date("Y.m.d H:i:s",$nxt[2]);
56                $pp="Непроведённый";
57                if($nxt[1]) $pp="Проведённый";
58                if($i>=$cnt) $r=" IsLast";
59                $tmpl->AddText("<ul class='Container'>");
60                $tmpl->AddText("<li class='Node'><div class='Expand'></div><div class='Content'>");
61                if($doc==$cur_doc) $tmpl->AddText("<b>");
62                $tmpl->AddText("<a href='doc.php?mode=body&doc=$doc'>$pp $nxt[7]</a> N $nxt[3]$nxt[4] от $dt. Агент: $nxt[6], на сумму $nxt[5] ");
63                if($doc==$cur_doc) $tmpl->AddText("</b>");
64                $tmpl->AddText("<ul class='Container'>");
65                DrawSubTreeDocumentNode($doc,$cur_doc);
66                $tmpl->AddText("</ul>");       
67                $tmpl->AddText("</div></li>");
68                $tmpl->AddText("</ul>");
69                $i++;
70        }
71}
72
73function DrawSubTreeDocumentNode($doc,$cur_doc)
74{
75        global $tmpl;
76        $sql="SELECT `doc_list`.`id`, `doc_list`.`ok`, `doc_list`.`date`, `doc_list`.`altnum`, `doc_list`.`subtype`, `doc_list`.`sum`, `doc_agent`.`name`, `doc_types`.`name`
77        FROM `doc_list`
78        LEFT JOIN `doc_agent` ON `doc_list`.`agent`=`doc_agent`.`id`
79        LEFT JOIN `doc_types` ON `doc_types`.`id`=`doc_list`.`type`
80        WHERE `doc_list`.`p_doc`='$doc'
81        ORDER by `doc_list`.`date` DESC";
82        echo mysql_error();
83        $res=mysql_query($sql);
84        $cnt=mysql_num_rows($res);
85        $i=1;
86        $r='';
87        while($nxt=mysql_fetch_row($res))
88        {
89                $dt=date("Y.m.d H:i:s",$nxt[2]);
90                $pp="Непроведённый";
91                if($nxt[1]) $pp="Проведённый";
92                if($i>=$cnt) $r=" IsLast";
93               
94                $tmpl->AddText("<li class='Node ExpandLeaf $r'><div class='Expand'></div><div class='Content'>");
95                if($doc==$cur_doc) $tmpl->AddText("<b>");
96                $tmpl->AddText("<a href='doc.php?mode=body&doc=$nxt[0]'>$pp $nxt[7]</a> N $nxt[3]$nxt[4] от $dt. Агент: $nxt[6], на сумму $nxt[5] ");
97                if($doc==$cur_doc) $tmpl->AddText("</b>");
98                //$tmpl->AddText("</li>");
99                $tmpl->AddText("<ul class='Container'>");
100                DrawSubTreeDocumentNode($nxt[0],$cur_doc);
101                $tmpl->AddText("</ul>");
102                $tmpl->AddText("</div></li>");
103                $i++;
104        }
105
106}
107
108function FilterMenu()
109{
110        global $tmpl;
111        $tmpl->AddStyle("
112                #doc_sel
113                {
114                        width:  280px;
115                        height: 17px;
116                        border: 1px solid #ccc;
117                        background: url('img/win/droplist.png') no-repeat right;
118                        overflow: hidden;
119                        padding:        0px;
120                        font-size:      6px;
121                        vertical-align: center;
122                }
123               
124                #doc_sel_popup
125                {
126                        width:  280px;
127                        border: 1px solid #ccc;
128                        display:none;
129                        background: #fefefe;
130                }
131                ");
132
133                $tmpl->AddTMenu("<script type='text/javascript' src='/css/doc_script.js'></script>
134                <script src='/css/jquery/jquery.js' type='text/javascript'></script>
135                <!-- Core files -->
136                <script src='/css/jquery/jquery.alerts.js' type='text/javascript'></script>
137                <link href='/css/jquery/jquery.alerts.css' rel='stylesheet' type='text/css' media='screen' />
138                <script type='text/javascript' src='/css/jquery/jquery.autocomplete.js'></script>
139               
140                <link rel='stylesheet' href='/css/jquery/ui/themes/base/jquery.ui.all.css'>
141                <script src='/css/jquery/ui/jquery.ui.core.js'></script>
142                <script src='/css/jquery/ui/jquery.ui.widget.js'></script>
143                <script src='/css/jquery/ui/jquery.ui.datepicker.js'></script>
144                <script src='/css/jquery/ui/i18n/jquery.ui.datepicker-ru.js'></script>
145               
146                <!--
147                <div id='jq_popup' class='context_menu' style='display: none'>
148                <a href='#' onClick='$(\"#jq_popup\").hide()'>[x] Скрыть</a><br><br><br><center>{L_NEW_MESSAGE}<br><br></b></center>
149                </div>
150                -->
151               
152                <div id='popup_container'>
153                <h1 id='popup_title'>Фильтры журнала</h1>
154                <div id='popup_content' class='noicon'>
155                <form action='docj.php' method='post'>
156                <input type='hidden' name='mode' value='filter'>
157                <input type='hidden' name='opt' value='fsn'>
158                <table width='400px'>
159                <tr><td>
160               
161                ");
162
163                $doc_names=$doc_sel=$doc_cb='';
164                $res=mysql_query("SELECT `id`, `name` FROM `doc_types` ORDER BY `name`");
165                while($nxt=mysql_fetch_row($res))
166                {
167                        if(@$_SESSION['j_need_doctypes'][$nxt[0]])
168                        {
169                                $ss='checked';
170                                $doc_sel.="$nxt[1]; ";
171                        }
172                        else                                            $ss='';
173                        $doc_cb.="<label><input type='checkbox' id='dt$nxt[0]' name='dt[$nxt[0]]' value='$nxt[0]' $ss onclick='DtCheck(this);'>$nxt[1]</label><br>";
174                        $doc_names.="dn[$nxt[0]]='$nxt[1]';";
175                       
176                }
177               
178                $tmpl->AddTMenu("
179                Отбор по типу документа:<br>
180                <div id='doc_sel' onClick='ShowDocTypes(this)'>$doc_sel</div>
181                <div id='doc_sel_popup'>$doc_cb</div>
182                ");
183               
184                $sklad_options="<option value='0'>-</option>";
185                $res=mysql_query("SELECT `id`, `name` FROM `doc_sklady` ORDER BY `id`");
186                while($nxt=mysql_fetch_row($res))
187                {
188                        if(@$_SESSION['j_select_sklad']==$nxt[0])
189                        {
190                                $ss='selected';
191                                $_SESSION['j_select_sklad_name']=$nxt[1];
192                        }
193                        else    $ss='';
194                        $sklad_options.="<option value='$nxt[0]' $ss>$nxt[0]: $nxt[1]</option>";
195                }
196                $bank_options="<option value='0'>-</option>";
197                $res=mysql_query("SELECT `num`, `name` FROM `doc_kassa` WHERE `ids`='bank' ORDER BY `num`");
198                while($nxt=mysql_fetch_row($res))
199                {
200                        if(@$_SESSION['j_select_bank']==$nxt[0])
201                        {
202                                $ss='selected';
203                                $_SESSION['j_select_bank_name']=$nxt[1];
204                        }
205                        else    $ss='';
206                        $bank_options.="<option value='$nxt[0]' $ss>$nxt[0]: $nxt[1]</option>";
207                }
208                $kassa_options="<option value='0'>-</option>";
209                $res=mysql_query("SELECT `num`, `name` FROM `doc_kassa` WHERE `ids`='kassa' ORDER BY `num`");
210                while($nxt=mysql_fetch_row($res))
211                {
212                        if(@$_SESSION['j_select_kassa']==$nxt[0])
213                        {
214                                $ss='selected';
215                                $_SESSION['j_select_kassa_name']=$nxt[1];
216                        }
217                        else    $ss='';
218                        $kassa_options.="<option value='$nxt[0]' $ss>$nxt[0]: $nxt[1]</option>";
219                }
220                $firm_options="<option value='0'>-</option>";
221                $res=mysql_query("SELECT `id`, `firm_name` FROM `doc_vars` ORDER BY `id`");
222                while($nxt=mysql_fetch_row($res))
223                {
224                        if(@$_SESSION['j_select_firm']==$nxt[0])
225                        {
226                                $ss='selected';
227                                $_SESSION['j_select_firm_name']=$nxt[1];
228                        }
229                        else $ss='';
230                        $firm_options.="<option value='$nxt[0]' $ss>$nxt[0]: $nxt[1]</option>";
231                }
232               
233                $date_f=$date_t=date("Y-m-d");
234
235                @$tmpl->AddTMenu("
236               
237                </td><td align='right'>
238                Альт.н.<br>
239                <input type='text' name='altnum' style='width: 50px;' value='{$_SESSION['j_select_altnum']}'><br>
240                </td><td align='right'>
241                Подтип<br>
242                <input type='text' name='subtype' style='width: 50px;' value='{$_SESSION['j_select_subtype']}'><br>
243                </td></tr>
244                </table>
245                <table width='400px'>
246                <tr><td>Дата от:</td><td align='right'>Дата до:</td></tr>
247                <tr><td><input type='text' name='date_from' id='datepicker_f' value=''></td>
248                <td align='right'><input type='text' name='date_to' id='datepicker_t' value=''></td></tr>
249                </table>
250                Агент:<br>
251                <input type='hidden' name='agent_id' id='agent_id' value='{$_SESSION['j_agent']}'>
252                <input type='text' id='ag' name='agent_name' style='width: 400px;' value='{$_SESSION['j_agent_name']}'><br>
253                Товар:<br>
254                <input type='hidden' name='tov_id' id='tov_id' value='{$_SESSION['j_select_tov']}'>
255                <input type='text' id='tov' name='tov_name' style='width: 400px;' value='{$_SESSION['j_select_tov_name']}'><br>
256                Организация:<br>
257                <select name='firm' style='width: 400px;'>$firm_options</select><br>
258                Банк:<br>
259                <select name='bank' style='width: 400px;'>$bank_options</select>
260                <table width='400px'>
261                <tr><td>Склад</td><td align='right'>Касса</td></tr>
262                <tr><td><select name='sklad'>$sklad_options</select></td>
263                <td align='right'><select name='kassa'>$kassa_options</select></td></tr>
264                </table>
265                Автор:<br>
266                <input type='hidden' name='autor_id' id='autor_id' value='{$_SESSION['j_select_autor_id']}'>
267                <input type='text' id='au' name='autor_name' style='width: 400px;' value='{$_SESSION['j_select_autor_name']}'><br>
268                <label><input type='checkbox'>Сохранить как настройки по умолчанию</label>
269                <div id='popup_panel'> <button type='button' onClick='$(\"#popup_container\").hide(); return false;'>Отмена</button> <button type='submit'>Отфильтровать</button></div>
270                </form>
271                </div>
272                </div>
273
274
275                <script type='text/javascript'>
276               
277                function DtCheck(t)
278                {
279                        var dn=new Array();
280                        $doc_names
281                        var popup=document.getElementById('doc_sel_popup');
282                        var list=popup.getElementsByTagName('input');
283                        var str='';
284                        for(var i=0; i<list.length; i++)
285                        {
286                                if(list[i].checked)
287                                        str+=dn[list[i].value]+'; ';
288                        }
289                        document.getElementById('doc_sel').innerHTML=str;
290                }
291
292                $(document).ready(function(){
293                        $('#popup_container').hide();
294                        $(\"#ag\").autocomplete(\"/docs.php\", {
295                        delay:300,
296                        minChars:1,
297                        matchSubset:1,
298                        autoFill:false,
299                        selectFirst:true,
300                        matchContains:1,
301                        cacheLength:10,
302                        maxItemsToShow:15,       
303                        formatItem:agliFormat,
304                        onItemSelect:agselectItem,
305                        extraParams:{'l':'agent','mode':'srv','opt':'ac'}
306                        });
307                        $(\"#tov\").autocomplete(\"/docs.php\", {
308                        delay:300,
309                        minChars:1,
310                        matchSubset:1,
311                        autoFill:false,
312                        selectFirst:true,
313                        matchContains:1,
314                        cacheLength:10,
315                        maxItemsToShow:15,     
316                        formatItem:tovliFormat,
317                        onItemSelect:tovselectItem,
318                        extraParams:{'l':'sklad','mode':'srv','opt':'ac'}
319                        });
320                       
321                        $(\"#au\").autocomplete(\"/rights.php\", {
322                        delay:300,
323                        minChars:1,
324                        matchSubset:1,
325                        autoFill:false,
326                        selectFirst:true,
327                        matchContains:1,
328                        cacheLength:10,
329                        maxItemsToShow:15,     
330                        formatItem:tovliFormat,
331                        onItemSelect:auselectItem,
332                        extraParams:{'mode':'upl'}
333                        });                     
334                       
335                        $.datepicker.setDefaults( $.datepicker.regional[ 'ru' ] );
336                       
337                        $( '#datepicker_f' ).datepicker({showButtonPanel: true  });
338                        $( '#datepicker_f' ).datepicker( 'option', 'dateFormat', 'yy-mm-dd' );
339                        $( '#datepicker_f' ).datepicker( 'setDate' , '{$_SESSION['j_date_from']}' );
340                        $( '#datepicker_t' ).datepicker({showButtonPanel: true  });
341                        $( '#datepicker_t' ).datepicker( 'option', 'dateFormat', 'yy-mm-dd' );
342                        $( '#datepicker_t' ).datepicker( 'setDate' , '{$_SESSION['j_date_to']}' );
343                });
344               
345                function agliFormat (row, i, num) {
346                        var result = row[0] + \"<em class='qnt'>тел. \" +
347                        row[2] + \"</em> \";
348                        return result;
349                }
350               
351               
352                function agselectItem(li) {
353                        if( li == null ) var sValue = \"Ничего не выбрано!\";
354                        if( !!li.extra ) var sValue = li.extra[0];
355                        else var sValue = li.selectValue;
356                        document.getElementById('agent_id').value=sValue;
357                       
358                }
359
360                function tovliFormat (row, i, num) {
361                        var result = row[0] + \"<em class='qnt'>\" +
362                        row[2] + \"</em> \";
363                        return result;
364                }
365               
366                function tovselectItem(li) {
367                        if( li == null ) var sValue = \"Ничего не выбрано!\";
368                        if( !!li.extra ) var sValue = li.extra[0];
369                        else var sValue = li.selectValue;
370                        document.getElementById('tov_id').value=sValue;
371                       
372                }
373
374                function auselectItem(li) {
375                        if( li == null ) var sValue = \"Ничего не выбрано!\";
376                        if( !!li.extra ) var sValue = li.extra[0];
377                        else var sValue = li.selectValue;
378                        document.getElementById('autor_id').value=sValue;
379                       
380                }
381               
382                function ShowJournalFilter(ths)
383                {
384                        ths.style.color='#f00';
385                        var left=$(ths).offset().left;
386                        var top=$(ths).offset().top;
387                        $('#popup_container').css({
388                        'top': top,
389                        'position': 'absolute',
390                        'left': left
391                        });
392                        $('#popup_container').show(200);
393                }
394               
395                var hideDocTypesTimer = null;
396               
397                function ShowDocTypes(ths)
398                {
399                        var left=$('#doc_sel').offset().left;
400                        var top=$('#doc_sel').offset().top;
401                        $('#doc_sel_popup').css({
402                        'top': top-$('#popup_container').css.top,
403                        'position': 'absolute',
404                        'left': left-$('#popup_container').css.left,
405                        'display': 'inline'
406                        });
407                        $('#doc_sel_popup').mouseout(function ()
408                        {
409                                if (hideDocTypesTimer) clearTimeout(hideDocTypesTimer);
410                                hideDocTypesTimer = setTimeout(function ()
411                                {
412                                        $('#doc_sel_popup').hide(200);
413                                }, 200);
414                        });
415                        $('#doc_sel_popup').mouseover( function()
416                        {
417                                if (hideDocTypesTimer) clearTimeout(hideDocTypesTimer);
418                        });
419                }
420               
421                </script>");
422
423
424}
425
426need_auth();
427$GLOBALS['m_left']=0;
428$type_doc=@$_POST['type_doc'];
429$sn=rcv('sn');
430$fam=rcv('fam');
431$cnam=rcv('cnam');
432
433
434if(!isAccess('doc_list','view'))        throw new AccessException("");
435
436if($mode=="")
437{
438        $info='';
439        $dp="";
440        $ds="";
441        $tmpl->SetTitle("Список документов");
442        doc_menu("<a onclick=\"ShowJournalFilter(this); return false;\" href='' title='Фильтр'><img src='img/i_filter.png' alt='Фильтр документов' border='0'></a>");
443
444        if(!$_SESSION['j_date_from'])   $_SESSION['j_date_from']=date("Y-m-d");
445        if(!$_SESSION['j_date_to'])     $_SESSION['j_date_to']=date("Y-m-d");
446
447        FilterMenu();
448       
449        $t_from=strtotime($_SESSION['j_date_from']);
450        $t_to=strtotime($_SESSION['j_date_to'])+60*60*24-1;
451       
452        $info.='<b>С</b> '.$_SESSION['j_date_from'].' <b>по</b> '.$_SESSION['j_date_to'];
453       
454        $asel=@$_SESSION['j_agent'];
455        settype($asel,"int");
456        if($asel)
457        {
458                $ds.=" AND `doc_list`.`agent`='$asel'";
459                $info.=", <b>агент:</b> {$_SESSION['j_agent_name']}";
460        }
461       
462        if(is_array(@$_SESSION['j_need_doctypes']))
463        {
464                $info.=", <b>док-ты:</b> ";
465                $ts='';
466                foreach($_SESSION['j_need_doctypes'] as $id => $line)
467                {
468                        if(!$ts)        $ts="`doc_list`.`type`='$line'";
469                        else            $ts.="OR `doc_list`.`type`='$line'";
470                        $info.="$line/";
471                }
472                $ds.=" AND ($ts) ";
473        }
474        if(@$_SESSION['j_select_subtype'])
475        {
476                $ds.=" AND `doc_list`.`subtype`='{$_SESSION['j_select_subtype']}'";
477                $info.=", <b>подтип:</b> {$_SESSION['j_select_subtype']}";
478        }
479        if(@$_SESSION['j_select_altnum'])
480        {
481                $ds.=" AND `doc_list`.`altnum`='{$_SESSION['j_select_altnum']}'";
482                $info.=", <b>альт.номер:</b> {$_SESSION['j_select_altnum']}";
483        }
484        if(@$_SESSION['j_select_sklad'])
485        {
486                $ds.="AND `doc_list`.`sklad`='{$_SESSION['j_select_sklad']}'";
487                $info.=", <b>склад:</b> {$_SESSION['j_select_sklad_name']}";
488        }
489        if(@$_SESSION['j_select_bank'])
490        {
491                $ds.="AND `doc_list`.`bank`='{$_SESSION['j_select_bank']}'";
492                $info.=", <b>банк:</b> {$_SESSION['j_select_bank_name']}";
493        }
494        if(@$_SESSION['j_select_kassa'])
495        {
496                $ds.="AND `doc_list`.`kassa`='{$_SESSION['j_select_kassa']}'";
497                $info.=", <b>касса:</b> {$_SESSION['j_select_kassa_name']}";
498        }
499        if(@$_SESSION['j_select_firm'])
500        {
501                $ds.="AND `doc_list`.`firm_id`='{$_SESSION['j_select_firm']}'";
502                $info.=", <b>организация:</b> {$_SESSION['j_select_firm_name']}";
503               
504                $res=mysql_query("SELECT `firm_skin` FROM `doc_vars` WHERE `id`='{$_SESSION['j_select_firm']}'");
505                $firm_vars=mysql_fetch_assoc($res);
506                if($firm_vars['firm_skin'])
507                        $tmpl->LoadTemplate($firm_vars['firm_skin']);   
508        }
509        if(@$_SESSION['j_select_autor_id'])
510        {
511                $ds.="AND `doc_list`.`user`='{$_SESSION['j_select_autor_id']}'";
512                $info.=", <b>автор:</b> {$_SESSION['j_select_autor_name']}";
513               
514        }
515       
516        $sel=@$_SESSION['j_select_tov'];
517        if(!$sel)
518        {
519                $sql="SELECT `doc_list`.`id`, `doc_list`.`type`, `doc_list`.`ok`, `doc_list`.`date`, `doc_list`.`altnum`, `doc_list`.`subtype`, `doc_list`.`user`, `doc_list`.`sum`, `doc_list`.`mark_del`, `doc_agent`.`name`, `users`.`name`, `doc_types`.`name`, `doc_list`.`p_doc`, `doc_list`.`kassa`, `doc_list`.`bank`, `doc_list`.`sklad`, `doc_list`.`err_flag`
520                FROM `doc_list`
521                LEFT JOIN `doc_agent` ON `doc_list`.`agent`=`doc_agent`.`id`
522                LEFT JOIN `users` ON `users`.`id`=`doc_list`.`user`
523                LEFT JOIN `doc_types` ON `doc_types`.`id`=`doc_list`.`type`
524                WHERE `doc_list`.`date`>='$t_from' AND `doc_list`.`date`<='$t_to' $ds
525                ORDER by `doc_list`.`date` DESC";
526        }
527        else
528        {
529                $sql="SELECT `doc_list`.`id`, `doc_list`.`type`, `doc_list`.`ok`, `doc_list`.`date`, `doc_list`.`altnum`, `doc_list`.`subtype`, `doc_list`.`user`, `doc_list`.`sum`, `doc_list`.`mark_del`, `doc_agent`.`name`, `users`.`name`, `doc_types`.`name`, `doc_list`.`p_doc`, `doc_list_pos`.`cnt`, `doc_list_pos`.`cost`, `doc_list`.`kassa`, `doc_list`.`bank`, `doc_list`.`sklad`, `doc_list`.`err_flag`
530                FROM `doc_list`
531                LEFT JOIN `doc_agent` ON `doc_list`.`agent`=`doc_agent`.`id`
532                LEFT JOIN `doc_types` ON `doc_types`.`id`=`doc_list`.`type`
533                LEFT JOIN `users` ON `users`.`id`=`doc_list`.`user`
534                INNER JOIN `doc_list_pos` ON `doc_list_pos`.`tovar`='$sel' AND `doc_list`.`id`=`doc_list_pos`.`doc`
535                WHERE  `doc_list`.`date`>='$t_from' AND `doc_list`.`date`<='$t_to$ds
536                ORDER by `doc_list`.`date` DESC";
537                $dp="<th>Кол-во<th>Цена<th>Сумма";
538                $info.=", <b>товар:</b> {$_SESSION['j_select_tov_name']}";
539        }
540        $res=mysql_query($sql);
541        if(mysql_errno())       throw new MysqlException("Не удалось получить список документов!".mysql_error());
542        $row=mysql_num_rows($res);
543
544        $i=0;
545        $pr=$ras=0;
546
547        $tmpl->AddText("<h1 id='page-title'>Список документов</h1><div id='page-info'>$info</div>");
548
549//              $tmpl->AddText("
550//              <table width='100%'><tr><td width='300'><h1>Список документов</h1>
551//              <td align='right'>
552//              <form action='' method='post'>
553//              <input type='hidden' name='mode' value='filter'>
554//              <input type='hidden' name='opt' value='firm'>
555//              <select name='firm'>");
556//              $rs=mysql_query("SELECT `id`, `firm_name` FROM `doc_vars` ORDER BY `firm_name`");
557//              $tmpl->AddText("<option value='0'>-- Все фирмы --</option>");
558//              while($nx=mysql_fetch_row($rs))
559//              {
560//                      if($_SESSION['firm']==$nx[0]) $s=' selected'; else $s='';
561//                      $tmpl->AddText("<option value='$nx[0]' $s>$nx[1]</option>");           
562//              }               
563//              $tmpl->AddText("</select>
564//              <input type='submit' value='Выбрать'>
565//              </form></table>");
566       
567        $tmpl->AddText("<table width='100%' cellspacing='1'><tr>
568        <th width='75'>№<th width='20'>&nbsp;<th width='20'>&nbsp;<th>Тип<th>Доп.$dp<th>Агент<th>Сумма<th>Дата<th>Автор");
569        while($nxt=mysql_fetch_array($res))
570        {
571                $dop=$cl='';
572                $dt=date("d.m.Y H:i:s",$nxt[3]);
573                $cc="lin$i";
574                if(@$uid==$nxt[6])      $cc.='1';
575                // Доп. информация
576                switch($nxt['type'])
577                {
578                        case 1:
579                        case 2:
580                        case 3:
581                        case 8:
582                        case 12:
583                        case 15:
584                        case 17:
585                                $r=mysql_query("SELECT `id`, `name` FROM `doc_sklady` WHERE `id`='{$nxt['sklad']}'");
586                                $data=mysql_fetch_row($r);
587                                mysql_free_result($r);
588                                $dop="Склад: $data[1] /$data[0]";
589                                break; 
590                        case 4:
591                        case 5:
592                                $r=mysql_query("SELECT `num`, `name` FROM `doc_kassa` WHERE `num`='{$nxt['bank']}' AND `ids`='bank'");
593                                $data=mysql_fetch_row($r);
594                                mysql_free_result($r);
595                                $dop="Банк: $data[1] /$data[0]";
596                                break;
597                        case 6:
598                        case 7:
599                        case 9:
600                                $r=mysql_query("SELECT `num`, `name` FROM `doc_kassa` WHERE `num`='{$nxt['kassa']}' AND `ids`='kassa'");
601                                $data=mysql_fetch_row($r);
602                                mysql_free_result($r);
603                                $dop="Касса: $data[1] /$data[0]";
604                                break;
605                        case 10:
606                        case 11:
607                        case 13:
608                        case 14:
609                                break;                 
610                }
611               
612                switch($nxt['type'])
613                {
614                        case 3:
615                                $r=mysql_query("SELECT `doc_list_pos`.`doc` AS `doc_id`, `doc_list_pos`.`tovar` AS `pos_id`, `doc_list_pos`.`cnt`, (    SELECT SUM(`doc_list_pos`.`cnt`) FROM `doc_list_pos`
616                                INNER JOIN `doc_list` ON `doc_list_pos`.`doc`=`doc_list`.`id`
617                                WHERE `doc_list_pos`.`tovar`=`pos_id` AND `doc_list`.`p_doc`=`doc_id` AND `doc_list`.`type`='2' AND `doc_list`.`ok`>'0'
618                                ) AS `r_cnt`
619                                FROM `doc_list_pos`
620                                WHERE `doc_list_pos`.`doc`='$nxt[0]'");
621                                $f=0;
622                                while($nx=mysql_fetch_row($r))
623                                {
624                                        if($nx[3]<=0)   continue;
625                                        $f=1;
626                                        if($nx[2]>$nx[3])
627                                        {
628                                                $f=2;
629                                                break;
630                                        }
631                                }
632                                if($f==1)       $cl='f_green';
633                                if($f==2)       $cl='f_brown';
634                                mysql_free_result($r);
635                                break;                         
636                        case 8:
637                                $r=mysql_query("SELECT `doc_sklady`.`name` FROM `doc_dopdata`
638                                LEFT JOIN `doc_sklady` ON `doc_sklady`.`id`=`doc_dopdata`.`value`
639                                WHERE `doc_dopdata`.`doc`='$nxt[0]' AND `doc_dopdata`.`param`='na_sklad'");
640                                $nxt[9]="На ".@mysql_result($r,0,0);
641                                mysql_free_result($r);
642                                break; 
643                }
644               
645
646                if($nxt[2])
647                {
648                        if($nxt[1]==1)          $pr+=$nxt[7];
649                        else if($nxt[1]==2)     $ras+=$nxt[7];
650                        else if($nxt[1]==4)     $pr+=$nxt[7];
651                        else if($nxt[1]==5)     $ras+=$nxt[7];
652                        else if($nxt[1]==6)     $pr+=$nxt[7];
653                        else if($nxt[1]==7)     $ras+=$nxt[7];
654                        else if($nxt[1]==18)    $ras+=$nxt[7];
655                }
656
657                // Проплаты
658               
659                if(($nxt[1]==2)&&($nxt[7]>0))
660                {
661                        $add='';
662                        if($nxt[12]) $add=" OR (`p_doc`='$nxt[12]' AND (`type`='4' OR `type`='6'))";
663                        $rs=mysql_query("SELECT SUM(`sum`) FROM `doc_list` WHERE
664                        (`p_doc`='$nxt[0]' AND (`type`='4' OR `type`='6'))
665                        $add
666                                AND `ok`>0 AND `p_doc`!='0' GROUP BY `p_doc`");
667                        if(@$prop=mysql_result($rs,0,0))
668                        {
669                                $prop=sprintf("%0.2f",$prop);
670                                if($prop==$nxt[7])      $cl='f_green';
671                                else if($prop>$nxt[7])  $cl='f_purple';
672                                else $cl='f_brown';
673                        }
674                        else $cl='f_red';       
675                }
676
677
678                $i=1-$i;
679                $dp=$motions="";
680                if($sel)
681                {
682                        $sm=$nxt[13]*$nxt[14];
683                        $sm=sprintf("%0.2f",$sm);
684                        $dp="<td>$nxt[13]<td>$nxt[14]<td>$sm";
685                }
686               
687                if($nxt[8]) $motions="<a href='' title='На удаление' onclick=\"EditThis('/docj.php?mode=undel&_id=$nxt[0]','mo$nxt[0]'); return false;\"><img src='/img/i_alert.png' alt='На удаление'></a>";
688                if($nxt[2]) $motions.=" <img src='/img/i_suc.png' alt='Проведен'>";
689                if(!$motions) $motions="<a href='' title='Удалить' onclick=\"EditThis('/docj.php?mode=del&_id=$nxt[0]','mo$nxt[0]'); return false;\"> <img src='/img/i_del.png' alt='Удалить'></a>";
690
691                $nxt[7]=sprintf("%01.2f", $nxt[7]);     
692               
693                if(!$nxt[4]) $nxt[4]=$nxt[0];
694               
695                // Подсветка site
696                if($nxt['err_flag'])    $cc.=' f_red';
697                else if($nxt[5]=='site')        $cc.=' f_green';
698               
699               
700                $deflink="doc.php?mode=body&amp;doc=$nxt[0]";
701               
702                $tmpl->AddText("<tr class='$cc pointer'>
703                <td align='right' onclick='' class='$cl'>$nxt[4]$nxt[5]<a href='docj.php?mode=tree&amp;doc=$nxt[0]' title='Связи'><img src='img/i_tree.png' alt='Связи'></a>
704                <td><a href='$deflink' title='Изменить'><img src='img/i_edit.png' alt='Изменить'></a>
705                <td align='center' id='mo$nxt[0]'>$motions<td>$nxt[11]<td>$dop $dp<td>$nxt[9]<td align='right'>$nxt[7]<td>$dt<td>
706                <a href='/adm_users.php?mode=view&amp;id=$nxt[6]'>$nxt[10]</a>");
707        }
708        $tmpl->AddText("</table>");
709        $razn=$pr-$ras;
710        $pr=sprintf("%0.2f руб.",$pr);
711        $ras=sprintf("%0.2f руб.",$ras);
712        if($razn<0)
713                $razn=sprintf("<span class='c_red'>%0.2f руб.</span>",$razn);
714        else
715                $razn=sprintf("%0.2f руб.",$razn);
716
717        $tmpl->AddText("Итого: приход: $pr, расход: $ras. Баланс: $razn<br>
718        <b>Легенда</b>: строка - <span class='f_green'>с сайта</span>, <span class='f_red'>с ошибкой</span><br>Номер реализации - <span class='f_green'>Оплачено</span>, <span class='f_red'>Не оплачено</span>, <span class='f_brown'>Частично оплачено</span>, <span class='f_purple'>Переплата</span><br>
719        Номер заявки - <span class='f_green'>Отгружено</span>, <span class='f_brown'>Частично отгружено</span>
720        ");
721
722}
723else if($mode=="filter")
724{
725        $tmpl->ajax=1;
726        $opt=rcv('opt');
727        if($opt=='')
728        {
729                $date_st=$_SESSION['j_date_st'];
730                $date_end=$_SESSION['j_date_end'];
731
732                $sel=$_SESSION['j_select_tov'];
733                if($sel==0) $tov="отсутствует";
734                else
735                {
736                        $res=@mysql_query("SELECT `doc_base`.`name`,`doc_group`.`name` FROM `doc_base`
737                        LEFT JOIN `doc_group` ON `doc_group`.`id`=`doc_base`.`group`
738                        WHERE `doc_base`.`id`='$sel'");
739                        $tov=": ".mysql_result($res,0,1)." ".mysql_result($res,0,0);
740                }
741               
742                $asel=$_SESSION['j_agent'];
743                settype($asel,"int");
744                if($asel==0) $av='';
745                else
746                {
747                        $res=mysql_query("SELECT `name` FROM `doc_agent` WHERE `id`='$asel'");
748                        $av=mysql_result($res,0,0);
749                }
750               
751                $tov=$_SESSION['j_select_tov'];
752                if($tov==0) $tv="";
753                else
754                {
755                        $res=mysql_query("SELECT `name`,`proizv` FROM `doc_base` WHERE `id`='$tov'");
756                        $tv=mysql_result($res,0,0).":".mysql_result($res,0,1);
757                }
758                $dsel=$_SESSION['j_select_doc'];
759                $subtype=$_SESSION['j_select_subtype'];
760
761
762                $tmpl->AddText("
763                <h1>Фильтры</h1>
764                <form action='docj.php'>
765                <input type='hidden' name='mode' value='filter'>
766                <input type='hidden' name='opt' value='fs'>
767                <p class='datetime'>Дата<br>
768                от:<input type='text' id='id_pub_date_date' class='vDateField required' name='date_st' size='10' value='$date_st' maxlength='10'><br>
769                до:<input type='text' id='id_pub_date_date' class='vDateField required' name='date_end' size='10' value='$date_end' maxlength='10'></p>
770                Отбор по типу документа:<br>
771                <select name='doc_types' id='dtt'>");
772                        $ss='';
773                if($dsel==0) $ss='selected';
774                $tmpl->AddText("<option value='0' $ss>-- без отбора --</option>");
775                $res=mysql_query("SELECT * FROM `doc_types` ORDER BY `name`");
776                while($nxt=mysql_fetch_row($res))
777                {
778                        $ss='';
779                        if($dsel==$nxt[0]) $ss='selected';
780                        $tmpl->AddText("<option value='$nxt[0]' $ss>$nxt[1]</option>");
781                       
782                }
783                $tmpl->AddText("</select>
784                <br>
785                Подтип:<br>
786                <input type='text' id='pds' name='ptip' value='$subtype' onkeydown=\"return AutoFill('/docj.php?mode=filter&opt=pds','pds','ddp')\">
787                <a onclick=\"ClearText('pds'); return false;\" href=''><img src='/img/i_del.png' alt='Очистить'></a>
788                <div id='ddp' class='dd'></div><br>
789               
790                Агент-партнёр:<br>
791                <input type='text' id='aga' name='ag' value='$av' onkeydown=\"return AutoFill('/docj.php?mode=filter&opt=ags','aga','dda')\">
792                <a onclick=\"ClearText('aga'); return false;\" href=''><img src='/img/i_del.png' alt='Очистить'></a>
793                <div id='dda' class='dd'></div><br>
794               
795                Товар:<br>
796                <input type='text' id='ts' name='tov' value='$tv' onkeydown=\"return AutoFill('/docj.php?mode=filter&opt=ts','ts','ddt')\">
797                <a onclick=\"ClearText('ts'); return false;\" href=''><img src='/img/i_del.png' alt='Очистить'></a>
798                <div id='ddt' class='dd' style='width:450px;'></div><br>
799               
800
801
802                <div id='info'></div>
803                <br>
804                <input type='submit' value='Установить'>
805                </form>");
806        }
807        else if($opt=='fs')
808        {
809                $tov=rcv('tov');
810                if($tov)
811                {
812                        $res=mysql_query("SELECT `id`, `name`, `proizv` FROM `doc_base` WHERE `id`='$tov'");
813                        $tovar=mysql_fetch_row($res);
814                        $_SESSION['j_select_tov']=$tovar[0];
815                        $_SESSION['j_select_tov_name']=$tovar[1];
816                }
817                else
818                {
819                        $_SESSION['j_select_tov']=0;
820                        $_SESSION['j_select_tov_name']='';
821                }
822               
823               
824               
825                header('location: docj.php');                   
826        }
827       
828        else if($opt=='fsn')
829        {
830                $dt=@$_POST['dt'];
831                if(is_array($dt))
832                {
833                        $_SESSION['j_need_doctypes']=$dt;
834                        foreach($_SESSION['j_need_doctypes'] as $id => $line)
835                        {
836                                settype($_SESSION['j_need_doctypes'][$id], 'int');
837                        }
838                }
839                else $_SESSION['j_need_doctypes']='';
840               
841                $date_from=rcv('date_from');
842                $_SESSION['j_date_from']=date("Y-m-d",strtotime($date_from));
843
844                $date_to=rcv('date_to');
845                $_SESSION['j_date_to']=date("Y-m-d",strtotime($date_to)+(24*60*60-1));
846       
847                $_SESSION['j_select_altnum']=rcv('altnum');
848                $_SESSION['j_select_subtype']=rcv('subtype');
849               
850                $agent_id=rcv('agent_id');
851                $agent_name=rcv('agent_name');
852                if($agent_name)
853                {
854                        $res=mysql_query("SELECT `id`, `name` FROM `doc_agent` WHERE `id`='$agent_id'");
855                        $agent=mysql_fetch_row($res);
856                        $_SESSION['j_agent']=$agent[0];
857                        $_SESSION['j_agent_name']=$agent[1];
858                }
859                else
860                {
861                        $_SESSION['j_agent']=0;
862                        $_SESSION['j_agent_name']='';
863                }
864               
865                $tov_id=rcv('tov_id');
866                if(rcv('tov_name'))
867                {
868                        $res=mysql_query("SELECT `id`, `name`, `proizv` FROM `doc_base` WHERE `id`='$tov_id'");
869                        $tovar=mysql_fetch_row($res);
870                        $_SESSION['j_select_tov']=$tovar[0];
871                        $_SESSION['j_select_tov_name']=$tovar[1];
872                }
873                else
874                {
875                        $_SESSION['j_select_tov']=0;
876                        $_SESSION['j_select_tov_name']='';
877                }
878               
879                $autor_id=rcv('autor_id');
880                if(rcv('autor_name'))
881                {
882                        $res=mysql_query("SELECT `id`, `name` FROM `users` WHERE `id`='$autor_id'");
883                        $autor=mysql_fetch_row($res);
884                        $_SESSION['j_select_autor_id']=$autor[0];
885                        $_SESSION['j_select_autor_name']=$autor[1];
886                }
887                else
888                {
889                        $_SESSION['j_select_autor_id']=0;
890                        $_SESSION['j_select_autor_name']='';
891                }
892               
893                $_SESSION['j_select_firm']=round(rcv('firm'));
894                $_SESSION['j_select_bank']=round(rcv('bank'));
895                $_SESSION['j_select_kassa']=round(rcv('kassa'));
896                $_SESSION['j_select_sklad']=round(rcv('sklad'));
897               
898                header('location: docj.php');                   
899        }
900       
901        else if($opt=='dts')
902        {
903                        $s=rcv('s');
904                        if($date_st) $_SESSION['j_date_st']=$s;
905                        $tmpl->AddText("Дата установлена!");
906       
907        }
908        else if($opt=='ags')
909        {
910                        $s=rcv('s');
911                        $res=mysql_query("SELECT `id`,`name` FROM `doc_agent` WHERE LOWER(`name`) LIKE LOWER('%$s%') ORDER BY `name` LIMIT 100");
912                        $row=mysql_numrows($res);
913                        $tmpl->AddText("<div class='pointer' onclick=\"return AutoFillClick('aga','','dda');\">-- Убрать --</div>");
914                        while($nxt=mysql_fetch_row($res))
915                        {
916                                $i=1;
917                                $tmpl->AddText("<div class='pointer' onclick=\"return AutoFillClick('aga','$nxt[1]','dda');\">$nxt[1]</div>");
918                        }
919                        if(!$i) $tmpl->AddText("<b>Искомая комбинация не найдена!");
920       
921        }
922        else if($opt=='ts')
923        {
924                        $s=rcv('s');
925                        $tov=split(':',$s);
926                        $res=mysql_query("SELECT `doc_base`.`id`, `doc_base`.`name`, `doc_base`.`proizv`, `doc_base`.`cost`, `doc_base_dop`.`analog`
927                        FROM `doc_base`
928                        LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
929                        WHERE `doc_base`.`name` LIKE '%$tov[0]%' AND `doc_base`.`proizv` LIKE '%$tov[1]%' ORDER BY `doc_base`.`name` LIMIT 100");
930                       
931                        echo mysql_error();
932                        $tmpl->AddText("<table width='100%'>
933                        <tr><th>наим.<th>произв.<th>Цена<th>Аналог
934                        <tr class='pointer' onclick=\"return AutoFillClick('ts','','ddt');\"><td colspan='4'>-- Убрать --");
935                        while($nxt=mysql_fetch_row($res))
936                        {
937                                $i=1;
938                                $tmpl->AddText("<tr class='pointer' onclick=\"return AutoFillClick('ts','$nxt[1]:$nxt[2]','ddt');\"><td>$nxt[1]<td>$nxt[2]<td>$nxt[3]<td>$nxt[4]");
939                        }
940                        if(!$i) $tmpl->AddText("<b>Искомая комбинация не найдена!");
941       
942        }
943        else if($opt=='pds')
944        {
945                        $s=rcv('s');
946                        $res=mysql_query("SELECT `id`,`subtype` FROM `doc_list` WHERE LOWER(`subtype`) LIKE LOWER('%$s%')GROUP BY `subtype`  ORDER BY `subtype`  LIMIT 100");
947                        $row=mysql_numrows($res);
948                        $tmpl->AddText("<div class='pointer' onclick=\"return AutoFillClick('pds','','ddp');\">-- Убрать --</div>");
949                        while($nxt=mysql_fetch_row($res))
950                        {
951                                $i=1;
952                                $tmpl->AddText("<div class='pointer' onclick=\"return AutoFillClick('pds','$nxt[1]','ddp');\">$nxt[1]</div>");
953                        }
954                        if(!$i) $tmpl->AddText("<b>Искомая комбинация не найдена!");
955        }
956        else if($opt=='firm')
957        {
958                $_SESSION['firm']=$firm=rcv('firm');
959                if($firm)
960                        mysql_query("REPLACE `users_data` (`uid`, `param`, `value`) VALUES ('$uid', 'firm_id', '$firm') ");
961                header('location: docj.php');
962        }
963}
964else if($mode=="del")
965{
966        $tmpl->ajax=1;
967        $_id=rcv('_id');
968        $ok=rcv('ok');
969        settype($_id,"int");
970        $tim=time();
971        if(!isAccess('doc_list','delete'))      throw new AccessException("");
972        $res=mysql_query("SELECT `id` FROM `doc_list` WHERE `p_doc`='$_id' AND `mark_del`='0'");
973        if(!mysql_num_rows($res)) // Если есть потомки - нельзя удалять
974        {
975                if(!$ok)        $tmpl->AddText("Удалить?<a href=''  onclick=\"EditThis('/docj.php?mode=del&_id=$_id&ok=1','mo$_id'); return false;\">Да!</a>");
976                else
977                {
978                        $res=mysql_query("UPDATE `doc_list` SET `mark_del`='$tim' WHERE `id`='$_id'");
979                        if($res)
980                        $tmpl->AddText("Установлена пометка на удаление!");
981                        else $tmpl->msg("Не удалось отметить!","err");
982                        doc_log("MARKDELETE doc:$_id","doc:$_id");
983       
984                }
985        }
986        else    $tmpl->AddText("Есть подчинённые не удалённые документы. Удаление невозможно.");
987}
988else if($mode=="undel")
989{
990        $tmpl->ajax=1;
991        $_id=rcv('_id');
992        $ok=rcv('ok');
993        settype($_id,"int");
994        if(!isAccess('doc_list','delete'))      throw new AccessException("");
995        if(!$ok)
996        $tmpl->AddText("Отменить удаление?<br><a href='' onclick=\"EditThis('/docj.php?mode=undel&_id=$_id&ok=1','mo$_id'); return false;\">Да, отменить!</a>");
997        else
998        {
999                $res=mysql_query("UPDATE `doc_list` SET `mark_del`='0' WHERE `id`='$_id'");
1000                if($res)
1001                $tmpl->AddText("Убрана пометка!");
1002                else $tmpl->msg("Не удалось убрать метку!","err");
1003                doc_log("UNDELETE doc:$_id","doc:$_id");
1004
1005        }
1006}
1007else if($mode=='log')
1008{
1009        $doc=rcv('doc');
1010        $res=mysql_query("SELECT `doc_log`.`motion`, `doc_log`.`desc`, `doc_log`.`time`, `users`.`name`, `doc_log`.`ip`
1011        FROM `doc_log`
1012        LEFT JOIN `users` ON `users`.`id`=`doc_log`.`user`
1013        WHERE `doc_log`.`object`='doc' AND `doc_log`.`object_id`='$doc'");
1014        $tmpl->AddText("<h1>История документа $doc</h1>
1015        <table width=100%>
1016        <tr><th>Выполненное действие<th>Описание действия<th>Дата<th>Пользователь<th>IP");
1017        $i=0;
1018        while($nxt=mysql_fetch_row($res))
1019        {
1020                $i=1-$i;
1021                $tmpl->AddText("<tr class='lin$i'><td>$nxt[0]<td>$nxt[1]<td>$nxt[2]<td>$nxt[3]<td>$nxt[4]");
1022       
1023        }
1024        $tmpl->AddText("</table>");
1025       
1026}
1027else if($mode=="tree")
1028{
1029        doc_menu("");
1030        $doc=rcv('doc');
1031        $pdoc=GetRootDocument($doc);
1032        $tmpl->AddText("<h1>Структура для $doc с $pdoc</h1>");
1033        DrawSubTreeDocument($pdoc,$doc);
1034}
1035else doc_log("ERROR","docj.php: Неверный mode!");
1036
1037
1038
1039
1040$tmpl->write();
1041
1042
1043?>
Note: See TracBrowser for help on using the repository browser.