144 lines
5.5 KiB
PHP
Executable File
144 lines
5.5 KiB
PHP
Executable File
<?php
|
|
if (! defined ( 'sugarEntry' ) || ! sugarEntry)
|
|
die ( 'Not A Valid Entry Point' );
|
|
|
|
ini_set('display_errors', 1);
|
|
ini_set('display_startup_errors', 1);
|
|
error_reporting(E_ALL);
|
|
|
|
require_once ('include/time.php');
|
|
require_once ('include/json_config.php');
|
|
|
|
$json_config = new json_config ();
|
|
$db = $GLOBALS['db'];
|
|
$process = false;
|
|
|
|
$edit->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;
|
|
}
|
|
|
|
?>
|