assign ( "MOD", $mod_strings ); // group accounts if ($_REQUEST ['group_accounts'] == "on") { $group_accounts = true; $ss->assign ( "GROUP_ACCOUNTS", "1" ); } // get Stocks $stocks = ""; if ($_REQUEST ['stocks']) $stocks = $_REQUEST ['stocks']; $s_res = $db->query ( "SELECT id, name FROM ecmstocks WHERE deleted='0' ORDER BY name" ); $stocks_tpl = ''; $s_stocks = substr ( $s_stocks, 0, - 2 ); if (is_array ( $stocks ) && sizeof ( $stocks ) == $s_res->num_rows) $s_stocks = "Wszystkie"; $ss->assign ( "STOCKS", $stocks_tpl ); // document types $types_def = array ( 'FV' => 'Faktura', 'FVKOR' => 'Faktura korygująca' // 'REC' => 'Paragon', // 'RECKOR' => 'Korekta paragonu', ); $types = ""; if ($_REQUEST ['types']) $types = $_REQUEST ['types']; $s_types = ""; $types_tpl = ''; $s_types = substr ( $s_types, 0, - 2 ); if (is_array ( $types ) && sizeof ( $types ) == sizeof ( $types_def )) $s_types = "Wszystkie"; $ss->assign ( "TYPES", $types_tpl ); // document kinds $kinds_def = array ( 'K' => 'Kraj', 'U' => 'Unia', 'E' => 'Eksport' ); $kinds = ""; if ($_REQUEST ['kinds']) $kinds = $_REQUEST ['kinds']; $s_kinds = ""; $kinds_tpl = ''; $s_kinds = substr ( $s_kinds, 0, - 2 ); if (is_array ( $kinds ) && sizeof ( $kinds ) == sizeof ( $kinds_def )) $s_kinds = "Wszystkie"; $ss->assign ( "KINDS", $kinds_tpl ); // document categories $categories = ""; if ($_REQUEST ['categories']) $categories = $_REQUEST ['categories']; $s_categories = ""; global $app_list_strings; $z = $GLOBALS ['db']->query ( 'select id,name from ecminvoicecategories' ); $categories_def = array (); while ( $cat = $GLOBALS ['db']->fetchByAssoc ( $z ) ) { $categories_def [$cat ['id']] = $cat ['name']; } // $categories_def = $app_list_strings['ecminvoiceouts_category_dom']; if ($_REQUEST ['categories']) $categories = $_REQUEST ['categories']; $categories_tpl = ''; $s_categories = substr ( $s_categories, 0, - 2 ); if (is_array ( $categories ) && sizeof ( $categories ) == sizeof ( $categories_def )) { $s_categories = "Wszystkie"; } $ss->assign ( "CATEGORIES", $categories_tpl ); // dates if ($_REQUEST ['date_from']) $date_from = $_REQUEST ['date_from']; else { $date_from = new DateTime ( "first day of last month" ); $date_from = $date_from->format ( 'd.m.Y' ); } $date_from_db = implode ( '-', array_reverse ( explode ( '.', $date_from ) ) ); $ss->assign ( "DATE_FROM", $date_from ); if ($_REQUEST ['date_to']) $date_to = $_REQUEST ['date_to']; else { $date_to = new DateTime ( "last day of last month" ); $date_to = $date_to->format ( 'd.m.Y' ); } $date_to_db = implode ( '-', array_reverse ( explode ( '.', $date_to ) ) ); $ss->assign ( "DATE_TO", $date_to ); if (! $process == true) { $ss->display ( 'modules/EcmReports/tpls/ReportSalesVatSales.tpl.html' ); return; } global $current_user; // Do your job! $main_query = "SELECT id, total_netto, total_brutto, total_vat, vats_summary, purchase_price FROM ecminvoiceouts WHERE deleted='0' AND canceled='0'"; $main_query .= "AND register_date >= '$date_from_db' AND register_date <= '$date_to_db' "; if (in_array ( "FV", $types ) && ! in_array ( "FVKOR", $types )) $main_query .= "AND type='normal' "; if (in_array ( "FVKOR", $types ) && ! in_array ( "FV", $types )) $main_query .= "AND type='correct' "; if (count ( $stocks ) > 0) { $stocks_string = implode ( "','", $stocks ); $ext = ""; if (in_array ( 'null', $stocks )) { $ext = " ("; } $main_query .= " AND " . $ext . "stock_id IN ('" . $stocks_string . "') "; if (in_array ( 'null', $stocks )) { $main_query .= " or stock_id is null)"; } } echo $main_query; if ($_REQUEST ['categories'] [0] == 'all') { $s_categories = "Wszystkie"; } else { if (is_array ( $categories )) $main_query .= " AND (category IN ('" . implode ( "','", $categories ) . "') OR category IS NULL)"; } if (is_array ( $kinds )) $main_query .= " AND pdf_type IN ('" . implode ( "','", $kinds ) . "') "; $main_query .= " ORDER BY register_date, date_entered"; // echo $main_query; die(); // echo $main_query; $inv_res = $db->query ( $main_query ); // get vats names $main_query = str_replace ( ", total_netto, total_brutto, total_vat, vats_summary, purchase_price", "", $main_query ); // leave only id field $vats_query = "SELECT distinct ii.ecmvat_name, v.value FROM ecminvoiceoutitems AS ii INNER JOIN ecmvats as v ON v.id = ii.ecmvat_id WHERE ecminvoiceout_id IN ($main_query) order by ecmvat_value"; $v_res = $db->query ( $vats_query ); $vats = array (); $vatsCount = 0; while ( $v_row = $db->fetchByAssoc ( $v_res ) ) { // check if value is 0 if ($v_row ['value'] == 0) { $vats [strtoupper ( $v_row ['ecmvat_name'] )] = 1; // var is 0 - we didn't have to draw column $vatsCount ++; } else { $vats [strtoupper ( $v_row ['ecmvat_name'] )] = 2; $vatsCount += 2; } } $data = array (); $c = 1; // counter while ( $row = $db->fetchByAssoc ( $inv_res ) ) { $tmp = array (); $tmp ['lp'] = $c; $c ++; $inv = new EcmInvoiceOut (); $inv->retrieve ( $row ['id'] ); $tmp ['document_no'] = $inv->document_no; if ($inv->type == 'correct') { $tmp ['document_no'] = '' . $inv->document_no; } else { $tmp ['document_no'] = '' . $inv->document_no; } $tmp ['register_date'] = $inv->register_date; // $pi = $inv->parent_nip.", ".$inv->parent_name.", ".$inv->parent_address_street.", ".$inv->parent_address_postalcode.", ".$inv->parent_address_city; $pi = $inv->parent_nip; $a = new Account (); $a->retrieve ( $inv->parent_id ); $pi .= ', ' . $a->ks_account; if (strlen ( $pi . ", " . $inv->parent_name ) <= 80) { $pi .= ", " . $inv->parent_name; } else { $pos = strpos ( $inv->parent_name, " " ); if ($pos !== false) { $inv->parent_name = substr ( $inv->parent_name, 0, $pos ) . ('...'); } $pi .= ", " . $inv->parent_name; } if (strlen ( $pi . ", " . $inv->parent_address_street ) <= 80) { $pi .= ", " . $inv->parent_address_street; } if (strlen ( $pi . ", " . $inv->parent_address_postalcode ) <= 80) $pi .= ", " . $inv->parent_address_postalcode; if (strlen ( $pi . ", " . $inv->parent_address_city ) <= 80) $pi .= ", " . $inv->parent_address_city; $tmp ['parent_info'] = $pi; $a = new Account (); $a->retrieve ( $inv->parent_id ); $tmp ['parent_index'] = $a->index_dbf; $tmp ['parent_id'] = $a->id; unset ( $a ); if ($inv->currency_id == 'PLN') $currency = 1; else $currency = $inv->currency_value_nbp; $tmp ['netto'] = round ( $row ['total_netto'] * $currency, 2 ); $tmp ['brutto'] = round ( $row ['total_brutto'] * $currency, 2 ); $tmp ['vat'] = round ( $row ['total_vat'] * $currency, 2 ); $tmp ['type'] = $inv->type; if ($inv->type == 'correct') { $tmp ['purchase'] = $row ['purchase_price']; } else { $tmp ['purchase'] = $row ['purchase_price']; } // prepare vats $vat_tmp = array (); $v_tmp = explode ( ",", $row ['vats_summary'] ); $v_tmp = array_slice ( $v_tmp, 0, - 1 ); // remove last empty element foreach ( $v_tmp as $val ) { $vv_tmp = explode ( ":", $val ); $vvv_tmp = array (); $vvv_tmp [] = $vv_tmp [1]; $vvv_tmp [] = $vv_tmp [2]; $vat_tmp [strtoupper ( $vv_tmp [0] )] = $vvv_tmp; unset ( $vvv_tmp ); unset ( $vv_tmp ); } unset ( $v_tmp ); $inv_vat = array (); foreach ( $vats as $k => $v ) { $tmp_vat = array (); if (is_array ( $vat_tmp [$k] )) { $tmp_vat [] = round ( $vat_tmp [$k] [0] * $currency, 2 ); $tmp_vat [] = round ( $vat_tmp [$k] [1] * $currency, 2 ); } else { $tmp_vat [] = 0; $tmp_vat [] = 0; } $inv_vat [$k] = $tmp_vat; unset ( $tmp_vat ); } $tmp ['vats'] = $inv_vat; unset ( $inv_vat ); unset ( $inv ); $data [] = $tmp; unset ( $tmp ); } if ($group_accounts == true) { usort ( $data, "cmp" ); // creaate Accounts summary $tmp_data = array (); $summary = array (); $sum = array (); $sum_vat = array (); for($i = 0; $i < sizeof ( $data ); $i ++) { $row = $data [$i]; $row ['lp'] = $i + 1; $tmp_data [] = $row; if (array_key_exists ( "total_netto", $sum )) $sum ['total_netto'] += $row ['netto']; else $sum ['total_netto'] = $row ['netto']; if (array_key_exists ( "total_brutto", $sum )) $sum ['total_brutto'] += $row ['brutto']; else $sum ['total_brutto'] = $row ['brutto']; if (array_key_exists ( "total_vat", $sum )) $sum ['total_vat'] += $row ['vat']; else $sum ['total_vat'] = $row ['vat']; if (array_key_exists ( "total_purchase", $sum )) $sum ['total_purchase'] += $row ['purchase']; else $sum ['total_purchase'] = $row ['purchase']; foreach ( $row ['vats'] as $k => $v ) { if (! array_key_exists ( $k, $sum_vat )) { $sum_vat [$k] [0] = 0; $sum_vat [$k] [1] = 0; } $sum_vat [$k] [0] += $v [0]; $sum_vat [$k] [1] += $v [1]; } if ($data [$i] ['parent_id'] != $data [$i + 1] ['parent_id'] || $i == sizeof ( $data )) { // insert summary row $sum ['is_summary'] = 1; $sum ['index'] = $row ['parent_index']; $sum ['parent_info'] = 'Podsumowanie dla kontrahenta'; $sum ['vats'] = $sum_vat; $tmp_data [] = $sum; unset ( $sum ); $sum = array (); unset ( $sum_vat ); $sum_vat = array (); } } $data = $tmp_data; } $datas = $data; $rop = 28; // rows on page $nop = ceil ( sizeof ( $data ) / $rop ); // number of pages $pages_data = array_chunk ( $data, $rop ); $pages = array (); unset ( $data ); $prev_page = array (); $c = 1; // counter foreach ( $pages_data as $data ) { $tmp = array (); $tmp ['site_netto'] = 0; $tmp ['site_brutto'] = 0; $tmp ['site_vat'] = 0; $tmp ['site_purchase'] = 0; $tmp ['moved_netto'] = 0; $tmp ['moved_brutto'] = 0; $tmp ['moved_vat'] = 0; $tmp ['moved_purchase'] = 0; // prepare vats array $site_vats = array (); $moved_vats = array (); $total_vats = array (); foreach ( $vats as $k => $v ) { $site_vats [$k] [0] = 0; $site_vats [$k] [1] = 0; $moved_vats [$k] [0] = 0; $moved_vats [$k] [1] = 0; $total_vats [$k] [0] = 0; $total_vats [$k] [1] = 0; } foreach ( $data as $i ) { $tmp ['site_netto'] += $i ['netto']; $tmp ['site_brutto'] += $i ['brutto']; $tmp ['site_vat'] += $i ['vat']; $tmp ['site_purchase'] += $i ['purchase']; foreach ( $i ['vats'] as $k => $v ) { $site_vats [$k] [0] += $v [0]; $site_vats [$k] [1] += $v [1]; } } if ($c != 1) { // not first page $tmp ['moved_netto'] = $prev_page ['total_netto']; $tmp ['moved_brutto'] = $prev_page ['total_brutto']; $tmp ['moved_vat'] = $prev_page ['total_vat']; $tmp ['moved_purchase'] = $prev_page ['total_purchase']; foreach ( $vats as $k => $v ) { $moved_vats [$k] [0] += $prev_page ['total_vats'] [$k] [0]; $moved_vats [$k] [1] += $prev_page ['total_vats'] [$k] [1]; } } $tmp ['total_netto'] = $tmp ['site_netto'] + $tmp ['moved_netto']; $tmp ['total_brutto'] = $tmp ['site_brutto'] + $tmp ['moved_brutto']; $tmp ['total_vat'] = $tmp ['site_vat'] + $tmp ['moved_vat']; $tmp ['total_purchase'] = $tmp ['site_purchase'] + $tmp ['moved_purchase']; foreach ( $vats as $k => $v ) { $total_vats [$k] [0] += $site_vats [$k] [0] + $moved_vats [$k] [0]; $total_vats [$k] [1] += $site_vats [$k] [1] + $moved_vats [$k] [1]; } // insert page data $tmp ['rows'] = $data; $tmp ['page_no'] = $c; $tmp ['site_vats'] = $site_vats; $tmp ['moved_vats'] = $moved_vats; $tmp ['total_vats'] = $total_vats; $pages [] = $tmp; $prev_page = $tmp; $c ++; } // create document and show it $ss_pdf = new Sugar_Smarty (); $ss_pdf->assign ( "PAGES", $pages ); $ss_pdf->assign ( "VATS", $vats ); $ss_pdf->assign ( "vatsCount", $vatsCount ); // header stuff $cur_date = new DateTime ( "now" ); $cur_date = $cur_date->format ( 'd.m.Y H:m:s' ); $ss_pdf->assign ( "CUR_DATE", $cur_date ); $ss_pdf->assign ( "DATE_FROM", $date_from ); $ss_pdf->assign ( "DATE_TO", $date_to ); $ss_pdf->assign ( "S_STOCK", $s_stocks ); $ss_pdf->assign ( "S_KIND", $s_kinds ); $ss_pdf->assign ( "S_CATEGORY", $s_categories ); $ss_pdf->assign ( "S_TYPE", $s_types ); if ($_REQUEST ['to_xls'] == 1) { $header = array (); $header [] = 'nr dok.'; $header [] = 'data wystawienia'; $header [] = 'odbiorca - nip,nazwa,adres'; $header [] = 'sprzedaż brutto'; $header [] = 'sprzedaż netto'; foreach ( $vats as $val ) { $header [] = 'netto ' . $val; $header [] = 'vat ' . $val; } $header [] = 'vat razem'; $header [] = 'koszt'; $filename = 'modules/Home/Files/raport_sprzedazy_vat_' . date ( 'd_m-Y' ) . '.csv'; $fp = fopen ( $filename, 'w' ); foreach ( $header as $k => $v ) { $header [$k] = iconv ( 'UTF-8', 'windows-1250', $header [$k] ); } fwrite ( $fp, implode ( ";", $header ) . PHP_EOL ); foreach ( $pages [0] ['rows'] as $key => $val ) { $line = array (); $line [] = '"=""' . preg_replace ( "/[^A-ZłŁąĄęĘżŻ,:.źŹ%ćĆńŃśŚóÓa-z0-9\-\/]/", ' ', preg_replace ( "/\r\n|\r|\n/", ' ', html_entity_decode ( $val ['document_no'] ) ) ) . '"""'; $line [] = $val ['register_date']; $line [] = preg_replace ( "/[^A-ZłŁąĄęĘżŻ,:.źŹ%ćĆńŃśŚóÓa-z0-9\-\/]/", ' ', preg_replace ( "/\r\n|\r|\n/", ' ', html_entity_decode ( $val ['parent_info'] ) ) ); $line [] = str_replace ( ".", ",", $val ['brutto'] ); $line [] = str_replace ( ".", ",", $val ['netto'] ); foreach ( $val ['vats'] as $vi ) { $line [] = str_replace ( ".", ",", $vi [0] ); $line [] = str_replace ( ".", ",", $vi [1] ); } $line [] = str_replace ( ".", ",", $val ['vat'] ); $line [] = str_replace ( ".", ",", $val ['purchase'] ); foreach ( $line as $k => $v ) { $line [$k] = iconv ( 'UTF-8', 'windows-1250', $line [$k] ); ; } fwrite ( $fp, implode ( ";", $line ) . PHP_EOL ); } header ( "Location: " . $filename ); } else { include_once ("modules/EcmSysInfos/EcmSysInfo.php"); $ss_pdf->assign ( "COMPANY_NAME", 'e5 Polska Sp. z o. o.' ); $content = $ss_pdf->fetch ( 'modules/EcmReports/tpls/ReportSalesVatSalesPDF.tpl.html' ); include_once ("include/MPDF57/mpdf.php"); $p = new mPDF ( '', 'A4', null, 'helvetica', 5, 5, 33, 5, 5, 5 ); $p->writeHTML ( $content ); $p->setTitle ( "Rejestr sprzedaży VAT" ); $p->output ( "rej.pdf", "I" ); } // helper function cmp($a, $b) { if ($a ['parent_info'] == $b ['parent_info']) { return ($a ['register_date'] > $b ['register_date']) ? 1 : - 1; } return ($a ['parent_info'] > $b ['parent_info']) ? 1 : - 1; }