"http://jpk.mf.gov.pl/wzor/2016/10/26/10261/",
3 => "http://jpk.mf.gov.pl/wzor/2017/11/13/1113/",
];
public function handleAuth() {
if (!User::logged()) {
throw new HttpException('Unauthorized', 401);
}
$this->LAST_REFERER = $_SERVER['HTTP_REFERER'];
if (($this->REFERER=V::get('REFERER','',$_POST))=='') $this->REFERER = $_SERVER['HTTP_REFERER'];
try {
if (!($ID_JPK = V::get('ID_JPK',0,$_GET,'int'))) throw new Exception("Błąd parametru");
if ($result = DB::getPDO()->fetchall("select * from JPK where ID='{$ID_JPK}'")) $this->JPK = $result[0];
else throw new Exception("Dostęp zabroniony");
if ($result = DB::getPDO()->fetchall("select * from BILLING_OWNER where ID='{$this->JPK['ID_BILLING_OWNER']}'")) $this->BO = $result[0];
else throw new Exception("Błąd spójności danych");
if ($this->JPK['A_STATUS'] != 'WAITING') {
if (!$this->JPK['MONTH']) throw new Exception("Błąd daty w rekordzie JPK_VAT");
$this->JPK_VAT_Wariant = self::getWariant($this->JPK['MONTH']);
}
} catch (Exception $e) {
SE_Layout::gora();
SE_Layout::menu();
SE_Layout::alert('danger',$e->getMessage());
?>
fetchValue("select max(MONTH) from JPK where ID_BILLING_OWNER='{$this->JPK['ID_BILLING_OWNER']}' and TYPE='{$this->JPK['TYPE']}'
and ((MONTH < '2018-01' and PURPOSE='1') or (MONTH >= '2018-01' and PURPOSE = '0'))");
if (strtotime($month) <= strtotime($lastMonth)) throw new Exception("błędny miesiąc (deklaracja z tego okresu lub późniejszego już istnieje)");
break;
case "2":
$JPKexists = DB::getPDO()->fetchValue("select ID from JPK where ID_BILLING_OWNER='{$this->JPK['ID_BILLING_OWNER']}' and TYPE='{$this->JPK['TYPE']}' and MONTH='{$month}'
and ((MONTH < '2018-01' and PURPOSE='1') or (MONTH >= '2018-01' and PURPOSE = 0))");
if (!$JPKexists) throw new Exception("brak deklaracji z tego okresu - nie ma czego korygować");
break;
default:
throw new Exception("błędne określenie celu złożenia deklaracji");
}
if (self::getWariant($month) > 2) {
if ($purpose == 1) $purpose = (int) 0;
else $purpose = DB::getPDO()->fetchValue("select max(PURPOSE) + 1 from JPK where ID_BILLING_OWNER='{$this->JPK['ID_BILLING_OWNER']}' and TYPE='{$this->JPK['TYPE']}' and MONTH='{$month}'");
}
$sqlObj = new stdClass();
$sqlObj->ID = $this->JPK['ID'];
$sqlObj->A_STATUS = 'NORMAL';
$sqlObj->A_STATUS_INFO = 'W trakcie tworzenia';
$sqlObj->MONTH = $month;
$sqlObj->PURPOSE = $purpose;
$affected = DB::getDB()->UPDATE_OBJ('JPK', $sqlObj);
if ($affected) {
SE_Layout::alert('success','Pomyślnie zainicjalizowano deklarację JPK.');
?>
getMessage());
?>
[
"KodFormularza" => "Kod formularza",
"WariantFormularza" => "Wariant formularza",
"CelZlozenia" => "Cel złożenia",
"DataWytworzeniaJPK" => "Data wytworzenia JPK",
"DataOd" => "Data od",
"DataDo" => "Data do",
"DomyslnyKodWaluty" => "Waluta",
"KodUrzedu" => "Kod urzędu skarbowego",
"NIP" => "NIP",
"PelnaNazwa" => "Nazwa podmiotu",
"REGON" => "Regon",
"KodKraju" => "Kod kraju",
"Wojewodztwo" => "Województwo",
"Powiat" => "Powiat",
"Gmina" => "Gmina",
"Miejscowosc" => "Miejscowość",
"Ulica" => "Ulica",
"NrDomu" => "Nr domu",
"NrLokalu" => "Nr lokalu",
"KodPocztowy" => "Kod pocztowy",
"Poczta" => "Poczta",
"LiczbaWierszySprzedazy" => "Liczba dokumentów sprzedaży",
"PodatekNalezny" => "Podatek należny",
"LiczbaWierszyZakupow" => "Liczba dokumentów zakupu",
"PodatekNaliczony" => "Podatek naliczony",
],
3 => [
"KodFormularza" => "Kod formularza",
"WariantFormularza" => "Wariant formularza",
"CelZlozenia" => "Cel złożenia",
"DataWytworzeniaJPK" => "Data wytworzenia JPK",
"DataOd" => "Data od",
"DataDo" => "Data do",
"NazwaSystemu" => "Nazwa systemu",
"NIP" => "NIP",
"PelnaNazwa" => "Nazwa podmiotu",
"Email" => "Adres email",
"LiczbaWierszySprzedazy" => "Liczba dokumentów sprzedaży",
"PodatekNalezny" => "Podatek należny",
"LiczbaWierszyZakupow" => "Liczba dokumentów zakupu",
"PodatekNaliczony" => "Podatek naliczony",
],
];
private static function getNamespaces($xml) {
$ns = $xml->getNamespaces(true);
if (!isset($ns['tns'])) {
if (isset($ns[''])) {
$ns['tns'] = $ns[''];
unset($ns['']);
} else throw new Exception('Błędna struktura namespace');
}
foreach ($ns as $k => $v) $xml->registerXPathNamespace($k, $v);
return $ns;
}
private function showJPK_VAT($xml) {
$ns = self::getNamespaces($xml);
$summaryJPK_VAT = $this->getSummaryJPK_VAT($xml);
$result['KodFormularza'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:KodFormularza')[0];
$result['WariantFormularza'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:WariantFormularza')[0];
$result['CelZlozenia'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:CelZlozenia')[0];
$result['DataWytworzeniaJPK'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:DataWytworzeniaJPK')[0];
$result['DataOd'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:DataOd')[0];
$result['DataDo'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:DataDo')[0];
if ($this->JPK_VAT_Wariant == 2) {
$result['DomyslnyKodWaluty'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:DomyslnyKodWaluty')[0];
$result['KodUrzedu'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:KodUrzedu')[0];
$result['NIP'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:IdentyfikatorPodmiotu/etd:NIP')[0];
$result['PelnaNazwa'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:IdentyfikatorPodmiotu/etd:PelnaNazwa')[0];
$result['REGON'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:IdentyfikatorPodmiotu/etd:REGON')[0];
$result['KodKraju'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:KodKraju')[0];
$result['Wojewodztwo'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:Wojewodztwo')[0];
$result['Powiat'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:Powiat')[0];
$result['Gmina'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:Gmina')[0];
$result['Ulica'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:Ulica')[0];
$result['NrDomu'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:NrDomu')[0];
$result['NrLokalu'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:NrLokalu')[0];
$result['Miejscowosc'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:Miejscowosc')[0];
$result['KodPocztowy'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:KodPocztowy')[0];
$result['Poczta'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:AdresPodmiotu/tns:Poczta')[0];
} elseif ($this->JPK_VAT_Wariant == 3) {
$result['NazwaSystemu'] = $xml->xpath('/tns:JPK/tns:Naglowek/tns:NazwaSystemu')[0];
$result['NIP'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:NIP')[0];
$result['PelnaNazwa'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:PelnaNazwa')[0];
$result['Email'] = $xml->xpath('/tns:JPK/tns:Podmiot1/tns:Email')[0];
}
$result['LiczbaWierszySprzedazy'] = $summaryJPK_VAT['LiczbaWierszySprzedazy'] ?: "";
$result['PodatekNalezny'] = $summaryJPK_VAT['LiczbaWierszySprzedazy'] ? number_format($summaryJPK_VAT['PodatekNalezny'], 2, ',', '.'): "";
$result['LiczbaWierszyZakupow'] = $summaryJPK_VAT['LiczbaWierszyZakupow'] ?: "";
$result['PodatekNaliczony'] = $summaryJPK_VAT['LiczbaWierszyZakupow'] ? number_format($summaryJPK_VAT['PodatekNaliczony'], 2, ',', '.'): "";
return $result;
}
private function showTable() {
?>
JPK['OUT_MERGED']) throw new Exception("Błąd danych - nie wygenerowano wynikowego pliku JPK");
$xml = simplexml_load_string($this->JPK['OUT_MERGED']);
$ns = $xml->getNamespaces(true);
$this->validateJPK_VAT($xml);
if ($this->JPK_VAT_Wariant == 2) $pelnaNazwa = $xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->PelnaNazwa;
elseif ($this->JPK_VAT_Wariant == 3) $pelnaNazwa = $xml->Podmiot1->PelnaNazwa;
$fileName = preg_replace("/[: \.]/", "_", "JPK_VAT_{$this->JPK['MONTH']}_" . str_replace('"', '', $pelnaNazwa)) . ".xml";
$output = $xml->asXml();
header("Content-Type: application/xml");
header("Content-Disposition: attachment; filename={$fileName};");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . strlen($output));
echo $output;
} catch (Exception $e) {
SE_Layout::gora();
SE_Layout::menu();
SE_Layout::alert('danger', $e->getMessage());
?>