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

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

Last change on this file since 986 was 986, checked in by blacklight, 8 months ago
  • Добвлен вывод печати организации в печатную форму коммерческого предложения
  • Проведён рефакторинг печатных форм документов
File size: 6.9 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; 
20
21/// Стандартная накладная
22abstract class iPrintFormInvoicePdf extends \doc\printforms\iPrintFormPdf {
23    protected $form_linecount;
24    protected $form_sum;   
25    protected $form_summass;
26   
27    /// Добавить блок с информацией о партнёрах сделки
28    abstract protected function addPartnerInfoBlock();
29   
30    public function getName() {
31        return "Накладная";
32    }
33   
34    /// Добавить блок с заголовком формы
35    protected function addFormHeaderBlock() {
36        $doc_id = $this->doc->getId();
37        $doc_data = $this->doc->getDocDataA();
38        $text = "Накладная N {$doc_data['altnum']}{$doc_data['subtype']} ($doc_id) от " . date("d.m.Y", $doc_data['date']);
39        $this->addHeader($text); 
40    }
41   
42    /// Добавить блок с информацией о поставщике и покупателе для приходной накладной
43    protected function addInPartnerInfoBlock() {
44        $doc_data = $this->doc->getDocDataA();
45        $firm_vars = $this->doc->getFirmVarsA();
46        $agent = new \models\agent($doc_data['agent']);
47        $text = "Поставщик: {$agent->fullname}, телефон: ".$agent->getPhone();
48        $this->addInfoLine($text);
49        $text = "Покупатель: {$firm_vars['firm_name']}, телефон: {$firm_vars['firm_telefon']}";
50        $this->addInfoLine($text);
51        $this->pdf->Ln(3);
52    }
53   
54    /// Добавить блок с информацией о поставщике и покупателе для расходной накладной
55    protected function addOutPartnerInfoBlock() {
56        $doc_data = $this->doc->getDocDataA();
57        $firm_vars = $this->doc->getFirmVarsA();
58        $agent = new \models\agent($doc_data['agent']);
59        $text = "Поставщик: {$firm_vars['firm_name']}, телефон: {$firm_vars['firm_telefon']}";
60        $this->addInfoLine($text);               
61        $text = "Покупатель: {$agent->fullname}, телефон: ".$agent->getPhone();
62        $this->addInfoLine($text);
63        $this->pdf->Ln(3);
64    }
65   
66    /// Добавить блок с таблицей номенклатуры
67    protected function addNomenclatureTableBlock() {
68        global $CONFIG;
69        $nomenclature = $this->doc->getDocumentNomenclature();
70       
71        $th_widths = array(8);
72        $th_texts = array('№');
73        $tbody_aligns = array('R');
74        if ($CONFIG['poseditor']['vc']) {
75            $th_widths[] = 20;
76            $th_texts[] = 'Код';
77            $tbody_aligns[] = 'R';
78            $th_widths[] = 86;
79        } else {
80            $th_widths[] = 106;
81        }
82        $th_texts[] = 'Наименование';
83        $tbody_aligns[] = 'L';
84        $th_widths = array_merge($th_widths, array(16, 20, 20, 20));
85        $th_texts = array_merge($th_texts, array('В упак.','Кол-во',  'Цена', 'Сумма'));
86        $tbody_aligns = array_merge($tbody_aligns, array('R', 'R', 'R', 'R'));
87        $this->addTableHeader($th_widths, $th_texts, $tbody_aligns);       
88       
89        $this->form_linecount = 0;
90        $this->form_sum = $this->form_summass = 0;
91        foreach($nomenclature as $line) {
92            $this->form_linecount++;
93            $price = sprintf("%01.2f р.", $line['price']);
94            $sum_line = sprintf("%01.2f р.", $line['sum']);
95            $row = array($this->form_linecount);
96            if (@$CONFIG['poseditor']['vc']) {
97                $row[] = $line['vc'];
98            }
99            $row[] = $line['name'];
100            $row = array_merge($row, array("{$line['mult']} {$line['unit_name']}", "{$line['cnt']} {$line['unit_name']}", $price, $sum_line));
101            $this->controlPageBreak(30);
102            $this->pdf->RowIconv($row);
103            $this->form_sum += $line['sum'];
104            $this->form_summass += $line['mass'] * $line['cnt'];
105        }   
106    }
107   
108    /// Добавить блок с информацией о сумме документа
109    protected function addSummaryBlock() {
110        $dop_data = $this->doc->getDopDataA();
111        $sum_p = number_format($this->form_sum, 2, '.', ' ');
112        $mass_p = number_format($this->form_summass, 3, '.', ' ');
113        $text = "Итого {$this->form_linecount} наименований массой $mass_p кг. на сумму $sum_p руб.";
114        if(isset($dop_data['mest'])) {
115            if ($dop_data['mest']) {
116                $text .= ", мест: " . $dop_data['mest'];
117            }
118        }
119        $this->addInfoLine($text, 12); 
120    }
121   
122    /// Добавить блок с информацией об оплатах
123    protected function addPaymentInfoBlock() {
124        global $db;
125        $doc_id = $this->doc->getId();
126        $rs = $db->query("SELECT SUM(`sum`) FROM `doc_list`
127            WHERE (`p_doc`='{$doc_id}' AND (`type`='4' OR `type`='6')) AND `ok`>0 AND `p_doc`!='0' GROUP BY `p_doc`");
128        if ($rs->num_rows) {
129            $prop_data = $rs->fetch_row();
130            $pay_p = number_format($prop_data[0], 2, '.', ' ');
131            $text = "Оплачено: $pay_p руб.";
132            $this->addInfoLine($text);
133        }
134    }   
135       
136    /// Добавить блок с подписями
137    protected function addSignBlock() {       
138        $text = "Товар получил, претензий к качеству товара и внешнему виду не имею.";
139        $this->addInfoLine($text);
140        $text = "Покупатель: ____________________________________";
141        $this->addSignLine($text);
142        $text = "Поставщик:_____________________________________";
143        $this->addSignLine($text); 
144    }
145 
146    /// Сформировать печатную форму
147    public function make() {
148        $this->addPage();
149       
150        $this->addFormHeaderBlock();     
151        $this->addPartnerInfoBlock(); 
152        $this->addNomenclatureTableBlock();
153        $this->pdf->Ln();
154       
155        $this->addSummaryBlock();
156        $this->addPaymentInfoBlock();
157        $this->pdf->Ln();
158
159        $this->addSignBlock();
160        return;
161    }
162}
Note: See TracBrowser for help on using the repository browser.