1
doc.core.php in trunk/web/include – MultiMag

source: trunk/web/include/doc.core.php @ 255

Last change on this file since 255 was 255, checked in by blacklight, 7 years ago
  • Скорректирован алгоритм расчёта ликвидности
  • Сделан отчёт *остатки товара на складе*
  • Положено начало модульной структуры отчётов
  • Добавлено округление в расчёте АЦП
File size: 21.5 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($CONFIG['site']['location']."/include/doc.tovary.php");
21include_once($CONFIG['site']['location']."/include/doc.nulltype.php");
22
23function __autoload($class_name)
24{
25        global $CONFIG;
26       
27        $class_name= strtolower($class_name);
28        $nm2=split('_',$class_name,2);
29        if(is_array($nm2))
30        {
31                list($class_type, $class_name)=$nm2;
32                if($class_type=='doc')          include_once $CONFIG['site']['location']."/include/doc.".$class_name.'.php';
33                else if($class_type=='report')  include_once $CONFIG['site']['location']."/include/reports/".$class_name.'.php';       
34        }
35        @include_once $CONFIG['site']['location']."/gate/include/doc.s.".$class_name.'.php';
36        @include_once $CONFIG['site']['location']."/include/".$class_name.'.php';
37       
38}
39
40function num2str_semantic($i,&$words,&$fem,$f)
41{
42        $_1_2[1]="одна ";
43        $_1_2[2]="две ";
44
45        $_1_19[1]="один ";
46        $_1_19[2]="два ";
47        $_1_19[3]="три ";
48        $_1_19[4]="четыре ";
49        $_1_19[5]="пять ";
50        $_1_19[6]="шесть ";
51        $_1_19[7]="семь ";
52        $_1_19[8]="восемь ";
53        $_1_19[9]="девять ";
54        $_1_19[10]="десять ";
55
56        $_1_19[11]="одиннацать ";
57        $_1_19[12]="двенадцать ";
58        $_1_19[13]="тринадцать ";
59        $_1_19[14]="четырнадцать ";
60        $_1_19[15]="пятнадцать ";
61        $_1_19[16]="шестнадцать ";
62        $_1_19[17]="семнадцать ";
63        $_1_19[18]="восемнадцать ";
64        $_1_19[19]="девятнадцать ";
65
66        $des[2]="двадцать ";
67        $des[3]="тридцать ";
68        $des[4]="сорок ";
69        $des[5]="пятьдесят ";
70        $des[6]="шестьдесят ";
71        $des[7]="семьдесят ";
72        $des[8]="восемдесят ";
73        $des[9]="девяносто ";
74
75        $hang[1]="сто ";
76        $hang[2]="двести ";
77        $hang[3]="триста ";
78        $hang[4]="четыреста ";
79        $hang[5]="пятьсот ";
80        $hang[6]="шестьсот ";
81        $hang[7]="семьсот ";
82        $hang[8]="восемьсот ";
83        $hang[9]="девятьсот ";
84
85        $words="";
86        $fl=0;
87        if($i >= 100)
88        {
89                $jkl = intval($i / 100);
90                $words.=$hang[$jkl];
91                $i%=100;
92        }
93        if($i >= 20)
94        {
95                $jkl = intval($i / 10);
96                $words.=$des[$jkl];
97                $i%=10;
98                $fl=1;
99        }
100        switch($i)
101        {
102                case 1: $fem=1; break;
103                case 2:
104                case 3:
105                case 4: $fem=2; break;
106                default: $fem=3; break;
107        }
108        if($i)
109        {
110                if($i<3 && $f>0)
111                {
112                        if($f>=2)
113                        {
114                                $words.=$_1_19[$i];
115                        }
116                        else
117                        {
118                                $words.=$_1_2[$i];
119                        }
120                }
121                else
122                {
123                        $words.=$_1_19[$i];
124                }
125        }
126}
127
128// Число прописью
129function num2str($L, $ed='rub', $sot=2)
130{
131        if($ed=='kg')
132        {
133                $namerub[1]="килограмм ";
134                $namerub[2]="килограмма ";
135                $namerub[3]="килограммов ";
136
137                $kopeek[1]="грамм ";
138                $kopeek[2]="грамма ";
139                $kopeek[3]="граммов ";
140        }
141        else if($ed=='sht')
142        {
143                $namerub[1]="штука ";
144                $namerub[2]="штуки ";
145                $namerub[3]="штук ";
146
147                $kopeek[1]="сотая ";
148                $kopeek[2]="сотые ";
149                $kopeek[3]="сотых ";
150        }
151        else if($ed=='nul')
152        {
153                $namerub[1]=", ";
154                $namerub[2]=", ";
155                $namerub[3]=", ";
156                if($sot==1)
157                {
158                        $kopeek[1]=" десятых";
159                        $kopeek[2]=" десятых";
160                        $kopeek[3]=" десятых";
161                }
162                else if($ost==3)
163                {
164                        $kopeek[1]=" тысячных";
165                        $kopeek[2]=" тысячных";
166                        $kopeek[3]=" тысячных";
167                }
168                else
169                {
170                        $kopeek[1]=" сотых";
171                        $kopeek[2]=" сотых";
172                        $kopeek[3]=" сотых";
173                }
174               
175        }
176        else
177        {
178                $namerub[1]="рубль ";
179                $namerub[2]="рубля ";
180                $namerub[3]="рублей ";
181
182                $kopeek[1]="копейка ";
183                $kopeek[2]="копейки ";
184                $kopeek[3]="копеек ";
185        }
186
187
188        $nametho[1]="тысяча ";
189        $nametho[2]="тысячи ";
190        $nametho[3]="тысяч ";
191
192        $namemil[1]="миллион ";
193        $namemil[2]="миллиона ";
194        $namemil[3]="миллионов ";
195
196        $namemrd[1]="миллиард ";
197        $namemrd[2]="миллиарда ";
198        $namemrd[3]="миллиардов ";
199
200        $s=" ";
201        $s1=" ";
202        $s2=" ";
203        $krat=1;
204        for($i=0;$i<$sot;$i++,$krat*=10);
205
206        $kop=intval( ( $L*$krat - intval( $L )*$krat ));
207        $L=intval($L);
208        if($L>=1000000000)
209        {
210                $many=0;
211                num2str_semantic(intval($L / 1000000000),$s1,$many,3);
212                $s.=$s1.$namemrd[$many];
213                $L%=1000000000;
214        }
215
216        if($L >= 1000000)
217        {
218                $many=0;
219                num2str_semantic(intval($L / 1000000),$s1,$many,2);
220                $s.=$s1.$namemil[$many];
221                $L%=1000000;
222                if($L==0)
223                {
224                        $s.=$namerub[3];
225                }
226        }
227
228        if($L >= 1000)
229        {
230                $many=0;
231                num2str_semantic(intval($L / 1000),$s1,$many,1);
232                $s.=$s1.$nametho[$many];
233                $L%=1000;
234                if($L==0)
235                {
236                        $s.=$namerub[3];
237                }
238        }
239
240        if($L != 0)
241        {
242                $many=0;
243                num2str_semantic($L,$s1,$many,0);
244                $s.=$s1.$namerub[$many];
245        }
246
247        if($sot)
248        {
249                if($kop > 0)
250                {
251                        $many=0;
252                        num2str_semantic($kop,$s1,$many,1);
253                        $s.=$s1.$kopeek[$many];
254                }
255                else
256                {
257                        $s.=" 00 $kopeek[3]";
258                }
259        }
260        return $s;
261}
262
263$firm_id=@$_SESSION['firm'];
264//if(!$firm_id) $firm_id=$_SESSION['firm']=1;
265//if($firm_id>1) $tmpl->LoadTemplate('default2');
266
267// =========== Установки документов - УСТАРЕЛО - УБРАТЬ ПОСЛЕ ТОГО, КАК НЕ БУДЕТ НИГДЕ ИСПОЛЬЗОВАТЬСЯ ================================
268global $dv;
269
270$res=mysql_query("SELECT * FROM `doc_vars` WHERE `id`='$firm_id'");
271$dv=mysql_fetch_assoc($res);
272
273
274function GetCostPos($pos_id, $cost_id)
275{
276        $res=mysql_query("SELECT `doc_base`.`cost`, `doc_base`.`group` FROM `doc_base` WHERE `doc_base`.`id`='$pos_id'");
277        if(mysql_errno())               throw new MysqlException("Не удалось получить базовую цену товара");
278        if(!mysql_num_rows($res))       throw new Exception("Товар ID:$pos_id не найден!");
279        $base_cost=mysql_result($res,0,0);
280        $base_group=mysql_result($res,0,1);
281        $res=mysql_query("SELECT `doc_cost`.`id`, `doc_base_cost`.`id`, `doc_cost`.`type`, `doc_cost`.`value`, `doc_base_cost`.`type`, `doc_base_cost`.`value`, `doc_base_cost`.`accuracy`, `doc_base_cost`.`direction`, `doc_cost`.`accuracy`, `doc_cost`.`direction`
282        FROM `doc_cost`
283        LEFT JOIN `doc_base_cost` ON `doc_cost`.`id`=`doc_base_cost`.`cost_id` AND `doc_base_cost`.`pos_id`='$pos_id'
284        WHERE `doc_cost`.`id`='$cost_id'");
285        if(mysql_errno())               throw new MysqlException("Не удалось получить цену из справочника цен товара");
286        if(!mysql_num_rows($res))       throw new Exception("Цена ID:$cost_id не найдена!");
287        $nxt=mysql_fetch_row($res);
288
289        if($nxt[1])
290        {
291                if($nxt[4]=='pp')       $cena= $base_cost+$base_cost*$nxt[5]/100;
292                else if($nxt[4]=='abs') $cena= $base_cost+$nxt[5];
293                else if($nxt[4]=='fix') $cena= $nxt[5];
294                else                    $cena= 0;
295               
296                $direction=pow(10,$nxt[6]*(-1))*0.4999*$nxt[7];         
297                if($cena)
298                {
299                        return sprintf("%0.2f",round($cena+$direction,$nxt[6]));
300                }
301                else return "Уточняйте";
302        }
303       
304        while($base_group)
305        {
306                $res=mysql_query("SELECT `doc_group`.`id`, `doc_group_cost`.`id`, `doc_group_cost`.`type`, `doc_group_cost`.`value`, `doc_group`.`pid`, `doc_group_cost`.`accuracy`, `doc_group_cost`.`direction`
307                FROM `doc_group`
308                LEFT JOIN `doc_group_cost` ON `doc_group`.`id`=`doc_group_cost`.`group_id`  AND `doc_group_cost`.`cost_id`='$cost_id'
309                WHERE `doc_group`.`id`='$base_group'");
310                if(mysql_errno())               throw new MysqlException("Не удалось получить цену из справочника цен группы");
311                if(!mysql_num_rows($res))       throw new Exception("Группа ID:$base_group не найдена");
312                $gdata=mysql_fetch_row($res);
313                if($gdata[1])
314                {
315                        if($gdata[2]=='pp')             $cena= $base_cost+$base_cost*$gdata[3]/100;
316                        else if($gdata[2]=='abs')       $cena= $base_cost+$gdata[3];
317                        else if($gdata[2]=='fix')       $cena= $gdata[3];
318                        else                            $cena= 0;
319                       
320                        $direction=pow(10,$gdata[5]*(-1))*0.4999*$gdata[6];     
321                        if($cena)
322                        {
323                                return sprintf("%0.2f",round($cena+$direction,$gdata[5]));
324                        }
325                        else return "Уточняйте";
326                }
327                $base_group=$gdata[4];
328        }
329       
330        if($nxt[2]=='pp')       $cena= $base_cost+$base_cost*$nxt[3]/100;
331        else if($nxt[2]=='abs') $cena= $base_cost+$nxt[3];
332        else if($nxt[2]=='fix') $cena= $nxt[3];
333        else                    $cena= 0;
334       
335        $direction=pow(10,$nxt[8]*(-1))*0.4999*$nxt[9];         
336        if($cena)
337        {
338                return sprintf("%0.2f",round($cena+$direction,$nxt[8]));
339        }
340        else return "Уточняйте";
341
342}
343
344// =========== Запись событий документов в лог ======================
345function doc_log($motion,$desc,$object='',$object_id=0)
346{
347        global $tmpl;
348        $uid=mysql_escape_string(@$_SESSION['uid']);
349        $motion=mysql_escape_string($motion);
350        $desc=mysql_escape_string($desc);
351        $ip=getenv("REMOTE_ADDR");
352        mysql_query("INSERT INTO `doc_log` (`user`, `ip`, `time`,`motion`,`desc`, `object`, `object_id`)
353        VALUES ('$uid', '$ip', NOW(),'$motion','$desc', '$object', '$object_id')");
354}
355
356// == УСТАРЕЛО - УБРАТЬ ПОСЛЕ ТОГО, КАК НЕ БУДЕТ НИГДЕ ИСПОЛЬЗОВАТЬСЯ ===
357function but_provodka($doc,$ok)
358{
359        if($ok)
360                return "<a href='?mode=cancel&amp;doc=$doc' title='Отменить проводку' onclick=\"ShowPopupWin('/doc.php?mode=cancel&amp;doc=$doc'); return false;\"><img src='img/i_revert.png' alt='Отменить' /></a>";
361        else
362                return "<a href='?mode=ehead&amp;doc=$doc' title='Правка заголовка'><img src='img/i_docedit.png' alt='Правка' /></a>
363                <a href='?mode=apply&amp;doc=$doc' title='Провести документ' onclick=\"ShowPopupWin('/doc.php?mode=apply&amp;doc=$doc'); return false;\"><img src='img/i_ok.png' alt='Провести' /></a>";
364
365}
366
367function doc_menu($dop="", $nd=1, $doc=0)
368{
369        global $tmpl;
370        global $doc_data;
371        if($doc)        get_docdata($doc);
372
373        $context="<a href=\'/index.php\'><div>Главная</div></a><a href=\'/vitrina.php\'><div>Витрина</div></a>";
374
375        $tmpl->AddText("<table width='100%' style='background-color: #e0f0ff; border: 0;' ><tr><td>
376        <a href='' title='Назад' onclick=\"history.go(-1);\"><img src='img/i_back.png' alt='Журнал документов' border='0'></a>
377       
378        <img src='img/i_separator.png' alt=''>
379       
380        <a href='docj.php' title='Журнал документов' accesskey=\"D\"><img src='img/i_journal.png' alt='Журнал документов' border='0'></a>
381        <a href='docs.php?l=agent' title='Журнал агентов' accesskey=\"A\"><img src='img/i_user.png' alt='Журнал агентов' border='0'></a>
382        <a href='docs.php?l=dov' title='Работа с доверенными лицами'><img src='img/i_users.png' alt='лица' border='0'></a>
383        <a href='docs.php?l=sklad' title='Склад' accesskey=\"S\"><img src='img/i_sklad.png' alt='Склад' border='0'></a>
384        <a href='docs.php?l=pran' onclick=\"return ShowContextMenu(event, '/priceload.php?mode=menu')\" title='Анализ прайсов' accesskey=\"S\"><img src='img/i_analiz.png' alt='Анализ прайсов' border='0'></a>
385        <img src='img/i_separator.png' alt=''>
386       
387        <a href='doc.php' title='Новый документ' accesskey=\"N\"><img src='img/i_new.png' alt='Новый' border='0'></a>
388        <a href='doc.php?mode=new&amp;type=1' title='Поступление товара на склад'><img src='img/i_new_post.png' alt='Поступление товара на склад' border='0'></a>
389        <a href='doc.php?mode=new&amp;type=2' title='Реализация товара' accesskey=\"R\"><img src='img/i_new_real.png' alt='Реализация товара' border='0'></a>
390        <a href='doc.php?mode=new&amp;type=3' title='Заявка покупателя' accesskey=\"Z\"><img src='img/i_new_schet.png' alt='Заявка покупателя' border='0'></a>
391        <a href='doc.php?mode=new&amp;type=4' title='Поступление средств в банк'><img src='img/i_new_pbank.png' alt='Поступление средств в банк' border='0'></a>
392        <a href='doc.php?mode=new&amp;type=5' title='Вывод средств из банка'><img src='img/i_new_rbank.png' alt='Вывод средств из банка' border='0'></a>
393        <a href='doc.php?mode=new&amp;type=6' title='Приходный кассовый ордер'><img src='img/i_new_pko.png' alt='Приходный кассовый ордер' border='0'></a>
394        <a href='doc.php?mode=new&amp;type=7' title='Расходный кассовый ордер'><img src='img/i_new_rko.png' alt='Расходный кассовый ордер' border='0'></a>
395       
396        <img src='img/i_separator.png' alt=''>
397       
398        <a href='' onclick=\"return ShowContextMenu(event, '/doc_otchet.php?mode=pmenu')\"  title='Отчеты'><img src='img/i_report.png' alt='Отчеты' border='0'></a>
399        <a href='doc_service.php' title='Служебные функции'><img src='img/i_config.png' alt='Служебные функции' border='0'></a>
400        <a href='doc_sc.php' title='Сценарии и операции'><img src='img/i_launch.png' alt='Сценарии и операции' border='0'></a>");
401        if($dop) $tmpl->AddText("<img src='img/i_separator.png' alt=''>");
402       
403        if($dop) $tmpl->AddText($dop);
404       
405        $tmpl->AddText("</table>");
406       
407        if(0)
408        //if($nd)
409        {
410                        $res=mysql_query("SELECT `doc_base`.`name`, `doc_base_cnt`.`cnt`, `doc_base_cnt`.`mincnt`, `doc_sklady`.`name` FROM `doc_base`
411                        LEFT JOIN `doc_base_cnt` ON `doc_base_cnt`.`id`=`doc_base`.`id`
412                        LEFT JOIN `doc_sklady` ON `doc_sklady`.`id`=`doc_base_cnt`.`sklad`
413                        WHERE `doc_base_cnt`.`cnt`<`doc_base_cnt`.`mincnt` LIMIT 100");
414                        $row=mysql_num_rows($res);
415                        if($row)
416                        {
417                                mysql_data_seek($res,rand(0,$row-1));
418                                $nxt=mysql_fetch_row($res);
419                                if($nxt[1]) $nxt[1]='всего '.$nxt[1].' штук';
420                                else $nxt[1]='отсутствует';
421                                $tmpl->msg("По крайней мере, у $row товаров, количество на складе меньше минимально рекомендуемого!<br>Например $nxt[0] на складе *$nxt[3]* $nxt[1], вместо $nxt[2] рекомендуемых!","err","Мало товара на складе!");
422                        }
423        }
424}
425
426// ======== УСТАРЕЛО - УБРАТЬ ПОСЛЕ ТОГО, КАК НЕ БУДЕТ НИГДЕ ИСПОЛЬЗОВАТЬСЯ === ==========
427function GetNextAltNum($type,$subtype,$cur=0)
428{
429        $res=mysql_query("SELECT `altnum` FROM `doc_list` WHERE `type`='$type' AND `subtype`='$subtype' AND `altnum`!='$cur' ORDER BY `altnum` DESC");
430        $nxt=mysql_fetch_row($res);
431        $newnum=$nxt[0]+1;
432        return $newnum;
433}
434
435// ====== Получение данных, связанных с документом =============================
436// ======== УСТАРЕЛО - УБРАТЬ ПОСЛЕ ТОГО, КАК НЕ БУДЕТ НИГДЕ ИСПОЛЬЗОВАТЬСЯ === ==========
437function get_docdata($doc)
438{
439        global $doc_data;
440        global $dop_data;
441        if($doc_data) return;
442
443        if($doc)
444        {
445                $res=mysql_query("SELECT `a`.`id`, `a`.`type`, `a`.`agent`, `b`.`name`, `a`.`comment`, `a`.`date`, `a`.`ok`, `a`.`sklad`, `a`.`user`, `a`.`altnum`, `a`.`subtype`, `a`.`sum`, `a`.`nds`, `a`.`p_doc`, `a`.`mark_del`
446                FROM `doc_list` AS `a`
447                LEFT JOIN `doc_agent` AS `b` ON `a`.`agent`=`b`.`id`
448                WHERE `a`.`id`='$doc'");
449                $doc_data=mysql_fetch_row($res);
450                $rr=mysql_query("SELECT `param`,`value` FROM `doc_dopdata` WHERE `doc`='$doc'");
451                while($nn=mysql_fetch_row($rr))
452                {
453                        $dop_data["$nn[0]"]=$nn[1];
454                }
455        }
456        else
457        {
458                $doc_data=array();
459                $doc_data[2]=641;
460                $doc_data[3]="Частное лицо";
461        }
462}
463
464// ======== УСТАРЕЛО - УБРАТЬ ПОСЛЕ ТОГО, КАК НЕ БУДЕТ НИГДЕ ИСПОЛЬЗОВАТЬСЯ === ==========
465function DocInfo($p_doc)
466{
467        $res=mysql_query("SELECT `doc_list`.`id`, `doc_types`.`name`, `doc_list`.`altnum`, `doc_list`.`subtype`, `doc_list`.`date`, `doc_list`.`ok` FROM `doc_list`
468        LEFT JOIN `doc_types` ON `doc_types`.`id`=`doc_list`.`type`
469        WHERE `doc_list`.`id`='$p_doc'");
470        if(@$nxt=mysql_fetch_row($res))
471        {
472                if($nxt[5]) $r='Проведённый';
473                else $r='Непроведённый';
474                $dt=date("d.m.Y H:i:s",$nxt[4]);
475                return "<b>Относится к:</b> $r <a href='?mode=body&amp;doc=$nxt[0]'>$nxt[1] N$nxt[2]$nxt[3]</a>, от $dt";
476        }
477        return '';
478}
479
480// =========== Определение типа документа и создание соответствующего класса ====================
481function AutoDocumentType($doc_type, $doc)
482{
483        switch($doc_type)
484        {
485                case 1:
486                        return new doc_Postuplenie($doc);
487                case 2:
488                        return new doc_Realizaciya($doc);
489                case 3:
490                        return new doc_Zayavka($doc);
491                case 4:
492                        return new doc_PBank($doc);
493                case 5:
494                        return new doc_RBank($doc);
495                case 6:
496                        return new doc_Pko($doc);
497                case 7:
498                        return new doc_Rko($doc);
499                case 8:
500                        return new doc_Peremeshenie($doc);
501                case 9:
502                        return new doc_PerKas($doc);
503                case 10:
504                        return new doc_Doveren($doc);
505                case 11:
506                        return new doc_Predlojenie($doc);
507                case 12:
508                        return new doc_v_puti($doc);
509                case 13:
510                        return new doc_Kompredl($doc);
511                case 14:
512                        return new doc_Dogovor($doc);
513                case 15:
514                        return new doc_Realiz_op($doc);
515                case 16:
516                        return new doc_Specific($doc);
517                case 17:
518                        return new doc_Sborka($doc);
519                case 18:
520                        return new doc_Kordolga($doc);
521                default:
522                        return new doc_Nulltype();
523        }
524}
525
526// ========== Расчет и обновление суммы документа ===============================================
527function DocSumUpdate($doc)
528{
529        $sum=0;
530        $res=mysql_query("SELECT `cnt`, `cost` FROM `doc_list_pos` WHERE `doc`='$doc' AND `page`='0'");
531        if(mysql_errno())       throw new MysqlException("Не удалось получить список товаров");
532        while($nxt=mysql_fetch_row($res))
533                $sum+=$nxt[0]*$nxt[1];
534        if($sum!=0)
535                mysql_query("UPDATE `doc_list` SET `sum`='$sum' WHERE `id`='$doc'");
536        if(mysql_errno())       throw new MysqlException("Не удалось обновить сумму документа");
537        return $sum;
538}
539
540function DocCalcDolg($agent, $print=0)
541{
542        global $tmpl;
543        $dolg=0;
544        $res=mysql_query("SELECT `type`, `sum` FROM `doc_list` WHERE `ok`>'0' AND `agent`='$agent' AND `mark_del`='0'");
545        while($nxt=mysql_fetch_row($res))
546        {
547                switch($nxt[0])
548                {
549                        case 1: $dolg-=$nxt[1]; break;
550                        case 2: $dolg+=$nxt[1]; break;
551                        case 4: $dolg-=$nxt[1]; break;
552                        case 5: $dolg+=$nxt[1]; break;
553                        case 6: $dolg-=$nxt[1]; break;
554                        case 7: $dolg+=$nxt[1]; break;
555                        case 18: $dolg+=$nxt[1]; break;
556                }
557        }
558
559        $dolg=sprintf("%0.2f", $dolg);
560        if($print)
561        {
562                if($dolg>0)
563                        $tmpl->AddText("<b>Долг агента:</b> <b class=f_red>$dolg</b> рублей<br>");
564                else if($dolg<0)
565                        $tmpl->AddText("<b>Наш долг:</b> $dolg рублей<br>");
566        }
567        return $dolg;
568}
569
570// Расчёт актуальной входящей цены
571function GetInCost($pos_id, $limit_date=0)
572{
573        $cnt=$cost=0;
574        $sql_add='';
575        if($limit_date) $sql_add="AND `doc_list`.`date`<='$limit_date'";
576        $res=mysql_query("SELECT `doc_list_pos`.`cnt`, `doc_list_pos`.`cost`, `doc_list`.`type`, `doc_list_pos`.`page`
577        FROM `doc_list_pos`
578        INNER JOIN `doc_list` ON `doc_list`.`id`=`doc_list_pos`.`doc` AND (`doc_list`.`type`<='2' OR `doc_list`.`type`='17')
579        WHERE `doc_list_pos`.`tovar`='$pos_id' AND `doc_list`.`ok`>'0' $sql_add ORDER BY `doc_list`.`date`");
580       
581        while($nxt=mysql_fetch_row($res))
582        {
583                if(($nxt[2]==2) || ($nxt[2]==17) && ($nxt[3]!='0'))     $nxt[0]=$nxt[0]*(-1);
584                if( ($cnt+$nxt[0])==0)  {}
585                else if($nxt[0]>0)
586                        $cost=( ($cnt*$cost)+($nxt[0]*$nxt[1])) / ($cnt+$nxt[0]);
587                $cnt+=$nxt[0]; 
588        }
589        return round($cost,2);
590}
591
592// Кол-во товара в резерве
593function DocRezerv($pos,$doc=0)
594{
595        // $doc - номер исключенного документа
596
597        $rs=mysql_query("SELECT SUM(`doc_list_pos`.`cnt`) FROM `doc_list_pos`
598        INNER JOIN `doc_list` ON `doc_list`.`type`='3' AND `doc_list`.`ok`>'0' AND `doc_list`.`id`=`doc_list_pos`.`doc`
599        AND `doc_list`.`id` NOT IN (SELECT DISTINCT `p_doc` FROM `doc_list`
600        INNER JOIN `doc_list_pos` ON `doc_list`.`id`=`doc_list_pos`.`doc`
601        WHERE `ok` != '0' AND `type`='2' AND `doc_list_pos`.`tovar`='$pos' )
602        WHERE `doc_list_pos`.`tovar`='$pos'
603        GROUP BY `doc_list_pos`.`tovar`");
604        return @$rezerv=mysql_result($rs,0,0);
605
606}
607
608// Кол-во товара под заказ
609function DocPodZakaz($pos,$doc=0)
610{
611        // $doc - номер исключенного документа
612        $rt=time()-60*60*24*365;
613        $rs=mysql_query("SELECT SUM(`doc_list_pos`.`cnt`) FROM `doc_list_pos`
614        INNER JOIN `doc_list` ON `doc_list`.`type`='11' AND `doc_list`.`ok`>'0' AND `doc_list`.`date`>'$rt' AND `doc_list`.`id`!='$doc' AND `doc_list`.`id`=`doc_list_pos`.`doc` AND `doc_list`.`id` NOT IN (SELECT DISTINCT `p_doc` FROM `doc_list` WHERE `ok` != '0' AND `type`='1' )
615        WHERE `doc_list_pos`.`tovar`='$pos'
616        GROUP BY `doc_list_pos`.`tovar`");
617        return @$rezerv=mysql_result($rs,0,0);
618}
619
620// Кол-во товара в пути
621function DocVPuti($pos,$doc=0)
622{
623        // $doc - номер исключенного документа
624        $rt=time()-60*60*24*30;
625        $rs=mysql_query("SELECT SUM(`doc_list_pos`.`cnt`) FROM `doc_list_pos`
626        INNER JOIN `doc_list` ON `doc_list`.`type`='12' AND `doc_list`.`ok`>'0' AND `doc_list`.`id`!='$doc'
627        AND `doc_list`.`id`=`doc_list_pos`.`doc` AND `doc_list`.`id` NOT IN (SELECT DISTINCT `p_doc` FROM `doc_list` WHERE `ok` != '0' AND `type`='1' )
628        WHERE `doc_list_pos`.`tovar`='$pos'
629        GROUP BY `doc_list_pos`.`tovar`");
630        return @$rezerv=mysql_result($rs,0,0);
631}
632
633function AutoDocument($doc)
634{
635        get_docdata($doc);
636        global $doc_data;
637        global $dop_data;
638        return AutoDocumentType($doc_data[1], $doc);
639}
640
641
642
643?>
Note: See TracBrowser for help on using the repository browser.