1
ostatkinadatu.php in trunk/web/include/reports – MultiMag

source: trunk/web/include/reports/ostatkinadatu.php @ 963

Last change on this file since 963 was 963, checked in by blacklight, 11 months ago
  • В интерфейсе прослушивания записей разговоров добавлено использование поля fname, а так же реализована поддержка нескольких типов расширений файлов записей
  • Добавлен модуль перекодирования записей телефонных разговоров. В данный момент поддерживается только opus.
File size: 6.1 KB
Line 
1<?php
2
3//      MultiMag v0.2 - Complex sales system
4//
5//      Copyright (C) 2005-2018, BlackLight, TND Team, http://tndproject.org
6//
7//      This program is free software: you can redistribute it and/or modify
8//      it under the terms of the GNU Affero General Public License as
9//      published by the Free Software Foundation, either version 3 of the
10//      License, or (at your option) any later version.
11//
12//      This program is distributed in the hope that it will be useful,
13//      but WITHOUT ANY WARRANTY; without even the implied warranty of
14//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15//      GNU Affero General Public License for more details.
16//
17//      You should have received a copy of the GNU Affero General Public License
18//      along with this program.  If not, see <http://www.gnu.org/licenses/>.
19//
20
21/// Остатки товара на складе на выбранную дату
22class Report_OstatkiNaDatu extends BaseGSReport {
23
24    function getName($short = 0) {
25        if ($short) {
26            return "Остатки на выбранную дату";
27        } else {
28            return "Остатки товара на складе на выбранную дату";
29        }
30    }
31
32    function Form() {
33        global $tmpl, $db;
34        $curdate = date("Y-m-d");
35        $tmpl->addContent("<h1>" . $this->getName() . "</h1>");
36        $tmpl->addContent("
37            <script type=\"text/javascript\">
38            function dtinit() {
39                    initCalendar('dt',false)
40            }
41            addEventListener('load',dtinit,false)       
42            </script>
43            <form action='' method='post'>
44            <input type='hidden' name='mode' value='ostatkinadatu'>
45            Дата:<br>
46            <input type='text' name='date' id='dt' value='$curdate'><br>
47            Склад:<br>
48            <select name='sklad'>");
49        $res = $db->query("SELECT `id`, `name` FROM `doc_sklady`");
50        while ($nxt = $res->fetch_row()) {
51            $tmpl->addContent("<option value='$nxt[0]'>" . html_out($nxt[1]) . "</option>");
52        }
53        $tmpl->addContent("</select><br>Группа товаров:<br>");
54        $this->GroupSelBlock();
55        $tmpl->addContent("Формат: <select name='opt'><option>pdf</option><option>html</option></select><br>
56            <button type='submit'>Создать отчет</button></form>");
57    }
58
59    function Make($engine) {
60        global $db, $CONFIG;
61        $sklad = rcvint('sklad');
62        $date = rcvdate('date');
63        $unixtime = strtotime($date . " 23:59:59");
64        $pdate = date("Y-m-d", $unixtime);
65        $gs = request('gs');
66        $g = request('g');
67
68        $res = $db->query("SELECT `name` FROM `doc_sklady` WHERE `id`='$sklad'");
69        if (!$res->num_rows) {
70            throw new Exception("Склад не найден!");
71        }
72        list($sklad_name) = $res->fetch_row();
73
74        $this->loadEngine($engine);
75
76        $this->header("Остатки товара на складе N$sklad ($sklad_name) на дату $pdate");
77
78        $col_count = 1;
79        $widths = array(6);
80        $headers = array('ID');
81
82        if ($CONFIG['poseditor']['vc']) {
83            $widths[] = 7;
84            $headers[] = 'Код';
85            $widths[] = 60;
86            $headers[] = 'Наименование';
87            $col_count +=2;
88        } else {
89            $widths[] = 67;
90            $headers[] = 'Наименование';
91            $col_count +=1;
92        }
93
94        $headers = array_merge($headers, array('Кол-во', 'Б. цена', 'Сумма'));
95        $widths = array_merge($widths, array(9, 9, 9));
96        $col_count+=3;
97
98        $this->tableBegin($widths);
99        $this->tableHeader($headers);
100
101        switch (@$CONFIG['doc']['sklad_default_order']) {
102            case 'vc': $order = '`doc_base`.`vc`';
103                break;
104            case 'cost': $order = '`doc_base`.`cost`';
105                break;
106            default: $order = '`doc_base`.`name`';
107        }
108
109        $zeroflag = $bsum = $summass = 0;
110        $res_group = $db->query("SELECT `id`, `name` FROM `doc_group` ORDER BY `id`");
111        while ($group_line = $res_group->fetch_assoc()) {
112            if ($gs && !in_array($group_line['id'], $g)) {
113                continue;
114            }
115
116            $this->tableAltStyle();
117            $this->tableSpannedRow(array($col_count), array(html_out("{$group_line['id']}. {$group_line['name']}")));
118            $this->tableAltStyle(false);
119
120            $res = $db->query("SELECT `doc_base`.`id`, CONCAT(`doc_base`.`name`, ' - ', `doc_base`.`proizv`) AS `name` , `doc_base`.`cost`,
121                                `doc_base`.`mass`, `doc_base`.`vc`
122                        FROM `doc_base`
123                        WHERE `doc_base`.`group`='{$group_line['id']}'
124                        ORDER BY $order");
125            while ($nxt = $res->fetch_row()) {
126                $count = getStoreCntOnDate($nxt[0], $sklad, $unixtime, 1);
127                if ($count == 0) {
128                    continue;
129                }
130                if ($count < 0) {
131                    $zeroflag = 1;
132                }
133                $cost_p = sprintf("%0.2f", $nxt[2]);
134                $bsum_p = sprintf("%0.2f", $nxt[2] * $count);
135                $count_p = round($count, 3);
136                $bsum+=$nxt[2] * $count;
137                $summass+=$count * $nxt[3];
138
139                if ($CONFIG['poseditor']['vc']) {
140                    $a = array($nxt[0], $nxt[4], $nxt[1], $count_p, $cost_p, $bsum_p);
141                } else {
142                    $a = array($nxt[0], $nxt[1], $count_p, $cost_p, $bsum_p);
143                }
144                $this->tableRow($a);
145            }
146        }
147        $bsum = sprintf("%0.2f", $bsum);
148        $this->tableAltStyle();
149        $this->tableSpannedRow(array($col_count - 1, 1), array('Итого:', $bsum));
150        if (!$zeroflag) {
151            $this->tableSpannedRow(array($col_count), array("Общая масса склада: $summass кг."));
152        } else {
153            $this->tableSpannedRow(array($col_count), array("Общая масса склада: невозможно определить из-за отрицательных остатков"));
154        }
155        $this->tableAltStyle(false);
156        $this->tableEnd();
157        $this->output();
158        exit(0);
159    }
160
161}
Note: See TracBrowser for help on using the repository browser.