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

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

Last change on this file since 986 was 986, checked in by blacklight, 8 months ago
  • Добвлен вывод печати организации в печатную форму коммерческого предложения
  • Проведён рефакторинг печатных форм документов
File size: 20.0 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->addPage('L');
134        $y = $this->pdf->getY();       
135
136        $this->pdf->setY($y);
137        $this->pdf->SetFont('', '', 6);
138        $str = 'Унифицированная форма ТОРГ-16 Утверждена постановлением госкомстата России от 25.12.98 № 132';
139        $this->pdf->CellIconv(0, 4, $str, 0, 1, 'R');
140
141        // Шапка с реквизитами
142        $t2_y = $this->pdf->GetY();
143        $this->pdf->SetFont('', '', 8);
144        $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']}";
145        $this->pdf->MultiCellIconv(230, 4, $str, 0, 'L');
146        $y = $this->pdf->GetY();
147        $this->pdf->Line(10, $this->pdf->GetY(), 230, $this->pdf->GetY());
148        $this->pdf->SetFont('', '', 5);
149        $str = "организация";
150        $this->pdf->CellIconv(230, 2, $str, 0, 1, 'C');
151
152        $this->pdf->SetFont('', '', 8);
153        $this->pdf->Cell(0, 4, '', 0, 1, 'L');
154        $this->pdf->Line(10, $this->pdf->GetY(), 230, $this->pdf->GetY());
155        $this->pdf->SetFont('', '', 5);
156        $str = "структурное подразделение";
157        $this->pdf->CellIconv(220, 2, $str, 0, 1, 'C');
158        $this->pdf->ln(8);
159        $str = "Основание";
160        $this->pdf->CellIconv(30, 4, $str, 0, 0, 'L');
161        $this->pdf->MultiCellIconv(190, 4, 'Приказ', 0, 'L');
162        $this->pdf->Line(40, $this->pdf->GetY(), 230, $this->pdf->GetY());
163        $this->pdf->SetFont('', '', 5);
164        $str = "ненужное зачеркнуть";
165        $this->pdf->CellIconv(220, 2, $str, 0, 1, 'C');
166
167        // Правый столбик шапки
168        $t3_y = $this->pdf->GetY();
169
170        $set_x = 255;
171        $width = 17;
172        $this->pdf->SetFont('', '', 7);
173        $this->pdf->SetY($t2_y);
174        $set_x = $this->pdf->w - $this->pdf->rMargin - $width;
175
176        $str = 'Коды';
177        $this->pdf->SetX($set_x);
178        $this->pdf->CellIconv($width, 4, $str, 1, 1, 'C');
179        $set_x = $this->pdf->w - $this->pdf->rMargin - $width * 2;
180
181        $tbt_y = $this->pdf->GetY();
182
183        $lines = array('Форма по ОКУД', 'по ОКПО', '', 'Вид деятельности по ОКДП');
184        foreach ($lines as $str) {
185            $this->pdf->SetX($set_x);
186            $this->pdf->CellIconv($width, 4, $str, 0, 1, 'R');
187        }
188        $lines = array('Номер', 'Дата');
189        foreach ($lines as $str) {
190            $this->pdf->SetX($set_x);
191            $this->pdf->CellIconv($width, 4, $str, 1, 1, 'R');
192        }
193        $str = 'Вид операции';
194        $this->pdf->SetX($set_x);
195        $this->pdf->CellIconv($width, 4, $str, 0, 1, 'R');
196
197        $tbt_h = $this->pdf->GetY() - $tbt_y;
198        $set_x = $this->pdf->w - $this->pdf->rMargin - $width;
199        $this->pdf->SetY($tbt_y);
200        $this->pdf->SetX($this->pdf->w - $this->pdf->rMargin - $width);
201        $this->pdf->SetLineWidth($this->line_bold_w);
202        $this->pdf->Cell($width, $tbt_h, '', 1, 1, 'R');
203        $this->pdf->SetLineWidth($this->line_normal_w);
204
205        $this->pdf->SetY($tbt_y);
206        $lines = array('0330216', $firm_vars['firm_okpo'], '98707889', '', '', '', '');
207        foreach ($lines as $str) {
208            $this->pdf->SetX($set_x);
209            $this->pdf->CellIconv($width, 4, $str, 1, 1, 'C');
210        }
211
212        // Название документа
213
214        $this->pdf->SetY($t3_y + 5);
215        $this->pdf->SetX(40);
216        $this->pdf->Cell(60, 4, '', 0, 0, 'R');
217        $str = 'Номер документа';
218        $this->pdf->CellIconv(25, 4, $str, 1, 0, 'C');
219        $str = 'Дата составления';
220        $this->pdf->CellIconv(25, 4, $str, 1, 1, 'C');
221        $this->pdf->SetX(40);
222        $this->pdf->SetLineWidth($this->line_bold_w);
223        $this->pdf->SetFont('', '', 10);
224        $str = 'АКТ О СПИСАНИИ ТОВАРОВ';
225        $this->pdf->CellIconv(60, 4, $str, 0, 0, 'C');
226        $this->pdf->SetFont('', '', 7);
227        $this->pdf->Cell(25, 4, $doc_data['altnum'], 1, 0, 'C');
228        $dt = date("d.m.Y", $doc_data['date']);
229        $this->pdf->Cell(25, 4, $dt, 1, 1, 'C');
230        $this->pdf->Ln(3);
231       
232        // Таблица 1
233        $y = $this->pdf->GetY();
234        $t_all_offset = array();
235        $this->pdf->SetLineWidth($this->line_normal_w);
236        $t_width = array(60, 97, 120);
237        $t_text = array(
238            'Дата',
239            'Товарная накладная',
240            'Признаки понижения качества (причины списания)',
241            );
242
243        foreach ($t_width as $w) {
244            $this->pdf->Cell($w, 10, '', 1, 0, 'C', 0);
245        }
246        $this->pdf->Ln();
247        $this->pdf->Ln(0.5);
248        $this->pdf->SetFont('', '', 8);
249        $offset = 0;
250        foreach ($t_width as $i => $w) {
251            $t_all_offset[$offset] = $offset;
252            $this->pdf->SetY($y + 1.2);
253            $this->pdf->SetX($offset + $this->pdf->lMargin);
254            $this->pdf->MultiCellIconv($w, 3, $t_text[$i], 0, 'C', 0);
255            $offset+=$w;
256        }
257        $t2_width = array(30, 30, 50, 47, 100, 20);
258        $t2_start = array(0, 0, 1, 1, 2, 2);
259        $t2_text = array(
260            'поступления товара',
261            'списания товара',
262            'номер',
263            'дата',
264            'наименование',
265            'код',
266            );
267        $offset = 0;
268        $c_id = 0;
269        $old_col = 0;
270        $y+=5;
271
272        foreach ($t2_width as $i => $w2) {
273            while ($c_id < $t2_start[$i]) {
274                $offset+=$t_width[$c_id++];
275            }
276
277            if ($old_col == $t2_start[$i] && $i>0) {
278                $off2+=$t2_width[$i - 1];
279            } else {
280                $off2 = 0;
281            }
282            $old_col = $t2_start[$i];
283            $t_all_offset[$offset + $off2] = $offset + $off2;
284            $this->pdf->SetY($y);
285            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
286            $this->pdf->Cell($w2, 5, '', 1, 0, 'C', 0);
287
288            $this->pdf->SetY($y+1);
289            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
290            $this->pdf->MultiCellIconv($w2, 3, $t2_text[$i], 0, 'C', 0);
291        }
292        sort($t_all_offset, SORT_NUMERIC);
293        $this->pdf->SetY($y + 5);
294        $t_all_width = array();
295        $old_offset = 0;
296        foreach ($t_all_offset as $offset) {
297            if ($offset == 0) {
298                continue;
299            }
300            $t_all_width[] = $offset - $old_offset;
301            $old_offset = $offset;
302        }
303        $t_all_width[] = 20;
304        $i = 1;
305        foreach ($t_all_width as $w) {
306            $this->pdf->Cell($w, 4, $i, 1, 0, 'C', 0);
307            $i++;
308        }
309        $this->pdf->Ln();
310       
311        $this->pdf->SetWidths($t_all_width);
312        $font_sizes = array(0 => 7);
313        $this->pdf->SetFSizes($font_sizes);
314        $this->pdf->SetHeight(3.5);
315
316        $aligns = array('C', 'C', 'C', 'C', 'C', 'C');
317        $this->pdf->SetAligns($aligns);
318        $this->pdf->SetFillColor(255, 255, 255);
319       
320        $nomenclature = $this->doc->getDocumentNomenclature();
321        foreach ($nomenclature as $line) {
322            if($line['cnt']>0) {
323                continue;
324            }
325            $row = array(
326                '',
327                $dt,
328                '',
329                '',
330                '',
331                '',
332            );
333            $this->pdf->RowIconv($row);
334            $this->controlPageBreak(30, 'L');
335        }
336        $this->pdf->ln(5);
337       
338       
339       
340       
341
342        // Шапка таблицы
343        $y = $this->pdf->GetY();
344        $t_all_offset = array();
345        $this->pdf->SetLineWidth($this->line_normal_w);
346        $t_width = array(120, 36, 15, 26, 20, 24, 36);
347        $t_ydelta = array(1, 1, 5, 1, 4, 4, 5);
348        $t_text = array(
349            'Товар',
350            'Единица измерения',
351            'Количество',
352            'Масса',
353            'Цена, руб. коп.',
354            'Стоимость, руб. коп',
355            'Примечание'
356        );
357
358        foreach ($t_width as $w) {
359            $this->pdf->Cell($w, 16, '', 1, 0, 'C', 0);
360        }
361        $this->pdf->Ln();
362        $this->pdf->Ln(0.5);
363        $this->pdf->SetFont('', '', 8);
364        $offset = 0;
365        foreach ($t_width as $i => $w) {
366            $t_all_offset[$offset] = $offset;
367            $this->pdf->SetY($y + $t_ydelta[$i] + 0.2);
368            $this->pdf->SetX($offset + $this->pdf->lMargin);
369            $this->pdf->MultiCellIconv($w, 3, $t_text[$i], 0, 'C', 0);
370            $offset+=$w;
371        }
372
373        $t2_width = array(10, 90, 20, 18, 18, 15, 11);
374        $t2_start = array(0, 0, 0, 1, 1, 3, 3);
375        $t2_ydelta = array(4, 4, 4, 3, 3, 1, 4);
376        $t2_text = array(
377            'N п/п',
378            'наименование',
379            'артикул',
380            'наимено- вание',
381            'код по ОКЕИ',
382            'одного места (штуки)',
383            'нетто',
384            );
385        $offset = 0;
386        $c_id = 0;
387        $old_col = 0;
388        $y+=5;
389
390        foreach ($t2_width as $i => $w2) {
391            while ($c_id < $t2_start[$i]) {
392                $offset+=$t_width[$c_id++];
393            }
394
395            if ($old_col == $t2_start[$i] && $i>0) {
396                $off2+=$t2_width[$i - 1];
397            } else {
398                $off2 = 0;
399            }
400            $old_col = $t2_start[$i];
401            $t_all_offset[$offset + $off2] = $offset + $off2;
402            $this->pdf->SetY($y);
403            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
404            $this->pdf->Cell($w2, 11, '', 1, 0, 'C', 0);
405
406            $this->pdf->SetY($y + $t2_ydelta[$i]);
407            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
408            $this->pdf->MultiCellIconv($w2, 3, $t2_text[$i], 0, 'C', 0);
409        }
410
411        sort($t_all_offset, SORT_NUMERIC);
412        $this->pdf->SetY($y + 11);
413        $t_all_width = array();
414        $old_offset = 0;
415        foreach ($t_all_offset as $offset) {
416            if ($offset == 0) {
417                continue;
418            }
419            $t_all_width[] = $offset - $old_offset;
420            $old_offset = $offset;
421        }
422        $t_all_width[] = 36;
423        $i = 1;
424        foreach ($t_all_width as $w) {
425            $this->pdf->Cell($w, 4, $i, 1, 0, 'C', 0);
426            $i++;
427        }
428        $this->pdf->Ln();
429       
430
431        // тело таблицы
432        $y = $this->pdf->GetY();
433        $nomenclature = $this->doc->getDocumentNomenclature('comment');
434
435        $this->pdf->SetWidths($t_all_width);
436        $font_sizes = array(0 => 7);
437        $this->pdf->SetFSizes($font_sizes);
438        $this->pdf->SetHeight(3.5);
439
440        $aligns = array('R', 'L', 'L', 'C', 'C', 'C', 'C', 'C', 'R', 'R', 'R', 'R', 'R', 'R', 'R');
441        $this->pdf->SetAligns($aligns);
442        $this->pdf->SetFillColor(255, 255, 255);
443        $i = 1;
444        $sum = 0;
445        $list_summass = $list_sum = $list_sumnaloga = $list_sumbeznaloga = $list_cnt = 0;
446        foreach ($nomenclature as $line) {
447            if($line['cnt']>0) {
448                continue;
449            }
450            $line['cnt'] = abs($line['cnt']);
451            $line['sum'] = abs($line['sum']);
452            $line['mass'] = abs($line['mass']);
453
454            $row = array(
455                $i++,
456                $line['name'],
457                $line['code'],
458                $line['unit_name'],
459                $line['unit_code'],
460                $line['cnt'],
461                sprintf("%01.3f", $line['mass']),
462                sprintf("%01.3f", $line['mass']*$line['cnt']),               
463                sprintf("%01.2f", $line['price']),
464                sprintf("%01.2f", $line['sum']),
465                $line['comment']
466            );
467            $this->pdf->RowIconv($row);
468
469            if ($this->pdf->GetY() > 190) {
470                $this->makeColRect($t_all_offset, $y);
471                $this->addPage('L');               
472                $y = $this->pdf->GetY();
473                $list_summass = $list_sum = $list_sumnaloga = 0;
474            }
475            $sum += $line['sum'];
476        }
477        $this->makeColRect($t_all_offset, $y);       
478        $this->makeSummary('Итого:', $t_all_width, 3.5, $sum);
479
480        $this->controlPageBreak(61);
481        $this->pdf->SetAutoPageBreak(0);
482       
483        // Подписи
484        $step = 3.5;
485        $microstep = 3;
486        $this->pdf->SetLineWidth($this->line_thin_w);
487       
488        $sum_p = num2str($sum);
489        $this->makeSimpleItem('Сумма списания', $sum_p, '', $step, $microstep);
490        $this->pdf->ln();
491        $str = 'Все члены комиссии предупреждены об ответственности за подписание акта, содержащие сведения, не соответствующие действительности.';
492        $this->pdf->MultiCellIconv(0, $step, $str ,0,'L',0);
493        $this->pdf->ln();
494        $this->makeDPFItem('Председатель комиссии: ', '', '', $step, $microstep);
495        $this->makeDPFItem('Члены комиссии: ', '', '', $step, $microstep);
496        $this->makeDPFItem('', '', '', $step, $microstep);
497        $this->makeDPFItem('', '', '', $step, $microstep);
498        $this->makeDPFItem('Материально ответственное лицо', '', '', $step, $microstep);
499       
500        $str = 'Решение руководиетля';
501        $this->pdf->MultiCellIconv(0, $step, $str ,0,'L',0);
502        $this->makeSimpleItem('Стоимость списанного товара отнести на счет', '' , '', $step, $microstep);
503
504    }
505
506}
Note: See TracBrowser for help on using the repository browser.