ss = new Sugar_Smarty (); if ($_POST['process']) { $where = "YEAR(i.register_date)=".$_POST['year']." AND MONTH(i.register_date)=".$_POST['month']." AND i.pdf_type='U' AND i.deleted=0 AND i.canceled=0"; $process = true; $invoices = getInvoices($db, $where); $badProducts = getBadProducts($db, $where); $data = getData($db, $where); $edit->ss->assign("data", $data ); $edit->ss->assign("invoices", $invoices); $edit->ss->assign("badProducts", $badProducts); } if ($_POST['xml']) { $month = $_POST['xml_month']; if (strlen($month) == 1) { $month = '0'.$month; } $where = "YEAR(i.register_date)=".$_POST['xml_year']." AND MONTH(i.register_date)=".$_POST['xml_month']." AND i.pdf_type='U' AND i.deleted=0 AND i.canceled=0"; ob_end_clean(); header_remove(); header("Content-type: text/xml"); header('Content-Disposition: attachment; filename="01'.$month.''.$_POST['xml_year'].'TWIN.xml"'); $data = getData($db, $where); $edit->ss->assign("month", $month); $edit->ss->assign("year", $_POST['xml_year']); $edit->ss->assign("today", date("Y").'-'.date("m").'-'.date('d')); $edit->ss->assign("data", $data ); $edit->ss->assign("total", array_reduce($data, "sum")); $edit->ss-> display('modules/EcmInvoiceOuts/tpls/Report_INTRASTAT_XML.tpl'); exit(); } else { $edit->ss->assign("process", $process); if ($_POST['process']) { $edit->ss->assign("year", $_POST['year']); $edit->ss->assign("month", $_POST['month']); } else { $edit->ss->assign("year", date("Y")); $edit->ss->assign("month", date("m")); } $edit->module = 'EcmInvoiceOuts'; $edit->ss-> display('modules/EcmInvoiceOuts/tpls/Report_INTRASTAT.tpl'); } function sum($carry, $item) { $carry += $item['total']; return $carry; } function getData($db, $where) { $data = []; echo "SELECT i.document_no, i.parent_id, i.parent_nip as nip, REPLACE(SUBSTRING(p.pkwiu, 3),' ','') as pkwiu, ROUND(SUM(ii.quantity * p.qty_per_unit)) as qty_intrastat,SUBSTRING(i.parent_nip, 1, 2) as country, ROUND(SUM(p.product_brutto_weight * ii.quantity)) as weight, ROUND(SUM(ii.total_netto * i.currency_value_nbp)) as total FROM ecminvoiceoutitems as ii INNER JOIN ecminvoiceouts AS i ON i.id = ii.ecminvoiceout_id INNER JOIN accounts AS a ON a.id=i.parent_id INNER JOIN ecmproducts as p ON p.id = ii.ecmproduct_id WHERE ".$where." AND p.ks_group <> 3 GROUP BY i.parent_nip, p.pkwiu ORDER BY i.register_date;"; $res = $db->query("SELECT i.document_no, i.parent_id, i.parent_nip as nip, REPLACE(SUBSTRING(p.pkwiu, 3),' ','') as pkwiu, ROUND(SUM(ii.quantity * p.qty_per_unit)) as qty_intrastat,SUBSTRING(i.parent_nip, 1, 2) as country, ROUND(SUM(p.product_brutto_weight * ii.quantity)) as weight, ROUND(SUM(ii.total_netto * i.currency_value_nbp)) as total FROM ecminvoiceoutitems as ii INNER JOIN ecminvoiceouts AS i ON i.id = ii.ecminvoiceout_id INNER JOIN accounts AS a ON a.id=i.parent_id INNER JOIN ecmproducts as p ON p.id = ii.ecmproduct_id WHERE ".$where." AND p.ks_group <> 3 GROUP BY i.parent_nip, p.pkwiu ORDER BY i.register_date;"); print_r($res); global $app_list_strings; $intrastat_codes = $app_list_strings['intrastat_codes_list']; $position = 1; while($r = $db->fetchByAssoc ( $res )) { $item = array(); $item['position'] = $position; $item['pkwiu'] = $r['pkwiu']; $item['description'] = $intrastat_codes[$r['pkwiu']]; $item['nip'] = $r['nip']; $item['country'] = $r['country']; $item['weight'] = $r['weight']; $item['total'] = $r['total']; $item['qty_intrastat'] = $r['qty_intrastat']; array_push($data, $item); $position++; } return $data; } function getInvoices($db, $where) { $invoices = []; $invoicesRes = $db->query("SELECT id, document_no FROM ecminvoiceouts as i WHERE ".$where." ORDER BY i.register_date"); while ($r = $db->fetchByAssoc($invoicesRes)) { $item = array(); $item['id'] = $r['id']; $item['document_no'] = $r['document_no']; array_push($invoices, $item); } return $invoices; } function getBadProducts($db, $where) { $badProducts = []; $productsRes = $db->query("SELECT p.id as id, p.code as code, p.name as name, p.pkwiu as pkwiu, p.product_brutto_weight as weight FROM ecminvoiceoutitems as ii INNER JOIN ecmproducts as p ON p.id = ii.ecmproduct_id INNER JOIN ecminvoiceouts as i ON i.id = ii.ecminvoiceout_id WHERE ".$where." AND (p.ks_group = 1 OR p.ks_group = 2) AND (p.pkwiu IS NULL OR p.pkwiu = '' OR p.product_brutto_weight IS NULL OR p.product_brutto_weight = '') GROUP BY p.code ORDER BY p.code"); while ($r = $db->fetchByAssoc($productsRes)) { $item = array(); $item['id'] = $r['id']; $item['code'] = $r['code']; $item['name'] = $r['name']; $item['pkwiu'] = $r['pkwiu']; $item['weight'] = $r['weight']; array_push($badProducts, $item); } return $badProducts; } ?>