1
sfak.php in trunk/web/include/doc/printforms/realizaciya – MultiMag

source: trunk/web/include/doc/printforms/realizaciya/sfak.php @ 986

Last change on this file since 986 was 986, checked in by blacklight, 8 months ago
  • Добвлен вывод печати организации в печатную форму коммерческого предложения
  • Проведён рефакторинг печатных форм документов
File size: 15.2 KB
Line 
1<?php
2//      MultiMag v0.2 - Complex sales system
3//
4//      Copyright (C) 2005-2018, 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//
19namespace doc\printforms\realizaciya; 
20
21class sfak extends \doc\printforms\iPrintFormPdf {
22 
23    public function getName() {
24        return "Счёт-фактура";
25    }
26   
27    protected function outHeaderLine($name, $value) {
28        $h = 4.5;
29        $this->pdf->MultiCellIconv(0, $h, $name.' '.$value, 0, 'L');
30    }
31   
32    // Вывод элемента *должность/подпись/фио*
33    protected function makeDPFItem($name, $num, $step = 4, $microstep = 2) {
34        $p1_w = array(35, 2, 35, 2, 45, 0);
35        $this->pdf->SetFont('', '', 7);
36        $this->pdf->CellIconv(0, $step, $name, 0, 1, 'L', 0); 
37        $this->pdf->CellIconv($p1_w[0], $step, '', 'B', 0, 'C', 0);
38        $this->pdf->CellIconv($p1_w[1], $step, '', 0, 0, 'C', 0);
39        $this->pdf->CellIconv($p1_w[2], $step, '', 'B', 0, 'R', 0);
40        $this->pdf->CellIconv($p1_w[3], $step, '', 0, 0, 'L', 0);
41        $this->pdf->CellIconv($p1_w[4], $step, '', 'B', 0, 'С', 0);
42        $this->pdf->CellIconv($p1_w[5], $step, '['.$num.']', 0, 1, 'R', 0);
43       
44        $this->pdf->SetFont('', '', 5);
45        $this->pdf->CellIconv($p1_w[0], $microstep, '(должность)', 0, 0, 'C', 0);
46        $this->pdf->CellIconv($p1_w[1], $microstep, '', 0, 0, 'C', 0);
47        $this->pdf->CellIconv($p1_w[2], $microstep, '(подпись)', 0, 0, 'C', 0);
48        $this->pdf->CellIconv($p1_w[3], $microstep, '',0, 0, 'C', 0);
49        $this->pdf->CellIconv($p1_w[4], $microstep, '(ф.и.о.)', 0, 0, 'C', 0);
50        $this->pdf->CellIconv($p1_w[5], $microstep, '', 0, 1, 'C', 0);
51    }
52   
53    // Вывод простого элемента блока подписей
54    protected function makeSimpleItem($name, $value, $num, $desc, $step, $microstep) {
55        $this->pdf->SetFont('', '', 7);
56        $this->pdf->CellIconv(0, $step, $name, 0, 1, 'L', 0);
57        $this->pdf->CellIconv(120, $step, $value, 'B', 0, 'L', 0);
58        $this->pdf->CellIconv(0, $step, '['.$num.']', 0, 1, 'R', 0);
59        $this->pdf->SetFont('', '', 5);
60        $this->pdf->CellIconv(120, $microstep, $desc, 0, 1, 'C', 0);
61    }
62    // Вывод простого элемента блока подписей *дата*
63    protected function makeDateItem($name, $num, $step) {
64        $this->pdf->SetFont('', '', 7);
65        $this->pdf->CellIconv(60, $step, $name, 0, 0, 'L', 0);
66        $this->pdf->CellIconv(60, $step, '"_____" _________________________ 20____г.', 0, 0, 'C', 0);
67        $this->pdf->CellIconv(0, $step, '['.$num.']', 0, 1, 'R', 0);
68    }
69
70    /// Сформировать данные печатной формы
71    public function make() {
72        global $db;
73        $doc_id = $this->doc->getId();
74        $doc_data = $this->doc->getDocDataA();
75        $dop_data = $this->doc->getDopDataA();
76        $firm_vars = $this->doc->getFirmVarsA();
77       
78        $this->addPage('L');
79       
80        $this->pdf->Setx(150);
81        $this->pdf->SetFont('Arial', '', 7);
82        $str = 'Приложение №1 к постановлению правительства РФ от 26 декабря 2011г N1137';
83        $str = iconv('UTF-8', 'windows-1251', $str);
84        $this->pdf->MultiCell(0, 4, $str, 0, 'R');
85        $this->pdf->Ln();
86       
87        // заголовок
88        $this->pdf->SetFont('', '', 16);
89        $step = 4;
90        $str = iconv('UTF-8', 'windows-1251', "Счёт - фактура N {$doc_data['altnum']} от ". date("d.m.Y", $doc_data['date']));
91        $this->pdf->Cell(0, 6, $str, 0, 1, 'L');
92        $str = iconv('UTF-8', 'windows-1251', "Исправление N ---- от --.--.----");
93        $this->pdf->Cell(0, 6, $str, 0, 1, 'L');
94        $this->pdf->Ln(5);
95               
96        // Загрузка данных шапки
97        $gruzop_info = $db->selectRow('doc_agent', $dop_data['gruzop']);
98        $gruzop = '';
99        if ($gruzop_info) {
100            if ($gruzop_info['fullname']) {
101                $gruzop .= $gruzop_info['fullname'];
102            }
103            if ($gruzop_info['adres']) {
104                $gruzop.=', адрес ' . $gruzop_info['adres'];
105            }
106        }
107        $agent_info = $db->selectRow('doc_agent', $doc_data['agent']);
108        if (!$agent_info) {
109            throw new \Exception('Агент не найден');
110        }
111       
112        if ($doc_data['p_doc']) {
113            $rs = $db->query("SELECT `id`, `altnum`, `date` FROM `doc_list` WHERE
114                (`p_doc`='$doc_id' AND (`type`='4' OR `type`='6') AND `date`<='{$doc_data['date']}' ) OR
115                (`p_doc`='{$doc_data['p_doc']}' AND (`type`='4' OR `type`='6') AND `date`<='{$doc_data['date']}')
116                AND `ok`>'0' AND `p_doc`!='0' GROUP BY `p_doc`");
117            if ($rs->num_rows) {
118                $line = $rs->fetch_row();
119                $pp = $line[1];
120                $ppdt = date("d.m.Y", $line[2]);
121                if (!$pp) {
122                    $pp = $line[0];
123                }
124            }
125            else {
126                $pp = $ppdt = "           ";
127            }
128        } else {
129            $pp = $ppdt = "           ";
130        }
131        // Шапка
132        $this->pdf->SetFont('', '', 10);
133        $this->pdf->SetLineWidth($this->line_thin_w); 
134        $this->outHeaderLine("Продавец:", $firm_vars['firm_name']);
135        $this->outHeaderLine("Адрес:", $firm_vars['firm_adres']);
136        $this->outHeaderLine("ИНН / КПП продавца:", $firm_vars['firm_inn']);       
137        $this->outHeaderLine("Грузоотправитель и его адрес:", $firm_vars['firm_gruzootpr']);
138        $this->outHeaderLine("Грузополучатель и его адрес:", $gruzop, "(4)");
139        $this->outHeaderLine("К платёжно-расчётному документу", "№ $pp, от $ppdt");
140        $this->outHeaderLine("Покупатель:", $agent_info['fullname']);
141        $this->outHeaderLine("Адрес:", $agent_info['adres']);
142        $this->outHeaderLine("ИНН / КПП покупателя:", $agent_info['inn'] . ' / ' . $agent_info['kpp']);
143        $this->outHeaderLine("Валюта: наименование, код", "Российский рубль, 643");       
144        $this->pdf->Ln();
145       
146        // Таблица номенклатуры - шапка       
147        // ====== Основная таблица =============
148        $y = $this->pdf->GetY();
149
150        $t_all_offset = array();
151
152        $this->pdf->SetLineWidth($this->line_normal_w);
153        $t_width = array(88, 22, 10, 15, 20, 10, 10, 16, 28, 26, 0);
154        $t_ydelta = array(7, 0, 5, 5, 0, 6, 6, 7, 3, 0, 7);
155        $t_text = array(
156            'Наименование товара (описание выполненных работ, оказанных услуг, имущественного права)',
157            'Единица измерения',
158            'Количество (объ ём)',
159            'Цена (тариф) за единицу измерения',
160            'Стоимость товаров (работ, услуг), имуществен- ных прав, всего без налога',
161            'В том числе акциз',
162            'Нало- говая ставка',
163            'Сумма налога',
164            'Стоимость товаров (работ, услуг, имущественных прав), всего с учетом налога',
165            'Страна происхождения',
166            'Номер таможенной декларации');
167
168        foreach ($t_width as $w) {
169            $this->pdf->Cell($w, 20, '', 1, 0, 'C', 0);
170        }
171        $this->pdf->Ln();
172        $this->pdf->Ln(0.5);
173        $this->pdf->SetFont('', '', 7);
174        $offset = 0;
175        foreach ($t_width as $i => $w) {
176            $t_all_offset[$offset] = $offset;
177            $this->pdf->SetY($y + $t_ydelta[$i] + 0.2);
178            $this->pdf->SetX($offset + $this->pdf->lMargin);
179            $str = iconv('UTF-8', 'windows-1251', $t_text[$i]);
180            $this->pdf->MultiCell($w, 2.7, $str, 0, 'C', 0);
181            $offset+=$w;
182        }
183
184        $t2_width = array(7, 15, 7, 19);
185        $t2_start = array(1, 1, 9, 9);
186        $t2_ydelta = array(2, 1, 2, 3);
187        $t2_text = array(
188            \nо\nд",
189            'условное обозначение (наци ональное)',
190            \nо\nд",
191            'краткое наименование');
192        $offset = 0;
193        $c_id = 0;
194        $old_col = 0;
195        $y+=6;
196
197        foreach ($t2_width as $i => $w2) {
198            while ($c_id < $t2_start[$i]) {
199                $offset+=$t_width[$c_id++];
200            }
201
202            if ($old_col == $t2_start[$i])
203                $off2+=$t2_width[$i - 1];
204            else
205                $off2 = 0;
206            $old_col = $t2_start[$i];
207            $t_all_offset[$offset + $off2] = $offset + $off2;
208            $this->pdf->SetY($y);
209            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
210            $this->pdf->Cell($w2, 14, '', 1, 0, 'C', 0);
211
212            $this->pdf->SetY($y + $t2_ydelta[$i]);
213            $this->pdf->SetX($offset + $off2 + $this->pdf->lMargin);
214            $str = iconv('UTF-8', 'windows-1251', $t2_text[$i]);
215            $this->pdf->MultiCell($w2, 3, $str, 0, 'C', 0);
216        }
217
218        $t3_text = array(1, 2, '2a', 3, 4, 5, 6, 7, 8, 9, 10, '10a', 11);
219        $this->pdf->SetLineWidth(0.2);
220        sort($t_all_offset, SORT_NUMERIC);
221        $this->pdf->SetY($y + 14);
222        $t_all_width = array();
223        $old_offset = 0;
224        foreach ($t_all_offset as $offset) {
225            if ($offset == 0)
226                continue;
227            $t_all_width[] = $offset - $old_offset;
228            $old_offset = $offset;
229        }
230        $t_all_width[] = 32;
231        $i = 1;
232        foreach ($t_all_width as $w) {
233            $this->pdf->Cell($w, 4, $t3_text[$i - 1], 1, 0, 'C', 0);
234            $i++;
235        }
236       
237        // тело таблицы
238        $nomenclature = $this->doc->getDocumentNomenclatureWVATandNums();
239       
240        $this->pdf->SetWidths($t_all_width);
241        $font_sizes = array(0=>7);
242        $this->pdf->SetFSizes($font_sizes);
243        $this->pdf->SetHeight(3.5);
244
245        $aligns = array('L', 'C', 'L', 'R', 'R', 'R', 'C', 'R', 'R', 'R', 'R', 'L', 'R');
246        $this->pdf->SetAligns($aligns);
247        $this->pdf->SetY($y + 18);
248        $this->pdf->SetFillColor(255, 255, 255);
249        $i = 1;
250        $sumbeznaloga = $sumnaloga = $sum = 0;
251        foreach ($nomenclature as $line ) {
252            $sumbeznaloga += $line['sum_wo_vat'];
253            $sum += $line['sum'];
254            $sumnaloga += $line['vat_s'];
255            if($line['vat_p']>0) {
256                $p_vat_p = $line['vat_p'].'%';
257                $vat_s_p = sprintf("%01.2f", $line['vat_s']);
258            }   else {
259                $p_vat_p = $vat_s_p = 'без налога';
260            }
261            $row = array(
262                $line['name'],
263                $line['unit_code'],
264                $line['unit_name'],
265                $line['cnt'],
266                sprintf("%01.2f", $line['price']),
267                sprintf("%01.2f", $line['sum_wo_vat']),
268                $line['excise'],
269                $p_vat_p,
270                $vat_s_p,
271                sprintf("%01.2f", $line['sum']),
272                $line['country_code'],
273                $line['country_name'],
274                $line['gtd']);
275
276            $this->pdf->RowIconv($row);
277        }
278       
279        $this->controlPageBreak(65, 'L');
280        $this->pdf->SetAutoPageBreak(0);       
281
282        // Итоги
283        $sum = sprintf("%01.2f", $sum);
284        if($sumnaloga>0) {
285            $sumnaloga = sprintf("%01.2f", $sumnaloga);
286        }   else {
287            $sumnaloga = '--';
288        }
289        $sumbeznaloga = sprintf("%01.2f", $sumbeznaloga);
290        $step = 5.5;
291        $this->pdf->SetFont('', '', 9);
292        $this->pdf->SetLineWidth(0.3);
293        $str = iconv('UTF-8', 'windows-1251', "Всего к оплате:");
294        $this->pdf->Cell($t_all_width[0] + $t_all_width[1] + $t_all_width[2] + $t_all_width[3] + $t_all_width[4], $step, $str, 1, 0, 'L', 0);
295        $this->pdf->Cell($t_all_width[5], $step, $sumbeznaloga, 1, 0, 'R', 0);
296        $this->pdf->Cell($t_all_width[6] + $t_all_width[7], $step, 'X', 1, 0, 'C', 0);
297        $this->pdf->CellIconv($t_all_width[8], $step, $sumnaloga, 1, 0, 'R', 0);
298        $this->pdf->Cell($t_all_width[9], $step, $sum, 1, 0, 'R', 0);
299
300        $this->pdf->Ln(10);
301
302        $this->pdf->SetFont('', '', 10);
303        $str = iconv('UTF-8', 'windows-1251', "Руководитель организации:");
304        $this->pdf->Cell(50, $step, $str, 0, 0, 'L', 0);
305        $str = '_____________________';
306        $this->pdf->Cell(50, $step, $str, 0, 0, 'L', 0);
307        $str = iconv('UTF-8', 'windows-1251', "/" . $firm_vars['firm_director'] . "/");
308        $this->pdf->Cell(40, $step, $str, 0, 0, 'L', 0);
309
310        $str = iconv('UTF-8', 'windows-1251', "Главный бухгалтер:");
311        $this->pdf->Cell(40, $step, $str, 0, 0, 'R', 0);
312        $str = '_____________________';
313        $this->pdf->Cell(50, $step, $str, 0, 0, 'L', 0);
314        $str = iconv('UTF-8', 'windows-1251', "/" . $firm_vars['firm_buhgalter'] . "/");
315        $this->pdf->Cell(0, $step, $str, 0, 0, 'L', 0);
316        $this->pdf->Ln(4);
317        $this->pdf->SetFont('', '', 7);
318        $str = iconv('UTF-8', 'windows-1251', "или иное уполномоченное лицо");
319        $this->pdf->Cell(140, 3, $str, 0, 0, 'L', 0);
320        $str = iconv('UTF-8', 'windows-1251', "или иное уполномоченное лицо");
321        $this->pdf->Cell(50, 3, $str, 0, 0, 'L', 0);
322        $this->pdf->Ln(8);
323
324        $this->pdf->SetFont('', '', 10);
325        $str = iconv('UTF-8', 'windows-1251', "Индивидуальный предприниматель:______________________ / ____________________________/");
326        $this->pdf->Cell(160, $step, $str, 0, 0, 'L', 0);
327        $this->pdf->Cell(0, $step, '____________________________________', 0, 1, 'R', 0);
328
329        $this->pdf->SetFont('', '', 7);
330        $this->pdf->Cell(160, $step, '', 0, 0, 'L', 0);
331        $str = iconv('UTF-8', 'windows-1251', "реквизиты свидетельства о государственной регистрации ИП");
332        $this->pdf->Cell(0, 3, $str, 0, 0, 'R', 0);
333
334
335        $this->pdf->Ln(10);
336        $this->pdf->SetFont('', '', 7);
337        $str = iconv('UTF-8', 'windows-1251', "ПРИМЕЧАНИЕ. Первый экземпляр (оригинал) - покупателю, второй экземпляр (копия) - продавцу");
338        $this->pdf->Cell(0, $step, $str, 0, 0, 'R', 0);
339
340        $this->pdf->Ln();
341    }
342   
343   
344}
Note: See TracBrowser for help on using the repository browser.