1
torg16.php in trunk/web/include/doc/printforms/corract – MultiMag

source: trunk/web/include/doc/printforms/corract/torg16.php @ 963

Last change on this file since 963 was 963, checked in by blacklight, 15 months ago
  • В интерфейсе прослушивания записей разговоров добавлено использование поля fname, а так же реализована поддержка нескольких типов расширений файлов записей
  • Добавлен модуль перекодирования записей телефонных разговоров. В данный момент поддерживается только opus.
File size: 20.5 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
21namespace doc\printforms\corract;
22
23class torg16 extends \doc\printforms\iPrintFormPdf {
24
25    public function getName() {
26        return "Акт списания";
27    }
28
29    protected function makeColRect($w_info, $start_y) {
30        $this->pdf->SetLineWidth($this->line_bold_w);
31        $this->pdf->Rect($w_info[2] + $this->pdf->lMargin, $start_y, $w_info[3] - $w_info[2], $this->pdf->GetY() - $start_y);
32        //$this->pdf->Rect($w_info[4] + $this->pdf->lMargin, $start_y, $w_info[12] - $w_info[4], $this->pdf->GetY() - $start_y);
33        //$this->pdf->Rect($w_info[13] + $this->pdf->lMargin, $start_y, $this->pdf->w - $this->pdf->rMargin - $this->pdf->lMargin - $w_info[13], $this->pdf->GetY() - $start_y);
34        $this->pdf->SetLineWidth($this->line_normal_w);
35    }
36   
37    /// Вывести суммарную информацию
38    protected function makeSummary($text, $w_info, $line_height, $list_sum) {
39        $list_sum = sprintf("%01.2f", $list_sum);
40
41        $w = 0;
42        for ($i = 0; $i <9; $i++) {
43            $w+=$w_info[$i];
44        }
45        $line_height = 3;
46        $this->pdf->CellIconv($w, $line_height, $text, 0, 0, 'R', 1);
47        $this->pdf->Cell($w_info[9], $line_height, $list_sum, 1, 0, 'R', 1);
48        $this->pdf->Ln();
49    }
50
51    // Вывод простого элемента блока подписей
52    protected function makeSimpleItem($name, $value, $desc, $step, $microstep) {
53        $this->pdf->SetFont('', '', 7);
54        $this->pdf->CellIconv(50, $step, $name, 0, 0, 'L', 0);
55        $this->pdf->CellIconv(0, $step, $value, 'B', 0, 'L', 0);
56        $this->pdf->SetFont('', '', 5);
57        $this->pdf->CellIconv(120, $microstep, $desc, 0, 1, 'C', 0);
58        $this->pdf->SetFont('', '', 7);
59    }
60   
61    // Вывод элемента *должность/подпись/фио*
62    protected function makeDPFItem($name, $post, $fio, $step = 4, $microstep = 2) {
63        $p1_w = array(50, 45, 2, 45, 2, 45);
64        $this->pdf->SetFont('', '', 7);
65        $this->pdf->CellIconv($p1_w[0], $step, $name, 0, 0, 'L', 0);
66        $this->pdf->CellIconv($p1_w[1], $step, $post, 'B', 0, 'C', 0);
67        $this->pdf->CellIconv($p1_w[2], $step, '', 0, 0, 'C', 0);
68        $this->pdf->CellIconv($p1_w[3], $step, '', 'B', 0, 'C', 0);
69        $this->pdf->CellIconv($p1_w[4], $step, '', 0, 0, 'С', 0);
70        $this->pdf->CellIconv($p1_w[5], $step, $fio, 'B', 1, 'C', 0);
71       
72        $this->pdf->SetFont('', '', 5);
73        $this->pdf->CellIconv($p1_w[0], $microstep, '', 0, 0, 'C', 0);
74        $this->pdf->CellIconv($p1_w[1], $microstep, '(должность)', 0, 0, 'C', 0);
75        $this->pdf->CellIconv($p1_w[2], $microstep, '', 0, 0, 'C', 0);
76        $this->pdf->CellIconv($p1_w[3], $microstep, '(подпись)', 0, 0, 'C', 0);
77        $this->pdf->CellIconv($p1_w[4], $microstep, '',0, 0, 'C', 0);
78        $this->pdf->CellIconv($p1_w[5], $microstep, '(ф.и.о.)', 0, 1, 'C', 0);
79       
80    }
81   
82    // Вывод элемента *бухгалтер/подпись/фио*
83    protected function makeBuxItem($fio, $step = 4, $microstep = 2) {
84        $p1_w = array(55, 2, 35, 2, 0);
85        $this->pdf->SetFont('', '', 7);
86        $this->pdf->CellIconv($p1_w[0], $step, 'Главный (старший) бухгалтер', 0, 0, 'L', 0);
87        $this->pdf->CellIconv($p1_w[1], $step, '', 0, 0, 'C', 0);
88        $this->pdf->CellIconv($p1_w[2], $step, '', 'B', 0, 'C', 0);
89        $this->pdf->CellIconv($p1_w[3], $step, '', 0, 0, 'С', 0);
90        $this->pdf->CellIconv($p1_w[4], $step, $fio, 'B', 1, 'C', 0);
91       
92        $this->pdf->SetFont('', '', 5);
93        $this->pdf->CellIconv($p1_w[0], $microstep, '', 0, 0, 'C', 0);
94        $this->pdf->CellIconv($p1_w[1], $microstep, '', 0, 0, 'C', 0);
95        $this->pdf->CellIconv($p1_w[2], $microstep, '(подпись)', 0, 0, 'C', 0);
96        $this->pdf->CellIconv($p1_w[3], $microstep, '',0, 0, 'C', 0);
97        $this->pdf->CellIconv($p1_w[4], $microstep, '(ф.и.о.)', 0, 1, 'C', 0);
98    }
99   
100    // Вывод элемента *место для печати*
101    protected function makeStampPlaceItem($step = 4) {
102        $p1_w = array(30, 25, 2, 35, 2, 0);
103        $this->pdf->SetFont('', '', 7);
104        $this->pdf->CellIconv($p1_w[0], $step, 'М.П.', 0, 0, 'C', 0);
105        $this->pdf->CellIconv($p1_w[1], $step, '"_____"', 0, 0, 'R', 0);
106        $this->pdf->CellIconv($p1_w[2], $step, '', 0, 0, 'C', 0);
107        $this->pdf->CellIconv($p1_w[3], $step, '', 'B', 0, 'C', 0);
108        $this->pdf->CellIconv($p1_w[4], $step, '', 0, 0, 'С', 0);
109        $this->pdf->CellIconv($p1_w[5], $step, '20___г.', 0, 1, 'L', 0);
110    }
111   
112    // Вывод элемента *пропись и цифра*
113    protected function makePCItem($name, $value, $nvalue, $step = 4) {
114        $p1_w = array(30, 64, 0);
115        $this->pdf->SetFont('', '', 7);
116        $this->pdf->CellIconv($p1_w[0], $step, $name, 0, 0, 'L', 0);
117        $this->pdf->CellIconv($p1_w[1], $step, $value, 'B', 0, 'C', 0);
118        $this->pdf->SetLineWidth($this->line_bold_w);
119        $this->pdf->CellIconv($p1_w[2], $step, $nvalue, 1, 1, 'C', 0);
120        $this->pdf->SetLineWidth($this->line_thin_w);
121    }
122
123   
124    /// Сформировать данные печатной формы
125    public function make() {
126        global $db;
127        $doc_data = $this->doc->getDocDataA();
128        $dop_data = $this->doc->getDopDataA();
129        $firm_vars = $this->doc->getFirmVarsA();
130        $res = $db->query("SELECT `name`, `bik`, `rs`, `ks` FROM `doc_kassa` WHERE `ids`='bank' AND `num`='{$doc_data['bank']}'");
131        $bank_info = $res->fetch_assoc();
132
133        $this->pdf->AddPage('L');
134        $y = $this->pdf->getY();
135        $this->addTechFooter();
136
137        $this->pdf->setY($y);
138        $this->pdf->SetFont('', '', 6);
139        $str = 'Унифицированная форма ТОРГ-16 Утверждена постановлением госкомстата России от 25.12.98 № 132';
140        $this->pdf->CellIconv(0, 4, $str, 0, 1, 'R');
141
142        // Шапка с реквизитами
143        $t2_y = $this->pdf->GetY();
144        $this->pdf->SetFont('', '', 8);
145        $str = $firm_vars['firm_name'] . ", тел." . $firm_vars['firm_telefon'] . ", ИНН " . $firm_vars['firm_inn'] . ", счёт " . $bank_info['rs'] . ", БИК " . $bank_info['bik'] . ", банк " . $bank_info['name'] . ", К/С {$bank_info['ks']}, адрес: {$firm_vars['firm_adres']}";
146        $this->pdf->MultiCellIconv(230, 4, $str, 0, 'L');
147        $y = $this->pdf->GetY();
148        $this->pdf->Line(10, $this->pdf->GetY(), 230, $this->pdf->GetY());
149        $this->pdf->SetFont('', '', 5);
150        $str = "организация";
151        $this->pdf->CellIconv(230, 2, $str, 0, 1, 'C');
152
153        $this->pdf->SetFont('', '', 8);
154        $this->pdf->Cell(0, 4, '', 0, 1, 'L');
155        $this->pdf->Line(10, $this->pdf->GetY(), 230, $this->pdf->GetY());
156        $this->pdf->SetFont('', '', 5);
157        $str = "структурное подразделение";
158        $this->pdf->CellIconv(220, 2, $str, 0, 1, 'C');
159        $this->pdf->ln(8);
160        $str = "Основание";
161        $this->pdf->CellIconv(30, 4, $str, 0, 0, 'L');
162        $this->pdf->MultiCellIconv(190, 4, 'Приказ', 0, 'L');
163        $this->pdf->Line(40, $this->pdf->GetY(), 230, $this->pdf->GetY());
164        $this->pdf->SetFont('', '', 5);
165        $str = "ненужное зачеркнуть";
166        $this->pdf->CellIconv(220, 2, $str, 0, 1, 'C');
167
168        // Правый столбик шапки
169        $t3_y = $this->pdf->GetY();
170
171        $set_x = 255;
172        $width = 17;
173        $this->pdf->SetFont('', '', 7);
174        $this->pdf->SetY($t2_y);
175        $set_x = $this->pdf->w - $this->pdf->rMargin - $width;
176
177        $str = 'Коды';
178        $this->pdf->SetX($set_x);
179        $this->pdf->CellIconv($width, 4, $str, 1, 1, 'C');
180        $set_x = $this->pdf->w - $this->pdf->rMargin - $width * 2;
181
182        $tbt_y = $this->pdf->GetY();
183
184        $lines = array('Форма по ОКУД', 'по ОКПО', '', 'Вид деятельности по ОКДП');
185        foreach ($lines as $str) {
186            $this->pdf->SetX($set_x);
187            $this->pdf->CellIconv($width, 4, $str, 0, 1, 'R');
188        }
189        $lines = array('Номер', 'Дата');
190        foreach ($lines as $str) {
191            $this->pdf->SetX($set_x);
192            $this->pdf->CellIconv($width, 4, $str, 1, 1, 'R');
193        }
194        $str = 'Вид операции';
195        $this->pdf->SetX($set_x);
196        $this->pdf->CellIconv($width, 4, $str, 0, 1, 'R');
197
198        $tbt_h = $this->pdf->GetY() - $tbt_y;
199        $set_x = $this->pdf->w - $this->pdf->rMargin - $width;
200        $this->pdf->SetY($tbt_y);
201        $this->pdf->SetX($this->pdf->w - $this->pdf->rMargin - $width);
202        $this->pdf->SetLineWidth($this->line_bold_w);
203        $this->pdf->Cell($width, $tbt_h, '', 1, 1, 'R');
204        $this->pdf->SetLineWidth($this->line_normal_w);
205
206        $this->pdf->SetY($tbt_y);
207        $lines = array('0330216', $firm_vars['firm_okpo'], '98707889', '', '', '', '');
208        foreach ($lines as $str) {
209            $this->pdf->SetX($set_x);
210            $this->pdf->CellIconv($width, 4, $str, 1, 1, 'C');
211        }
212
213        // Название документа
214
215        $this->pdf->SetY($t3_y + 5);
216        $this->pdf->SetX(40);
217        $this->pdf->Cell(60, 4, '', 0, 0, 'R');
218        $str = 'Номер документа';
219        $this->pdf->CellIconv(25, 4, $str, 1, 0, 'C');
220        $str = 'Дата составления';
221        $this->pdf->CellIconv(25, 4, $str, 1, 1, 'C');
222        $this->pdf->SetX(40);
223        $this->pdf->SetLineWidth($this->line_bold_w);
224        $this->pdf->SetFont('', '', 10);
225        $str = 'АКТ О СПИСАНИИ ТОВАРОВ';
226        $this->pdf->CellIconv(60, 4, $str, 0, 0, 'C');
227        $this->pdf->SetFont('', '', 7);
228        $this->pdf->Cell(25, 4, $doc_data['altnum'], 1, 0, 'C');
229        $dt = date("d.m.Y", $doc_data['date']);
230        $this->pdf->Cell(25, 4, $dt, 1, 1, 'C');
231        $this->pdf->Ln(3);
232       
233        // Таблица 1
234        $y = $this->pdf->GetY();
235        $t_all_offset = array();
236        $this->pdf->SetLineWidth($this->line_normal_w);
237        $t_width = array(60, 97, 120);
238        $t_text = array(
239            'Дата',
240            'Товарная накладная',
241            'Признаки понижения качества (причины списания)',
242            );
243
244        foreach ($t_width as $w) {
245            $this->pdf->Cell($w, 10, '', 1, 0, 'C', 0);
246        }
247        $this->pdf->Ln();
248        $this->pdf->Ln(0.5);
249        $this->pdf->SetFont('', '', 8);
250        $offset = 0;
251        foreach ($t_width as $i => $w) {
252            $t_all_offset[$offset] = $offset;
253            $this->pdf->SetY($y + 1.2);
254            $this->pdf->SetX($offset + $this->pdf->lMargin);
255            $this->pdf->MultiCellIconv($w, 3, $t_text[$i], 0, 'C', 0);
256            $offset+=$w;
257        }
258        $t2_width = array(30, 30, 50, 47, 100, 20);
259        $t2_start = array(0, 0, 1, 1, 2, 2);
260        $t2_text = array(
261            'поступления товара',
262            'списания товара',
263            'номер',
264            'дата',
265            'наименование',
266            'код',
267            );
268        $offset = 0;
269        $c_id = 0;
270        $old_col = 0;
271        $y+=5;
272
273        foreach ($t2_width as $i => $w2) {
274            while ($c_id < $t2_start[$i]) {
275                $offset+=$t_width[$c_id++];
276            }
277
278            if ($old_col == $t2_start[$i] && $i>0) {
279                $off2+=$t2_width[$i - 1];
280            } else {
281                $off2 = 0;
282            }
283            $old_col = $t2_start[$i];
284            $t_all_offset[$offset + $off2] = $offset + $off2;
285            $this->pdf->SetY($y);
286            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
287            $this->pdf->Cell($w2, 5, '', 1, 0, 'C', 0);
288
289            $this->pdf->SetY($y+1);
290            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
291            $this->pdf->MultiCellIconv($w2, 3, $t2_text[$i], 0, 'C', 0);
292        }
293        sort($t_all_offset, SORT_NUMERIC);
294        $this->pdf->SetY($y + 5);
295        $t_all_width = array();
296        $old_offset = 0;
297        foreach ($t_all_offset as $offset) {
298            if ($offset == 0) {
299                continue;
300            }
301            $t_all_width[] = $offset - $old_offset;
302            $old_offset = $offset;
303        }
304        $t_all_width[] = 20;
305        $i = 1;
306        foreach ($t_all_width as $w) {
307            $this->pdf->Cell($w, 4, $i, 1, 0, 'C', 0);
308            $i++;
309        }
310        $this->pdf->Ln();
311       
312        $this->pdf->SetWidths($t_all_width);
313        $font_sizes = array(0 => 7);
314        $this->pdf->SetFSizes($font_sizes);
315        $this->pdf->SetHeight(3.5);
316
317        $aligns = array('C', 'C', 'C', 'C', 'C', 'C');
318        $this->pdf->SetAligns($aligns);
319        $this->pdf->SetFillColor(255, 255, 255);
320       
321        $nomenclature = $this->doc->getDocumentNomenclature();
322        foreach ($nomenclature as $line) {
323            if($line['cnt']>0) {
324                continue;
325            }
326            $row = array(
327                '',
328                $dt,
329                '',
330                '',
331                '',
332                '',
333            );
334            $this->pdf->RowIconv($row);
335
336            if ($this->pdf->GetY() > 190) {
337                $this->pdf->AddPage('L');
338                $this->addTechFooter();
339                $y = $this->pdf->GetY();
340            }
341        }
342        $this->pdf->ln(5);
343       
344       
345       
346       
347
348        // Шапка таблицы
349        $y = $this->pdf->GetY();
350        $t_all_offset = array();
351        $this->pdf->SetLineWidth($this->line_normal_w);
352        $t_width = array(120, 36, 15, 26, 20, 24, 36);
353        $t_ydelta = array(1, 1, 5, 1, 4, 4, 5);
354        $t_text = array(
355            'Товар',
356            'Единица измерения',
357            'Количество',
358            'Масса',
359            'Цена, руб. коп.',
360            'Стоимость, руб. коп',
361            'Примечание'
362        );
363
364        foreach ($t_width as $w) {
365            $this->pdf->Cell($w, 16, '', 1, 0, 'C', 0);
366        }
367        $this->pdf->Ln();
368        $this->pdf->Ln(0.5);
369        $this->pdf->SetFont('', '', 8);
370        $offset = 0;
371        foreach ($t_width as $i => $w) {
372            $t_all_offset[$offset] = $offset;
373            $this->pdf->SetY($y + $t_ydelta[$i] + 0.2);
374            $this->pdf->SetX($offset + $this->pdf->lMargin);
375            $this->pdf->MultiCellIconv($w, 3, $t_text[$i], 0, 'C', 0);
376            $offset+=$w;
377        }
378
379        $t2_width = array(10, 90, 20, 18, 18, 15, 11);
380        $t2_start = array(0, 0, 0, 1, 1, 3, 3);
381        $t2_ydelta = array(4, 4, 4, 3, 3, 1, 4);
382        $t2_text = array(
383            'N п/п',
384            'наименование',
385            'артикул',
386            'наимено- вание',
387            'код по ОКЕИ',
388            'одного места (штуки)',
389            'нетто',
390            );
391        $offset = 0;
392        $c_id = 0;
393        $old_col = 0;
394        $y+=5;
395
396        foreach ($t2_width as $i => $w2) {
397            while ($c_id < $t2_start[$i]) {
398                $offset+=$t_width[$c_id++];
399            }
400
401            if ($old_col == $t2_start[$i] && $i>0) {
402                $off2+=$t2_width[$i - 1];
403            } else {
404                $off2 = 0;
405            }
406            $old_col = $t2_start[$i];
407            $t_all_offset[$offset + $off2] = $offset + $off2;
408            $this->pdf->SetY($y);
409            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
410            $this->pdf->Cell($w2, 11, '', 1, 0, 'C', 0);
411
412            $this->pdf->SetY($y + $t2_ydelta[$i]);
413            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
414            $this->pdf->MultiCellIconv($w2, 3, $t2_text[$i], 0, 'C', 0);
415        }
416
417        sort($t_all_offset, SORT_NUMERIC);
418        $this->pdf->SetY($y + 11);
419        $t_all_width = array();
420        $old_offset = 0;
421        foreach ($t_all_offset as $offset) {
422            if ($offset == 0) {
423                continue;
424            }
425            $t_all_width[] = $offset - $old_offset;
426            $old_offset = $offset;
427        }
428        $t_all_width[] = 36;
429        $i = 1;
430        foreach ($t_all_width as $w) {
431            $this->pdf->Cell($w, 4, $i, 1, 0, 'C', 0);
432            $i++;
433        }
434        $this->pdf->Ln();
435       
436
437        // тело таблицы
438        $y = $this->pdf->GetY();
439        $nomenclature = $this->doc->getDocumentNomenclature('comment');
440
441        $this->pdf->SetWidths($t_all_width);
442        $font_sizes = array(0 => 7);
443        $this->pdf->SetFSizes($font_sizes);
444        $this->pdf->SetHeight(3.5);
445
446        $aligns = array('R', 'L', 'L', 'C', 'C', 'C', 'C', 'C', 'R', 'R', 'R', 'R', 'R', 'R', 'R');
447        $this->pdf->SetAligns($aligns);
448        $this->pdf->SetFillColor(255, 255, 255);
449        $i = 1;
450        $sum = 0;
451        $list_summass = $list_sum = $list_sumnaloga = $list_sumbeznaloga = $list_cnt = 0;
452        foreach ($nomenclature as $line) {
453            if($line['cnt']>0) {
454                continue;
455            }
456            $line['cnt'] = abs($line['cnt']);
457            $line['sum'] = abs($line['sum']);
458            $line['mass'] = abs($line['mass']);
459
460            $row = array(
461                $i++,
462                $line['name'],
463                $line['code'],
464                $line['unit_name'],
465                $line['unit_code'],
466                $line['cnt'],
467                sprintf("%01.3f", $line['mass']),
468                sprintf("%01.3f", $line['mass']*$line['cnt']),               
469                sprintf("%01.2f", $line['price']),
470                sprintf("%01.2f", $line['sum']),
471                $line['comment']
472            );
473            $this->pdf->RowIconv($row);
474
475            if ($this->pdf->GetY() > 190) {
476                $this->makeColRect($t_all_offset, $y);
477                $this->pdf->AddPage('L');
478                $this->addTechFooter();
479                $y = $this->pdf->GetY();
480                $list_summass = $list_sum = $list_sumnaloga = 0;
481            }
482            $sum += $line['sum'];
483        }
484        $this->makeColRect($t_all_offset, $y);       
485        $this->makeSummary('Итого:', $t_all_width, 3.5, $sum);
486
487        // Контроль расстояния до конца листа
488        $workspace_h = $this->pdf->h - $this->pdf->bMargin - $this->pdf->tMargin;
489        if ($workspace_h <= $this->pdf->GetY() + 61) {
490            $this->pdf->AddPage('L');
491            $this->addTechFooter();
492        }
493        $this->pdf->SetAutoPageBreak(0);
494       
495        // Подписи
496        $step = 3.5;
497        $microstep = 3;
498        $this->pdf->SetLineWidth($this->line_thin_w);
499       
500        $sum_p = num2str($sum);
501        $this->makeSimpleItem('Сумма списания', $sum_p, '', $step, $microstep);
502        $this->pdf->ln();
503        $str = 'Все члены комиссии предупреждены об ответственности за подписание акта, содержащие сведения, не соответствующие действительности.';
504        $this->pdf->MultiCellIconv(0, $step, $str ,0,'L',0);
505        $this->pdf->ln();
506        $this->makeDPFItem('Председатель комиссии: ', '', '', $step, $microstep);
507        $this->makeDPFItem('Члены комиссии: ', '', '', $step, $microstep);
508        $this->makeDPFItem('', '', '', $step, $microstep);
509        $this->makeDPFItem('', '', '', $step, $microstep);
510        $this->makeDPFItem('Материально ответственное лицо', '', '', $step, $microstep);
511       
512        $str = 'Решение руководиетля';
513        $this->pdf->MultiCellIconv(0, $step, $str ,0,'L',0);
514        $this->makeSimpleItem('Стоимость списанного товара отнести на счет', '' , '', $step, $microstep);
515
516    }
517
518}
Note: See TracBrowser for help on using the repository browser.