|
|
@@ -30,9 +30,7 @@ class Route_UrlAction_JPK extends RouteBase {
|
|
|
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");
|
|
|
- $year = date("Y", strtotime($this->JPK['MONTH']));
|
|
|
- if ($year < 2018) $this->JPK_VAT_Wariant = 2;
|
|
|
- else $this->JPK_VAT_Wariant = 3;
|
|
|
+ $this->JPK_VAT_Wariant = self::getWariant($JPK['MONTH']);
|
|
|
}
|
|
|
} catch (Exception $e) {
|
|
|
SE_Layout::gora();
|
|
|
@@ -48,6 +46,12 @@ class Route_UrlAction_JPK extends RouteBase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static function getWariant($month) {
|
|
|
+ $year = date("Y", strtotime($month . "-01"));
|
|
|
+ if ($year < 2018) return 2;
|
|
|
+ else return 3;
|
|
|
+ }
|
|
|
+
|
|
|
private function initialize() {
|
|
|
SE_Layout::gora();
|
|
|
SE_Layout::menu();
|
|
|
@@ -59,17 +63,24 @@ class Route_UrlAction_JPK extends RouteBase {
|
|
|
if (!preg_match("/^[[:digit:]]{4}-[[:digit:]]{2}$/",$month)) throw new Exception("błędny format daty (YYYY-MM)");
|
|
|
switch ($purpose) {
|
|
|
case "1":
|
|
|
- $lastMonth = DB::getPDO()->fetchValue("select max(MONTH) from JPK where ID_BILLING_OWNER='{$this->JPK['ID_BILLING_OWNER']}' and TYPE='{$this->JPK['TYPE']}' and PURPOSE='1'");
|
|
|
+ $lastMonth = DB::getPDO()->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 PURPOSE='1'");
|
|
|
+ $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';
|
|
|
@@ -163,33 +174,50 @@ format: 'YYYY-MM'
|
|
|
SE_Layout::dol();
|
|
|
}
|
|
|
|
|
|
- private $fieldsDescrJPK_VAT = array(
|
|
|
- "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",
|
|
|
- "PelnaNazwa" => "Nazwa podmiotu",
|
|
|
- "NIP" => "NIP",
|
|
|
- "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"
|
|
|
- );
|
|
|
+ private $fieldsDescrJPK_VAT = [
|
|
|
+ 2 => [
|
|
|
+ "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",
|
|
|
+ "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);
|
|
|
@@ -213,21 +241,27 @@ format: 'YYYY-MM'
|
|
|
$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];
|
|
|
- $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];
|
|
|
+ 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['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'] ?: "";
|
|
|
@@ -259,7 +293,7 @@ format: 'YYYY-MM'
|
|
|
$OUT_MERGED = $this->showJPK_VAT($xmlOUT_MERGED);
|
|
|
}
|
|
|
|
|
|
- foreach ($this->fieldsDescrJPK_VAT as $fieldKey => $fieldName) {
|
|
|
+ foreach ($this->fieldsDescrJPK_VAT[$this->JPK_VAT_Wariant] as $fieldKey => $fieldName) {
|
|
|
echo "<tr><td>{$fieldName}</td><td>";
|
|
|
if ($this->JPK['IN_INSERT']) echo $IN_INSERT[$fieldKey];
|
|
|
echo "</td><td>";
|
|
|
@@ -490,11 +524,20 @@ format: 'YYYY-MM'
|
|
|
|
|
|
if ($xml->xpath('/tns:JPK/tns:Naglowek/tns:KodFormularza')[0] != "JPK_VAT") throw new Exception("Błędny typ deklaracji JPK");
|
|
|
if ($xml->xpath('/tns:JPK/tns:Naglowek/tns:WariantFormularza')[0] != $this->JPK_VAT_Wariant) throw new Exception("Błędna wersja deklaracji JPK");
|
|
|
- if ($xml->xpath('/tns:JPK/tns:Naglowek/tns:CelZlozenia')[0] != $this->JPK['PURPOSE']) throw new Exception("Niezgodny cel złożenia deklaracji JPK");
|
|
|
+ if ($this->JPK_VAT_Wariant == 2) {
|
|
|
+ if ($xml->xpath('/tns:JPK/tns:Naglowek/tns:CelZlozenia')[0] != $this->JPK['PURPOSE']) throw new Exception("Niezgodny cel złożenia deklaracji JPK");
|
|
|
+ } elseif ($this->JPK_VAT_Wariant == 3) {
|
|
|
+ if (((int) $xml->xpath('/tns:JPK/tns:Naglowek/tns:CelZlozenia')[0]) xor ((int) $this->JPK['PURPOSE'])) throw new Exception("Niezgodny cel złożenia deklaracji JPK");
|
|
|
+ }
|
|
|
if ($xml->xpath('/tns:JPK/tns:Naglowek/tns:DataOd')[0] != ($this->JPK['MONTH'] . "-01")) throw new Exception("Błędna data 'od' deklaracji JPK");
|
|
|
if ($xml->xpath('/tns:JPK/tns:Naglowek/tns:DataDo')[0] != date("Y-m-d", strtotime($xml->xpath('/tns:JPK/tns:Naglowek/tns:DataOd')[0] . " + 1 month - 1 day"))) throw new Exception("Błędna data 'do' deklaracji JPK");
|
|
|
- if ($xml->xpath('/tns:JPK/tns:Naglowek/tns:DomyslnyKodWaluty')[0] != "PLN") throw new Exception("Błędna waluta deklaracji JPK");
|
|
|
- if (trim(str_replace('-', '', $xml->xpath('/tns:JPK/tns:Podmiot1/tns:IdentyfikatorPodmiotu/etd:NIP')[0])) != trim(str_replace('-', '', $this->BO['nip']))) throw new Exception("Niezgodny NIP podmiotu w deklaracji JPK");
|
|
|
+ if ($this->JPK_VAT_Wariant == 2) {
|
|
|
+ if ($xml->xpath('/tns:JPK/tns:Naglowek/tns:DomyslnyKodWaluty')[0] != "PLN") throw new Exception("Błędna waluta deklaracji JPK");
|
|
|
+ if (trim(str_replace('-', '', $xml->xpath('/tns:JPK/tns:Podmiot1/tns:IdentyfikatorPodmiotu/etd:NIP')[0])) != trim(str_replace('-', '', $this->BO['nip']))) throw new Exception("Niezgodny NIP podmiotu w deklaracji JPK");
|
|
|
+ } elseif ($this->JPK_VAT_Wariant == 3) {
|
|
|
+ if (trim(str_replace('-', '', $xml->xpath('/tns:JPK/tns:Podmiot1/tns:NIP')[0])) != trim(str_replace('-', '', $this->BO['nip']))) throw new Exception("Niezgodny NIP podmiotu w deklaracji JPK");
|
|
|
+ if (!$xml->Podmiot1->Email) unset($xml->Podmiot1->Email);
|
|
|
+ }
|
|
|
$summaryJPK_VAT = $this->getSummaryJPK_VAT($xml);
|
|
|
if ($summaryJPK_VAT["LiczbaWierszySprzedazy"]) {
|
|
|
if ($xml->xpath('/tns:JPK/tns:SprzedazCtrl/tns:LiczbaWierszySprzedazy')[0] != $summaryJPK_VAT["LiczbaWierszySprzedazy"]) throw new Exception("Brak spójności liczby wierszy sprzedaży w deklaracji JPK");
|
|
|
@@ -621,9 +664,10 @@ format: 'YYYY-MM'
|
|
|
|
|
|
private function import_l1_jpk() {
|
|
|
|
|
|
- $xmlSchema = <<<EOT
|
|
|
+ $xmlSchemaWarianty = [];
|
|
|
+ $xmlSchemaWarianty[2] = <<<EOT
|
|
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
|
|
-<JPK xmlns="http://jpk.mf.gov.pl/wzor/2016/10/26/10261/" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
+<JPK xmlns="{$this->tns[$this->JPK_VAT_Wariant]}" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
<Naglowek>
|
|
|
<KodFormularza kodSystemowy="JPK_VAT (2)" wersjaSchemy="1-0">JPK_VAT</KodFormularza>
|
|
|
<WariantFormularza>2</WariantFormularza>
|
|
|
@@ -656,6 +700,28 @@ format: 'YYYY-MM'
|
|
|
</JPK>
|
|
|
EOT;
|
|
|
|
|
|
+ $xmlSchemaWarianty[3] = <<<EOT
|
|
|
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
|
|
+<JPK xmlns="{$this->tns[$this->JPK_VAT_Wariant]}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
+ <Naglowek>
|
|
|
+ <KodFormularza kodSystemowy="JPK_VAT (3)" wersjaSchemy="1-1">JPK_VAT</KodFormularza>
|
|
|
+ <WariantFormularza>3</WariantFormularza>
|
|
|
+ <CelZlozenia></CelZlozenia>
|
|
|
+ <DataWytworzeniaJPK></DataWytworzeniaJPK>
|
|
|
+ <DataOd></DataOd>
|
|
|
+ <DataDo></DataDo>
|
|
|
+ <NazwaSystemu>Procesy5</NazwaSystemu>
|
|
|
+ </Naglowek>
|
|
|
+ <Podmiot1>
|
|
|
+ <NIP></NIP>
|
|
|
+ <PelnaNazwa></PelnaNazwa>
|
|
|
+ <Email></Email>
|
|
|
+ </Podmiot1>
|
|
|
+</JPK>
|
|
|
+EOT;
|
|
|
+
|
|
|
+ $xmlSchema = $xmlSchemaWarianty[$this->JPK_VAT_Wariant];
|
|
|
+
|
|
|
$queryFVAT = <<<EOT
|
|
|
select
|
|
|
bn.ID as BN_ID,
|
|
|
@@ -730,21 +796,29 @@ EOT;
|
|
|
$xml->Naglowek->DataWytworzeniaJPK = date("Y-m-d\TH:i:s");
|
|
|
$xml->Naglowek->DataOd = $this->JPK['MONTH'] . "-01";
|
|
|
$xml->Naglowek->DataDo = date("Y-m-d", strtotime($xml->Naglowek->DataOd . "+ 1 month - 1 day"));
|
|
|
- if (!($xml->Naglowek->KodUrzedu = $this->BO['kodUrzeduSkarbowego'])) throw new Exception("blędne dane podmiotu - brak kodu urzędu skarbowego");
|
|
|
- if (!($xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->NIP = trim(str_replace("-", "", $this->BO['nip'])))) throw new Exception("blędne dane podmiotu - brak NIP");
|
|
|
- if (!($xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->PelnaNazwa = $this->BO['name1'])) throw new Exception("blędne dane podmiotu - brak nazwy podmiotu");
|
|
|
- if ($this->BO['name2']) $xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->PelnaNazwa .= " " . $this->BO['name2'];
|
|
|
- if (!($xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->REGON = $this->BO['regon'])) unset($xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->REGON);
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->KodKraju = $this->BO['kodKraju'])) throw new Exception("blędne dane podmiotu - brak kodu kraju");
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->Wojewodztwo = $this->BO['wojewodztwo'])) unset($xml->Podmiot1->AdresPodmiotu->Wojewodztwo);
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->Powiat = $this->BO['powiat'])) unset($xml->Podmiot1->AdresPodmiotu->Powiat);
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->Gmina = $this->BO['gmina'])) unset($xml->Podmiot1->AdresPodmiotu->Gmina);
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->Ulica = $this->BO['ulica'])) unset($xml->Podmiot1->AdresPodmiotu->Ulica);
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->NrDomu = $this->BO['numer_dom'])) unset($xml->Podmiot1->AdresPodmiotu->NrDomu);
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->NrLokalu = $this->BO['numer_pos'])) unset($xml->Podmiot1->AdresPodmiotu->NrLokalu);
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->Miejscowosc = $this->BO['miasto'])) throw new Exception("blędne dane podmiotu - brak nazwy miejscowości");
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->KodPocztowy = $this->BO['kod'])) unset($xml->Podmiot1->AdresPodmiotu->KodPocztowy);
|
|
|
- if (!($xml->Podmiot1->AdresPodmiotu->Poczta = $this->BO['poczta'])) unset($xml->Podmiot1->AdresPodmiotu->Poczta);
|
|
|
+ if ($this->JPK_VAT_Wariant == 2) {
|
|
|
+ if (!($xml->Naglowek->KodUrzedu = $this->BO['kodUrzeduSkarbowego'])) throw new Exception("blędne dane podmiotu - brak kodu urzędu skarbowego");
|
|
|
+ if (!($xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->NIP = trim(str_replace("-", "", $this->BO['nip'])))) throw new Exception("blędne dane podmiotu - brak NIP");
|
|
|
+ if (!($xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->PelnaNazwa = $this->BO['name1'])) throw new Exception("blędne dane podmiotu - brak nazwy podmiotu");
|
|
|
+ if ($this->BO['name2']) $xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->PelnaNazwa .= " " . $this->BO['name2'];
|
|
|
+ if (!($xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->REGON = $this->BO['regon'])) unset($xml->Podmiot1->IdentyfikatorPodmiotu->children($ns['etd'])->REGON);
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->KodKraju = $this->BO['kodKraju'])) throw new Exception("blędne dane podmiotu - brak kodu kraju");
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->Wojewodztwo = $this->BO['wojewodztwo'])) unset($xml->Podmiot1->AdresPodmiotu->Wojewodztwo);
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->Powiat = $this->BO['powiat'])) unset($xml->Podmiot1->AdresPodmiotu->Powiat);
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->Gmina = $this->BO['gmina'])) unset($xml->Podmiot1->AdresPodmiotu->Gmina);
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->Ulica = $this->BO['ulica'])) unset($xml->Podmiot1->AdresPodmiotu->Ulica);
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->NrDomu = $this->BO['numer_dom'])) unset($xml->Podmiot1->AdresPodmiotu->NrDomu);
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->NrLokalu = $this->BO['numer_pos'])) unset($xml->Podmiot1->AdresPodmiotu->NrLokalu);
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->Miejscowosc = $this->BO['miasto'])) throw new Exception("blędne dane podmiotu - brak nazwy miejscowości");
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->KodPocztowy = $this->BO['kod'])) unset($xml->Podmiot1->AdresPodmiotu->KodPocztowy);
|
|
|
+ if (!($xml->Podmiot1->AdresPodmiotu->Poczta = $this->BO['poczta'])) unset($xml->Podmiot1->AdresPodmiotu->Poczta);
|
|
|
+ } elseif ($this->JPK_VAT_Wariant == 3) {
|
|
|
+ if (!($xml->Podmiot1->NIP = trim(str_replace("-", "", $this->BO['nip'])))) throw new Exception("blędne dane podmiotu - brak NIP");
|
|
|
+ if (!($xml->Podmiot1->PelnaNazwa = $this->BO['name1'])) throw new Exception("blędne dane podmiotu - brak nazwy podmiotu");
|
|
|
+ $mailRegex = '/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD';
|
|
|
+ if (preg_match($mailRegex, $this->BO['BILLING_OWNER_EMAIL'])) $xml->Podmiot1->Email = $this->BO['BILLING_OWNER_EMAIL'];
|
|
|
+ else unset($xml->Podmiot1->Email);
|
|
|
+ }
|
|
|
|
|
|
$data = array();
|
|
|
$allVAT = 0;
|
|
|
@@ -808,7 +882,7 @@ EOT;
|
|
|
foreach ($data as $pos) {
|
|
|
$this->validateNIP($pos[0]['NrKontrahenta'], $pos[0]['NazwaKontrahenta'], 'Sprzedaż L1');
|
|
|
$x = $xml->addChild('SprzedazWiersz');
|
|
|
- $x->addAttribute('typ', 'G');
|
|
|
+ if ($this->JPK_VAT_Wariant == 2) $x->addAttribute('typ', 'G');
|
|
|
$x->addChild('LpSprzedazy', ++$i);
|
|
|
ksort($pos[1]);
|
|
|
foreach ($pos as $subpos) foreach ($subpos as $key => $value) {
|
|
|
@@ -892,11 +966,19 @@ EOT;
|
|
|
|
|
|
private function generate_merged_jpk() {
|
|
|
|
|
|
- $xmlSchema = <<<EOT
|
|
|
+ $xmlSchemaWariant = [];
|
|
|
+ $xmlSchemaWariant[2] = <<<EOT
|
|
|
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
+<JPK xmlns="{$this->tns[$this->JPK_VAT_Wariant]}" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
+</JPK>
|
|
|
+EOT;
|
|
|
+ $xmlSchemaWariant[3] = <<<EOT
|
|
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
-<JPK xmlns="http://jpk.mf.gov.pl/wzor/2016/10/26/10261/" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
+<JPK xmlns="{$this->tns[$this->JPK_VAT_Wariant]}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
</JPK>
|
|
|
EOT;
|
|
|
+ $xmlSchema = $xmlSchemaWariant[$this->JPK_VAT_Wariant];
|
|
|
+
|
|
|
$xml_append = function(SimpleXMLElement $to, SimpleXMLElement $from) {
|
|
|
$toDom = dom_import_simplexml($to);
|
|
|
$fromDom = dom_import_simplexml($from);
|
|
|
@@ -926,6 +1008,7 @@ EOT;
|
|
|
}
|
|
|
|
|
|
$xml->Naglowek->DataWytworzeniaJPK = date("Y-m-d\TH:i:s");
|
|
|
+ $xml->Naglowek->CelZlozenia = $this->JPK['PURPOSE'];
|
|
|
|
|
|
$i = 0;
|
|
|
foreach ($xmlInsert->SprzedazWiersz as $sprzedazWiersz) {
|