1
docj.php in trunk/web – MultiMag

source: trunk/web/docj.php @ 257

Last change on this file since 257 was 257, checked in by blacklight, 7 years ago
  • Сделана возможность работы авторизации на наскольких виртуальных хостах одновлеменно
  • Сделана возможность принудительного включения https при авторизации и регистрации, либо для всего сайта в целом
  • Реализована модерация коментариев
  • Реализован список пользователей с возможностью просмотра профиля
  • Нажатие на имя пользователя в журнале документов теперь открывает карточку пользователя, а не журнал изменений документа, как раньше
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='';
572                $dt=date("d.m.Y H:i:s",$nxt[3]);
573               
574                // Доп. информация
575                switch($nxt['type'])
576                {
577                        case 1:
578                        case 2:
579                        case 3:
580                        case 8:
581                        case 12:
582                        case 15:
583                        case 17:
584                        {
585                                $r=mysql_query("SELECT `id`, `name` FROM `doc_sklady` WHERE `id`='{$nxt['sklad']}'");
586                                $data=mysql_fetch_row($r);
587                                $dop="Склад: $data[1] /$data[0]";
588                        }       break; 
589                        case 4:
590                        case 5:
591                        {
592                                $r=mysql_query("SELECT `num`, `name` FROM `doc_kassa` WHERE `num`='{$nxt['bank']}' AND `ids`='bank'");
593                                $data=mysql_fetch_row($r);
594                                $dop="Банк: $data[1] /$data[0]";
595                        }       break;
596                        case 6:
597                        case 7:
598                        case 9:
599                        {
600                                $r=mysql_query("SELECT `num`, `name` FROM `doc_kassa` WHERE `num`='{$nxt['kassa']}' AND `ids`='kassa'");
601                                $data=mysql_fetch_row($r);
602                                $dop="Касса: $data[1] /$data[0]";
603                        }       break;
604                        case 10:
605                        case 11:
606                        case 13:
607                        case 14:
608                                break;
609                       
610                }
611               
612
613                if($nxt[2])
614                {
615                        if($nxt[1]==1)          $pr+=$nxt[7];
616                        else if($nxt[1]==2)     $ras+=$nxt[7];
617                        else if($nxt[1]==4)     $pr+=$nxt[7];
618                        else if($nxt[1]==5)     $ras+=$nxt[7];
619                        else if($nxt[1]==6)     $pr+=$nxt[7];
620                        else if($nxt[1]==7)     $ras+=$nxt[7];
621                        else if($nxt[1]==18)    $ras+=$nxt[7];
622                }
623
624                // Проплаты
625                $cl='';
626               
627                if(($nxt[1]==2)&&($nxt[7]>0))
628                {
629                        $add='';
630                        if($nxt[12]) $add=" OR (`p_doc`='$nxt[12]' AND (`type`='4' OR `type`='6'))";
631                        $rs=mysql_query("SELECT SUM(`sum`) FROM `doc_list` WHERE
632                        (`p_doc`='$nxt[0]' AND (`type`='4' OR `type`='6'))
633                        $add
634                                AND `ok`>0 AND `p_doc`!='0' GROUP BY `p_doc`");
635                        if(@$prop=mysql_result($rs,0,0))
636                        {
637                                $prop=sprintf("%0.2f",$prop);
638                                if($prop==$nxt[7])      $cl='f_green';
639                                else if($prop>$nxt[7])  $cl='f_purple';
640                                else $cl='f_brown';
641                        }
642                        else $cl='f_red';       
643                }
644                // Перемещения
645                if($nxt[1]==8)
646                {
647                        $rr=mysql_query("SELECT `doc_sklady`.`name` FROM `doc_dopdata`
648                        LEFT JOIN `doc_sklady` ON `doc_sklady`.`id`=`doc_dopdata`.`value`
649                        WHERE `doc_dopdata`.`doc`='$nxt[0]' AND `doc_dopdata`.`param`='na_sklad'");
650                        $nxt[9]="На ".@mysql_result($rr,0,0);
651                        mysql_free_result($rr);
652                }
653
654
655                $i=1-$i;
656                $dp=$motions="";
657                if($sel)
658                {
659                        $sm=$nxt[13]*$nxt[14];
660                        $sm=sprintf("%0.2f",$sm);
661                        $dp="<td>$nxt[13]<td>$nxt[14]<td>$sm";
662                }
663               
664                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>";
665                if($nxt[2]) $motions.=" <img src='/img/i_suc.png' alt='Проведен'>";
666                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>";
667
668                $nxt[7]=sprintf("%01.2f", $nxt[7]);     
669               
670                if(!$nxt[4]) $nxt[4]=$nxt[0];
671                $cc="lin$i";
672                if(@$uid==$nxt[6])      $cc.='1';
673               
674                // Подсветка site
675                if($nxt['err_flag'])    $cc.=' f_red';
676                else if($nxt[5]=='site')        $cc.=' f_green';
677               
678               
679                $deflink="doc.php?mode=body&amp;doc=$nxt[0]";
680               
681                $tmpl->AddText("<tr class='$cc pointer'>
682                <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>
683                <td><a href='$deflink' title='Изменить'><img src='img/i_edit.png' alt='Изменить'></a>
684                <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>
685                <a href='/adm_users.php?mode=view&amp;id=$nxt[6]'>$nxt[10]</a>");
686        }
687        $tmpl->AddText("</table>");
688        $razn=$pr-$ras;
689        $pr=sprintf("%0.2f руб.",$pr);
690        $ras=sprintf("%0.2f руб.",$ras);
691        if($razn<0)
692                $razn=sprintf("<span class='c_red'>%0.2f руб.</span>",$razn);
693        else
694                $razn=sprintf("%0.2f руб.",$razn);
695
696        $tmpl->AddText("Итого: приход: $pr, расход: $ras. Баланс: $razn<br>
697        <b>Легенда</b>: строка - <span class='f_green'>с сайта</span>, <span class='f_red'>с ошибкой</span>, номер - <span class='f_green'>Оплачено</span>, <span class='f_red'>Не оплачено</span>, <span class='f_brown'>Частично оплачено</span>, <span class='f_purple'>Переплата</span>
698        ");
699
700}
701else if($mode=="filter")
702{
703        $tmpl->ajax=1;
704        $opt=rcv('opt');
705        if($opt=='')
706        {
707                $date_st=$_SESSION['j_date_st'];
708                $date_end=$_SESSION['j_date_end'];
709
710                $sel=$_SESSION['j_select_tov'];
711                if($sel==0) $tov="отсутствует";
712                else
713                {
714                        $res=@mysql_query("SELECT `doc_base`.`name`,`doc_group`.`name` FROM `doc_base`
715                        LEFT JOIN `doc_group` ON `doc_group`.`id`=`doc_base`.`group`
716                        WHERE `doc_base`.`id`='$sel'");
717                        $tov=": ".mysql_result($res,0,1)." ".mysql_result($res,0,0);
718                }
719               
720                $asel=$_SESSION['j_agent'];
721                settype($asel,"int");
722                if($asel==0) $av='';
723                else
724                {
725                        $res=mysql_query("SELECT `name` FROM `doc_agent` WHERE `id`='$asel'");
726                        $av=mysql_result($res,0,0);
727                }
728               
729                $tov=$_SESSION['j_select_tov'];
730                if($tov==0) $tv="";
731                else
732                {
733                        $res=mysql_query("SELECT `name`,`proizv` FROM `doc_base` WHERE `id`='$tov'");
734                        $tv=mysql_result($res,0,0).":".mysql_result($res,0,1);
735                }
736                $dsel=$_SESSION['j_select_doc'];
737                $subtype=$_SESSION['j_select_subtype'];
738
739
740                $tmpl->AddText("
741                <h1>Фильтры</h1>
742                <form action='docj.php'>
743                <input type='hidden' name='mode' value='filter'>
744                <input type='hidden' name='opt' value='fs'>
745                <p class='datetime'>Дата<br>
746                от:<input type='text' id='id_pub_date_date' class='vDateField required' name='date_st' size='10' value='$date_st' maxlength='10'><br>
747                до:<input type='text' id='id_pub_date_date' class='vDateField required' name='date_end' size='10' value='$date_end' maxlength='10'></p>
748                Отбор по типу документа:<br>
749                <select name='doc_types' id='dtt'>");
750                        $ss='';
751                if($dsel==0) $ss='selected';
752                $tmpl->AddText("<option value='0' $ss>-- без отбора --</option>");
753                $res=mysql_query("SELECT * FROM `doc_types` ORDER BY `name`");
754                while($nxt=mysql_fetch_row($res))
755                {
756                        $ss='';
757                        if($dsel==$nxt[0]) $ss='selected';
758                        $tmpl->AddText("<option value='$nxt[0]' $ss>$nxt[1]</option>");
759                       
760                }
761                $tmpl->AddText("</select>
762                <br>
763                Подтип:<br>
764                <input type='text' id='pds' name='ptip' value='$subtype' onkeydown=\"return AutoFill('/docj.php?mode=filter&opt=pds','pds','ddp')\">
765                <a onclick=\"ClearText('pds'); return false;\" href=''><img src='/img/i_del.png' alt='Очистить'></a>
766                <div id='ddp' class='dd'></div><br>
767               
768                Агент-партнёр:<br>
769                <input type='text' id='aga' name='ag' value='$av' onkeydown=\"return AutoFill('/docj.php?mode=filter&opt=ags','aga','dda')\">
770                <a onclick=\"ClearText('aga'); return false;\" href=''><img src='/img/i_del.png' alt='Очистить'></a>
771                <div id='dda' class='dd'></div><br>
772               
773                Товар:<br>
774                <input type='text' id='ts' name='tov' value='$tv' onkeydown=\"return AutoFill('/docj.php?mode=filter&opt=ts','ts','ddt')\">
775                <a onclick=\"ClearText('ts'); return false;\" href=''><img src='/img/i_del.png' alt='Очистить'></a>
776                <div id='ddt' class='dd' style='width:450px;'></div><br>
777               
778
779
780                <div id='info'></div>
781                <br>
782                <input type='submit' value='Установить'>
783                </form>");
784        }
785        else if($opt=='fs')
786        {
787//                      $date_st=rcv('date_st');
788//                      $_SESSION['j_date_st']=date("Y-m-d",strtotime($date_st));
789//
790//                      $date_end=rcv('date_end');
791//                      $_SESSION['j_date_end']=date("Y-m-d",strtotime($date_end)+(24*60*60-1));
792//                     
793//                      $dsel=rcv('doc_types');
794//                      $_SESSION['j_select_doc']=$dsel;
795//                     
796//                      $tsel=rcv('ptip');
797//                      $_SESSION['j_select_subtype']=$tsel;
798//                     
799//                     
800//                      $ag=rcv('ag');
801//                      if($ag)
802//                      {
803//                              $res=mysql_query("SELECT `id` FROM `doc_agent` WHERE `name`='$ag'");
804//                              @$ag=mysql_result($res,0,0);
805//                      }
806//                      else $ag=0;
807//                      $_SESSION['j_agent']=$ag;
808//                     
809//                      $tov=rcv('tov');
810//                      if(($tov)&&($tov!=':'))
811//                      {
812//                              $tov=split(':',$tov);
813//                              $res=mysql_query("SELECT `id` FROM `doc_base` WHERE `name`='$tov[0]' AND `proizv`='$tov[1]'");
814//                              @$tov=mysql_result($res,0,0);
815//                      }
816//                      else $tov=0;
817//                      $_SESSION['j_select_tov']=$tov;
818               
819                $tov=rcv('tov');
820                if($tov)
821                {
822                        $res=mysql_query("SELECT `id`, `name`, `proizv` FROM `doc_base` WHERE `id`='$tov'");
823                        $tovar=mysql_fetch_row($res);
824                        $_SESSION['j_select_tov']=$tovar[0];
825                        $_SESSION['j_select_tov_name']=$tovar[1];
826                }
827                else
828                {
829                        $_SESSION['j_select_tov']=0;
830                        $_SESSION['j_select_tov_name']='';
831                }
832               
833               
834               
835                header('location: docj.php');                   
836        }
837       
838        else if($opt=='fsn')
839        {
840                $dt=@$_POST['dt'];
841                if(is_array($dt))
842                {
843                        $_SESSION['j_need_doctypes']=$dt;
844                        foreach($_SESSION['j_need_doctypes'] as $id => $line)
845                        {
846                                settype($_SESSION['j_need_doctypes'][$id], 'int');
847                        }
848                }
849                else $_SESSION['j_need_doctypes']='';
850               
851                $date_from=rcv('date_from');
852                $_SESSION['j_date_from']=date("Y-m-d",strtotime($date_from));
853
854                $date_to=rcv('date_to');
855                $_SESSION['j_date_to']=date("Y-m-d",strtotime($date_to)+(24*60*60-1));
856       
857                $_SESSION['j_select_altnum']=rcv('altnum');
858                $_SESSION['j_select_subtype']=rcv('subtype');
859               
860                $agent_id=rcv('agent_id');
861                $agent_name=rcv('agent_name');
862                if($agent_name)
863                {
864                        $res=mysql_query("SELECT `id`, `name` FROM `doc_agent` WHERE `id`='$agent_id'");
865                        $agent=mysql_fetch_row($res);
866                        $_SESSION['j_agent']=$agent[0];
867                        $_SESSION['j_agent_name']=$agent[1];
868                }
869                else
870                {
871                        $_SESSION['j_agent']=0;
872                        $_SESSION['j_agent_name']='';
873                }
874               
875                $tov_id=rcv('tov_id');
876                if(rcv('tov_name'))
877                {
878                        $res=mysql_query("SELECT `id`, `name`, `proizv` FROM `doc_base` WHERE `id`='$tov_id'");
879                        $tovar=mysql_fetch_row($res);
880                        $_SESSION['j_select_tov']=$tovar[0];
881                        $_SESSION['j_select_tov_name']=$tovar[1];
882                }
883                else
884                {
885                        $_SESSION['j_select_tov']=0;
886                        $_SESSION['j_select_tov_name']='';
887                }
888               
889                $autor_id=rcv('autor_id');
890                if(rcv('autor_name'))
891                {
892                        $res=mysql_query("SELECT `id`, `name` FROM `users` WHERE `id`='$autor_id'");
893                        $autor=mysql_fetch_row($res);
894                        $_SESSION['j_select_autor_id']=$autor[0];
895                        $_SESSION['j_select_autor_name']=$autor[1];
896                }
897                else
898                {
899                        $_SESSION['j_select_autor_id']=0;
900                        $_SESSION['j_select_autor_name']='';
901                }
902               
903                $_SESSION['j_select_firm']=round(rcv('firm'));
904                $_SESSION['j_select_bank']=round(rcv('bank'));
905                $_SESSION['j_select_kassa']=round(rcv('kassa'));
906                $_SESSION['j_select_sklad']=round(rcv('sklad'));
907               
908                header('location: docj.php');                   
909        }
910       
911        else if($opt=='dts')
912        {
913                        $s=rcv('s');
914                        if($date_st) $_SESSION['j_date_st']=$s;
915                        $tmpl->AddText("Дата установлена!");
916       
917        }
918        else if($opt=='ags')
919        {
920                        $s=rcv('s');
921                        $res=mysql_query("SELECT `id`,`name` FROM `doc_agent` WHERE LOWER(`name`) LIKE LOWER('%$s%') ORDER BY `name` LIMIT 100");
922                        $row=mysql_numrows($res);
923                        $tmpl->AddText("<div class='pointer' onclick=\"return AutoFillClick('aga','','dda');\">-- Убрать --</div>");
924                        while($nxt=mysql_fetch_row($res))
925                        {
926                                $i=1;
927                                $tmpl->AddText("<div class='pointer' onclick=\"return AutoFillClick('aga','$nxt[1]','dda');\">$nxt[1]</div>");
928                        }
929                        if(!$i) $tmpl->AddText("<b>Искомая комбинация не найдена!");
930       
931        }
932        else if($opt=='ts')
933        {
934                        $s=rcv('s');
935                        $tov=split(':',$s);
936                        $res=mysql_query("SELECT `doc_base`.`id`, `doc_base`.`name`, `doc_base`.`proizv`, `doc_base`.`cost`, `doc_base_dop`.`analog`
937                        FROM `doc_base`
938                        LEFT JOIN `doc_base_dop` ON `doc_base_dop`.`id`=`doc_base`.`id`
939                        WHERE `doc_base`.`name` LIKE '%$tov[0]%' AND `doc_base`.`proizv` LIKE '%$tov[1]%' ORDER BY `doc_base`.`name` LIMIT 100");
940                       
941                        echo mysql_error();
942                        $tmpl->AddText("<table width='100%'>
943                        <tr><th>наим.<th>произв.<th>Цена<th>Аналог
944                        <tr class='pointer' onclick=\"return AutoFillClick('ts','','ddt');\"><td colspan='4'>-- Убрать --");
945                        while($nxt=mysql_fetch_row($res))
946                        {
947                                $i=1;
948                                $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]");
949                        }
950                        if(!$i) $tmpl->AddText("<b>Искомая комбинация не найдена!");
951       
952        }
953        else if($opt=='pds')
954        {
955                        $s=rcv('s');
956                        $res=mysql_query("SELECT `id`,`subtype` FROM `doc_list` WHERE LOWER(`subtype`) LIKE LOWER('%$s%')GROUP BY `subtype`  ORDER BY `subtype`  LIMIT 100");
957                        $row=mysql_numrows($res);
958                        $tmpl->AddText("<div class='pointer' onclick=\"return AutoFillClick('pds','','ddp');\">-- Убрать --</div>");
959                        while($nxt=mysql_fetch_row($res))
960                        {
961                                $i=1;
962                                $tmpl->AddText("<div class='pointer' onclick=\"return AutoFillClick('pds','$nxt[1]','ddp');\">$nxt[1]</div>");
963                        }
964                        if(!$i) $tmpl->AddText("<b>Искомая комбинация не найдена!");
965        }
966        else if($opt=='firm')
967        {
968                $_SESSION['firm']=$firm=rcv('firm');
969                if($firm)
970                        mysql_query("REPLACE `users_data` (`uid`, `param`, `value`) VALUES ('$uid', 'firm_id', '$firm') ");
971                header('location: docj.php');
972        }
973}
974else if($mode=="del")
975{
976        $tmpl->ajax=1;
977        $_id=rcv('_id');
978        $ok=rcv('ok');
979        settype($_id,"int");
980        $tim=time();
981        if(!isAccess('doc_list','delete'))      throw new AccessException("");
982        $res=mysql_query("SELECT `id` FROM `doc_list` WHERE `p_doc`='$_id' AND `mark_del`='0'");
983        if(!mysql_num_rows($res)) // Если есть потомки - нельзя удалять
984        {
985                if(!$ok)        $tmpl->AddText("Удалить?<a href=''  onclick=\"EditThis('/docj.php?mode=del&_id=$_id&ok=1','mo$_id'); return false;\">Да!</a>");
986                else
987                {
988                        $res=mysql_query("UPDATE `doc_list` SET `mark_del`='$tim' WHERE `id`='$_id'");
989                        if($res)
990                        $tmpl->AddText("Установлена пометка на удаление!");
991                        else $tmpl->msg("Не удалось отметить!","err");
992                        doc_log("MARKDELETE doc:$_id","doc:$_id");
993       
994                }
995        }
996        else    $tmpl->AddText("Есть подчинённые не удалённые документы. Удаление невозможно.");
997}
998else if($mode=="undel")
999{
1000        $tmpl->ajax=1;
1001        $_id=rcv('_id');
1002        $ok=rcv('ok');
1003        settype($_id,"int");
1004        if(!isAccess('doc_list','delete'))      throw new AccessException("");
1005        if(!$ok)
1006        $tmpl->AddText("Отменить удаление?<br><a href='' onclick=\"EditThis('/docj.php?mode=undel&_id=$_id&ok=1','mo$_id'); return false;\">Да, отменить!</a>");
1007        else
1008        {
1009                $res=mysql_query("UPDATE `doc_list` SET `mark_del`='0' WHERE `id`='$_id'");
1010                if($res)
1011                $tmpl->AddText("Убрана пометка!");
1012                else $tmpl->msg("Не удалось убрать метку!","err");
1013                doc_log("UNDELETE doc:$_id","doc:$_id");
1014
1015        }
1016}
1017else if($mode=='log')
1018{
1019        $doc=rcv('doc');
1020        $res=mysql_query("SELECT `doc_log`.`motion`, `doc_log`.`desc`, `doc_log`.`time`, `users`.`name`, `doc_log`.`ip`
1021        FROM `doc_log`
1022        LEFT JOIN `users` ON `users`.`id`=`doc_log`.`user`
1023        WHERE `doc_log`.`object`='doc' AND `doc_log`.`object_id`='$doc'");
1024        $tmpl->AddText("<h1>История документа $doc</h1>
1025        <table width=100%>
1026        <tr><th>Выполненное действие<th>Описание действия<th>Дата<th>Пользователь<th>IP");
1027        $i=0;
1028        while($nxt=mysql_fetch_row($res))
1029        {
1030                $i=1-$i;
1031                $tmpl->AddText("<tr class='lin$i'><td>$nxt[0]<td>$nxt[1]<td>$nxt[2]<td>$nxt[3]<td>$nxt[4]");
1032       
1033        }
1034        $tmpl->AddText("</table>");
1035       
1036}
1037else if($mode=="tree")
1038{
1039        doc_menu("");
1040        $doc=rcv('doc');
1041        $pdoc=GetRootDocument($doc);
1042        $tmpl->AddText("<h1>Структура для $doc с $pdoc</h1>");
1043        DrawSubTreeDocument($pdoc,$doc);
1044}
1045else doc_log("ERROR","docj.php: Неверный mode!");
1046
1047
1048
1049
1050$tmpl->write();
1051
1052
1053?>
Note: See TracBrowser for help on using the repository browser.