Files
crm.e5.pl/modules/EcmInvoiceOuts/Report_INTRASTAT.php

144 lines
5.5 KiB
PHP
Raw Normal View History

2024-04-27 09:23:34 +02:00
<?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;
}
?>